Upgrade to Pro — share decks privately, control downloads, hide ads and more …

スイッチ交換でデータベースが苦労した話 / rebuild mysql group repli...

toshifusa
August 02, 2019

スイッチ交換でデータベースが苦労した話 / rebuild mysql group replicaton

グループレプリケーションが壊れて直すまでの物語

toshifusa

August 02, 2019
Tweet

More Decks by toshifusa

Other Decks in Technology

Transcript

  1. 劇的ビフォーアフター ビフォー アフター M2 M1 M3 L3SW M2 M1 M3

    L3SW 手厚く保護されて いた本番DBが まさかの無保護状 態に!
  2. 同期再開できなくなった原因 • 本来更新されないはずだった同期停止側のDBが更新されてし まい、データに差異が生まれてしまった MySQL :: MySQL 5.6 リファレンスマニュアル ::

    17.1.3.1 GTID の概念 https://dev.mysql.com/doc/refman/5.6/ja/replication-gtids-concepts.html グローバルトランザクション識別子 (GTID) は、発生元のサーバー (マスター) で作成され、そこでコ ミットされた各トランザクションに関連付けられる一意識別子です。
  3. 同期再開失敗時のつれないメッセージ > start group_replication; ERROR 3092 (HY000): The server is

    not configured properly to be an active member of the group. Please see more details on error log. サーバーは、グループのアクティブメンバーになるように正しく構成されて いません。エラーログの詳細をご覧ください。
  4. 再同期失敗時のせつないエラーログ 2019-02-27T04:45:35.744126+09:00 0 [ERROR] Plugin group_replication reported: 'This member has

    more executed transactions than those present in the group. Local transactions: 1b7ca97b-6164-11e8-8035-246e96b82c98:1- 220905070:221248887-221249753,f2349267-60a7-11e8-b6ba-246e96b6ee40:1- 2 > Group transactions: 1b7ca97b-6164-11e8-8035-246e96b82c98:1- 220905070:221248887-221254343' 2019-02-27T04:45:35.744183+09:00 0 [ERROR] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.' このメンバーは、グループ内に存在するトランザクションよりも多くの実行済みトランザ クションを持っています。 メンバーに、グループに存在しないトランザクションが含まれています。 メンバーはグループから脱退します。
  5. この時点から、どのように復旧したか 2019-02-27T04:45:35.744126+09:00 0 [ERROR] Plugin group_replication reported: 'This member has

    more executed transactions than those present in the group. Local transactions: 1b7ca97b-6164-11e8-8035-246e96b82c98:1- 220905070:221248887-221249753,f2349267-60a7-11e8-b6ba-246e96b6ee40:1- 2 > Group transactions: 1b7ca97b-6164-11e8-8035-246e96b82c98:1- 220905070:221248887-221254343' 2019-02-27T04:45:35.744183+09:00 0 [ERROR] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'
  6. 復旧への軌跡 1. 強制的に再同期を行う →コミット遅延が発生 2. グループレプリケーションを解体する →コミット遅延解消 3. 生き残った更新系DBのダンプ&リストア&再同期 →

    マスタースレーブレプリケーションが開始できない問題発生 4. 生き残った更新系DBの全DBダンプ&リストア&再同期の再実施 →マスタースレーブレプリケーションが開始できない問題解消せず 5. 全データベース、物理コピーを実施 → やっと復旧完了!
  7. その際のエラーログ 2019-03-08T06:08:22.937343+09:00 17 [ERROR] Error reading packet from server for

    channel '': Slave has more GTIDs than the master has, using the master's SERVER_UUID. This may indicate that the end of the binary log was truncated or that the last binary log file was lost, e.g., after a power or disk failure when sync_binlog != 1. The master may or may not have rolled back transactions that were already replicated to the slave. Suggest to replicate any transactions that master has rolled back from slave to master, and/or commit empty transactions on master to account for transactions that have been (server_errno=1236) マスターのSERVER_UUIDを使用すると、スレーブはマスターよりも多くのGTIDを持ちま す。
  8. 結局、GTIDの何に差があったのか root@localhost [(none)] > select * from mysql.gtid_executed; +--------------------------------------+----------------+--------------+ |

    source_uuid | interval_start | interval_end | +--------------------------------------+----------------+--------------+ | 1b7ca97b-6164-11e8-8035-246e96b82c98 | 1 | 227533311 | | 1b7ca97b-6164-11e8-8035-246e96b82c98 | 227533312 | 227679473 | | 1b7ca97b-6164-11e8-8035-246e96b82c98 | 228290055 | 228703862 | | 1b7ca97b-6164-11e8-8035-246e96b82c98 | 228703863 | 228703864 | | 1b7ca97b-6164-11e8-8035-246e96b82c98 | 229703863 | 229703864 | | 3cc7dc1a-60a9-11e8-835f-246e96b82cf8 | 1 | 714284 | | 60bc34af-60a7-11e8-83a2-246e96b82c98 | 1 | 3 | | 766c298c-60a9-11e8-84e0-246e96b82c30 | 1 | 411 | | 766c298c-60a9-11e8-84e0-246e96b82c30 | 412 | 413 | | f2349267-60a7-11e8-b6ba-246e96b6ee40 | 1 | 2 | +--------------------------------------+----------------+--------------+ • スレーブのGTID_EXECUTEDには、5種類のSERVER_UUIDが入っ ていた • ここがマスターと一致していなかった ここはグループレプ リケーションのUUID ここは個別サーバー のUUID
  9. 復旧4回目:物理コピーの実施 • 復旧作業に3回失敗したため、確実に復旧できる方法が求めら れた • 復旧が必要なDBとは別に、スナップショットを格納したDBを 構築 • 更新系DBを全停止して、物理コピーを実施 •

    全DBを全く同一にしてグループレプリケーションとマスター スレーブレプリケーションを再構築 • スナップショットDBから更新系DBへ差分の書き戻しを行い データを復旧
  10. 物理コピー実施時のデータベース構成 M LB M M S S S M S

    S 一時利用DBを用意 API ①スナップショット ⑤差分書き戻し ②向き先変更 ④向き先を戻す ③物理コピーを実施
  11. 朗報 • MySQL 8.0.17 でデータベースをクローンを作成する機能が追 加されたようです! MySQL InnoDB Cluster –

    What’s new in Shell AdminAPI 8.0.17 release | MySQL Server Blog https://mysqlserverteam.com/mysql-innodb-cluster-whats-new-in-shell-adminapi-8-0-17- release/ しかしMySQL 8.0.17ではそれがようやく変わりました!MySQLでのクローン作成サポートの導入とグ ループレプリケーションによる統合により、ついにこのような制限を克服し、すぐに使用可能な完全 なHAソリューションに移行することができました。 クローンプラグインは、一般的には、データベースの物理的なスナップショットを作成し、それらを ネットワーク経由でプロビジョニングサーバーに転送することを可能にします。したがって、外部 ツールなしでリモートクローン作成が可能になります。