Quantcast
Channel: 日々の覚書
Viewing all articles
Browse latest Browse all 581

MultiPrimaryModeのGroup Replication環境を崩壊させるテスト

$
0
0

TL;DR

  • 完全崩壊した時の復旧シナリオを考えたりするには、やっぱり崩壊した状態を再現させられると便利だよね
  • cluster.switchToMultiPrimaryMode()してから2つの別のノードに「1回目は成功するけど2回流すと必ず失敗するALTER TABLE」を投げると崩壊させられる

node1> ALTER TABLE sbtest.sbtest1 ADD KEY idx_pad (pad);
Query OK, 0 rows affected, 1 warning (10.36 sec)
Records: 0 Duplicates: 0 Warnings: 1

-- 5秒くらい待つ

node2> ALTER TABLE sbtest.sbtest1 ADD KEY idx_pad (pad);
Query OK, 0 rows affected, 1 warning (10.60 sec)
Records: 0 Duplicates: 0 Warnings: 1
  1. node1のALTER TABLEが終わり、 node2node3に渡される
  2. node2では手で打ったALTER TABLEがメタデータをロックしているので node1から渡ってきたALTER TABLEは待たされる
  3. node3では node1由来のALTER TABLEが実行される
  4. node2の手で打ったALTER TABLEが終わり、 node1由来のALTER TABLEを適用しようとするが同じ名前のインデックスは作成できないのでエラー
  5. node2由来のALTER TABLEが node1node3に到達して、やっぱり同じ名前のインデックスは作成できないのでエラー
結果として完全崩壊する。
### node1
$ mysql -e "SELECT member_host, member_state, member_role FROM performance_schema.replication_group_members"
+------------------------------+--------------+-------------+
| member_host | member_state | member_role |
+------------------------------+--------------+-------------+
| node1 | ERROR | |
| node2 | ONLINE | PRIMARY |
| node3 | ONLINE | PRIMARY |
+------------------------------+--------------+-------------+

### node2
$ mysql -e "SELECT member_host, member_state, member_role FROM performance_schema.replication_group_members"
+-----------------------------+--------------+-------------+
| member_host | member_state | member_role |
+-----------------------------+--------------+-------------+
| node2 | ONLINE | PRIMARY |
+-----------------------------+--------------+-------------+

### node3
$ mysql -e "SELECT member_host, member_state, member_role FROM performance_schema.replication_group_members"
+------------------------------+--------------+-------------+
| member_host | member_state | member_role |
+------------------------------+--------------+-------------+
| node1 | ONLINE | PRIMARY |
| node2 | ONLINE | PRIMARY |
| node3 | ERROR | |
+------------------------------+--------------+-------------+
エラーログはどのノードも同じようなことを言っていた。
2020-02-21T09:10:32.562676Z 13 [ERROR] [MY-011451] [Repl] Plugin group_replication reported: 'The applier thread execution was aborted. Unable to process more transactions, this member will now leave the group.'
2020-02-21T09:10:32.562690Z 13 [ERROR] [MY-010586] [Repl] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'FIRST' position 0
2020-02-21T09:10:32.562921Z 9 [ERROR] [MY-011452] [Repl] Plugin group_replication reported: 'Fatal error during execution on the Applier process of Group Replication. The server will now leave the group.'
2020-02-21T09:10:32.562975Z 9 [ERROR] [MY-011712] [Repl] Plugin group_replication reported: 'The server was automatically set into read only mode after an error was detected.'
ここまで来るともうまともにMySQL ShellやGroup Replication関連のステートメントが使えなくなるので、たっぷり復旧方法を考えたり試したりできる。

Viewing all articles
Browse latest Browse all 581

Trending Articles