2013年1月22日火曜日

slaveの追加、再設定時のI/Oスレッドの注意点

slaveを増やす場合の注意点として次の点があるそうです。

新しいslaveの設定が終わり同期を開始した時に、設定中にmasterに書き込まれたバイナリーログを、
新しいslaveのI/Oスレッドが取得しにくことで、masterの負荷やトラフィックの圧迫に繋がるそうです。

MySQLでslave追加時にmasterが全力でbinlogを送って困る時から抜粋
http://blog.riywo.com/2011/02/03/000019
slaveを追加したい時にはその日のdumpとポジションを使って上記の方法で作るのですが、
start slaveしたあとbinlogをキャッチアップする際にmasterで問題が起こることがあります。

・binlog転送は全力で行われるのでmasterのoutのtrafficが枯れる
・OSのfilecacheにないのでmasterのread IOが出てしまう(参考:GREE Engineers’ Blog)
この対策として、
同じサイトから抜粋になりますが、次の3点などあるそうです。
1.binlogをscp/rsyncで帯域制御して送って、mysqlbinlogを使ってslaveに適応し、適当なところへchange master
2.slave側でstop slave/start slaveをこまめに実行して平均トラフィックを下げる
3.Linux側で帯域制御する(cbq)

この中でも一番簡単なのが、2番だそうです!φ(゚Д゚ )フムフム…
シェルスクリプトまで用意してくれているの拝借しますъ(゚Д゚)グッジョブ!!
vi io_thread_sync.sh
#!/bin/bash
while : ;
do
    echo "`date` stop slave"; mysql -uroot -pxxxx -e "stop slave io_thread";
    sleep 5;
    echo "`date` start slave"; mysql -uroot -pxxxx -e "start slave io_thread";
    sleep 1;
done
こちらの人が書いたシェルスクリプトでも(・∀・)イイ!!
vi io_thread_sync.sh
#!/bin/bash

echo "`date` START SLAVE"
mysql -e "START SLAVE"
sleep 1

BEHIND=1
#取得したSeconds_Behind_Masterの値が0以外だったらループ
while [ ${BEHIND} -gt 0 ]
do

  echo "`date` STOP SLAVE"
  #I/O thread停止
  mysql -u root -e "STOP SLAVE IO_THREAD"

  sleep 5
  echo "`date` START SLAVE"; 
  #I/O thread開始
  mysql -e "START SLAVE IO_THREAD"

  sleep 1
  #Seconds_Behind_Masterの値を取得
  BEHIND=`mysql -e "show slave status\G" |grep Seconds_Behind_Master|cut -f 2 -d ':'`
  echo "`date` Seconds_Behind_Master:${BEHIND}"

done

実際に実行すると次のようになる。
sh io_thread_sync.sh
2013年  1月 22日 火曜日 11:00:50 JST START SLAVE
2013年  1月 22日 火曜日 11:00:51 JST STOP SLAVE
2013年  1月 22日 火曜日 11:00:56 JST START SLAVE
2013年  1月 22日 火曜日 11:00:57 JST Seconds_Behind_Master: 57512
2013年  1月 22日 火曜日 11:00:57 JST STOP SLAVE
2013年  1月 22日 火曜日 11:01:02 JST START SLAVE
2013年  1月 22日 火曜日 11:01:05 JST Seconds_Behind_Master: 57516
2013年  1月 22日 火曜日 11:01:05 JST STOP SLAVE
2013年  1月 22日 火曜日 11:01:10 JST START SLAVE
2013年  1月 22日 火曜日 11:01:12 JST Seconds_Behind_Master: 57518
2013年  1月 22日 火曜日 11:01:12 JST STOP SLAVE
2013年  1月 22日 火曜日 11:01:18 JST START SLAVE
2013年  1月 22日 火曜日 11:01:19 JST Seconds_Behind_Master: 57521
2013年  1月 22日 火曜日 11:01:19 JST STOP SLAVE
2013年  1月 22日 火曜日 11:01:24 JST START SLAVE
2013年  1月 22日 火曜日 11:01:25 JST Seconds_Behind_Master: 57523
2013年  1月 22日 火曜日 11:01:25 JST STOP SLAVE
(・∀・)イイネ!!
参考URL

0 件のコメント:

コメントを投稿