マスタn対スレーブ1
   レプリケーションの
      作り方
     ~あれから~

2013/04/17   MySQL Casual Talks vol.4 do_aki
do_aki (どぅーあき)
|所属| > 株式会社もしも
      (ドロップシッピング・アフィリエイトASP)
|仕事| > インフラ(サーバ管理)兼
     Webアプリケーション開発
|出現| > 渋谷・山手線沿線
|特性| > PHPer


                       http://do-aki.net/
マスタn対スレーブ1
 レプリケーション
カジュアルなマスタ分割

        Master           JOIN           Master
          A              不可               B




Slave            Slave          Slave            Slave
 A1               A2             B1               B2
カジュアルなマスタ分割

        Master           JOIN           Master
          A              不可               B




Slave            Slave          Slave            Slave
 A1               A2             B1               B2
カジュアルなマスタ併合

         Master           Master
           A                B




Slave   Slave     Slave      Slave   Slave
         A2                   B1      B2
 A1               A+B
n:1 レプリケーション

 Master           Master
   A                B




          Slave
          A+B
n:1 レプリケーション

      Master           Master
        A                B




 CHANGE
MATER TO
               Slave
でマスタを
               A+B
定期切替
n:1 レプリケーション

      Master           Master
        A                B




 CHANGE
MATER TO
               Slave
でマスタを
               A+B
定期切替
n:1 レプリケーション

 Master           Master
   A                B




                     詳しくは、Vol.2の
                     スライドを参照
          Slave
                     http://www.slideshare.n
          A+B        et/do_aki/20110809-my-
                     sql-casual-talks-vol2
発表者do_akiからの
メッセージをお読みください
本トークの注意事項
 真新しい話は一切無し
 このネタ正直もう飽きた
 (・ω・\)SAN値!
           (/・ω・)/ピンチ!
想定以上に安定稼働しすぎ
ネタ無いのに主催に半強制的に発表
 させられてるなんて言えない
稼働歴
2011年 7月 稼働開始
2011年 8月 MySQL Casual Talks Vol.2
2011年11月 障害停止
         (max_allowed_packet 不足)
2012年 4月 MySQL Casual Talks Vol.3
2012年10月 計画停止(マスタ切替)
2012年12月 計画停止(Disk 拡張)
2013年 4月 MySQL Casual Talks Vol.4
エラーログ膨らむ
130415 20:55:11 [ERROR] Error reading packet from server: Lost connection
to MySQL server during query ( server_errno=2013)
130415 20:55:11 [Note] Slave I/O thread killed while reading event
130415 20:55:11 [Note] Slave I/O thread exiting, read up to log 'mysql-
bin.003284', position 585650324
130415 20:55:11 [Note] Error reading relay log event: slave SQL thread was
killed
130415 20:55:11 [Note] 'CHANGE MASTER TO executed'. Previous state
master_host='master host1', master_port='3306', master_log_file='mysql-
bin.003284', master_log_pos='585650324'. New state master_host='master
host2', master_port='3306', master_log_file='mysql-bin.001770',
master_log_pos='996447621'.
130415 20:55:11 [Note] Slave SQL thread initialized, starting replication in log
'mysql-bin.0001770' at position 996447621, relay log './relay-bin.000001'
position: 4
130415 20:55:11 [Note] Slave I/O thread: connected to master 'slave
user@master host2:3306',replication started in log 'mysql-bin.001770' at
position 996447621
pt-online-schema-
change と相性悪い
pt-online-schema-change

• オンラインでスキーマ変更

• 全スレーブをチェック (本実行時のみ)

• 遅延状況によってWait (負荷低減)

• マスタ切り替え中にチェックが走るとタ
 イミングによっては待ち続ける
まとめ
ネタ切れ
•   ほんとに安定稼働中
•   運用コストがほとんど無くてびっくり
•   興味あるならコードはこちら
•   https://github.com/do-aki/SwitchMaster
• 信じられないだろ、こんな適当なコード
  で動いてるんだぜ、これ
ありがとうご
ざいました

マスタN対スレーブ1レプリケーションの作り方 ~あれから~