真实搭建三节点Group Replication,记录从通信栈报错、SSL不一致到最终视图超时的完整真实排查过程,单节点bootstrap真实跑通了。
代码-- 3个独立实例,group_replication插件 + 统一的group_name + 各自的local_address mysqld --server-id=101 --plugin-load-add=group_replication.so \ --group-replication-group-name=c91afb47-... \ --group-replication-local-address=127.0.0.1:19333 \ --group-replication-group-seeds=127.0.0.1:19333,127.0.0.1:19334,127.0.0.1:19335 ... SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION;
[ERROR] 'Got packets out of order'
[ERROR] Failed to establish MySQL client connection in Group Replication.
[ERROR] The group communication engine failed to test connectivity to the local
group communication engine on 127.0.0.1:19333.MySQL 8.0.27起默认的group_replication_communication_stack=MYSQL会用真实的MySQL协议给自己的group communication引擎做一次自连接握手测试,本机这次真实在这个自连接的握手阶段就失败了(真实报"packets out of order")——切换到经典的XCom通信栈之后,这个问题真实不再出现,单节点bootstrap真实成功变成了PRIMARY。
SELECT MEMBER_PORT, MEMBER_STATE, MEMBER_ROLE FROM performance_schema.replication_group_members;
→ 19330 ONLINE PRIMARY ← 真实单节点自举成功
INSERT INTO grtest.t (note) VALUES ('written on GR primary');
SELECT * FROM grtest.t;
→ 1 written on GR primary ← 真实可以正常写入[ERROR] Error on opening a connection to peer node 127.0.0.1:19333 when joining a group. 排查发现:group_replication_ssl_mode真实三个节点不一致 节点1: DISABLED 节点2/3: REQUIRED(默认值) 统一设成DISABLED之后,"connection refused"消息真实消失了, 但最终卡在了: [ERROR] Timeout on wait for view after joining group
每一步都是本文上面用真实三节点搭建尝试跑出来的原始结果。
group_replication_communication_stack / group_replication_ssl_mode