TL;DR
- グループレプリケーション(mysqldそのもの)が認識してるノードの情報は
performance_schema.replication_group_members
- InnoDB Clusterの中でMySQL ShellとMySQL Routerが使うノードの情報は
mysql_innodb_cluster_metadata.instances
- 整合性が取れなったら
cluster.rescan
でグループレプリケーション側の情報を正としてInnoDB Clusterのメタデータを修正できる
以下、
performance_schema.replication_group_members
をメンバー、 mysql_innodb_cluster_metadata.instances
をメタデータと略するます。メンバーにいるけどメタデータにいないパターン
再現方法
- 手で(=MySQL Shellを使わずに)グループレプリケーションのノードを追加したり、 メタデータのレコードを直接DELETEしたりするとなる
影響
- MySQL Routerはメタデータ経由で接続先をバランシングするので、メタデータに載っていないノードにはMySQL Router経由でアクセスできない
- 戯れにシングルプライマリーのプライマリーノードをメタデータから消したら、R/Wの6446ポートにアクセスできなくなった
- MySQL Shellの動作もおかしくなる
- シングルプライマリーのプライマリーノードをメタデータから消したら
dba.getCluster
できなくなった- SQLインターフェースで
SELECT group_replication_set_as_primary(..)
でスイッチしたらgetClusterはできるようになったけど
- SQLインターフェースで
cluster.setPrimaryInstance
とかも動かないCluster.setPrimaryInstance: This operation requires all the cluster members to be ONLINE (RuntimeError)
って言われた
- シングルプライマリーのプライマリーノードをメタデータから消したら
復旧
cluster.rescan
はメンバーとメタデータを突き合わせて、メンバー(Group Replication上の状態を正として) に合わせてくれる
MySQL localhost:33060+ ssl JS > cluster.rescan()
Rescanning the cluster...
Result of the rescanning operation for the 'myfabric' cluster:
{
"name": "myfabric",
"newTopologyMode": null,
"newlyDiscoveredInstances": [
{
"host": "node3:3306",
"member_id": "f95ce2c9-62a0-11ea-b1cc-12d40307b547",
"name": null,
"version": "8.0.19"
}
],
"unavailableInstances": []
}
A new instance 'node3:3306' was discovered in the cluster.
Would you like to add it to the cluster metadata? [Y/n]:
Adding instance to the cluster metadata...
The instance 'node3:3306' was successfully added to the cluster metadata.
メタデータにいるけどメンバーにいないパターン
再現方法
- そのへんで
STOP GROUP_REPLICATION
するとあっさりこうなる
影響
- MySQL Routerはメタデータとメンバーの状態をそれぞれSELECTしてルーティング先を決めるっぽいので特に影響はない
復旧
- これも
cluster.rescan()
で何とかなる
MySQL localhost:33060+ ssl JS > cluster.rescan()
Rescanning the cluster...
Result of the rescanning operation for the 'myfabric' cluster:
{
"name": "myfabric",
"newTopologyMode": null,
"newlyDiscoveredInstances": [],
"unavailableInstances": [
{
"host": "node2:3306",
"label": "node2:3306",
"member_id": "f96e7097-62a0-11ea-b1c0-12ae12a2047f"
}
]
}
The instance 'node2:3306' is no longer part of the cluster.
The instance is either offline or left the HA group. You can try to add it to the cluster again with the cluster.rejoinInstance('node2:3306') command or you can remove it from the cluster configuration.
Would you like to remove it from the cluster metadata? [Y/n]: Y
Removing instance from the cluster metadata...
The instance 'node2:3306' was successfully removed from the cluster metadata.
cluster.rescan
べんり!!
0 件のコメント :
コメントを投稿