Percona XtraDB Cluster 节点恢复

Percona XtraDB Cluster 节点恢复

我一直在审查 XtraDB 集群,并使用 4 个实例在 Openstack 上生成了一个 PoC 环境,但该环境在我的弹性测试期间失败了。

根据 pxc 文档:http://www.percona.com/doc/percona-xtradb-cluster/howtos/virt_sandbox.html它涵盖了 3 个节点的安装,我选择了第 4 个。

  1. 初始设置已通过完整的数据加载测试,所有节点均使用 1.6GB 测试 sql 文件加载数据库进行同步更新。
  2. 节点故障和恢复开始,此测试需要停止节点上的 mysql 服务,创建并随后删除数据库以测试幸存的节点复制,并启动故障节点进行重新同步。
    1. 这对于节点 4,3,2 来说运行良好。
    2. 根据 pxc 文档,Node1 本质上是一个控制器,不会重新加入集群。

我的问题如下:

  1. 如果幸存节点已经写入数据,如何将控制节点恢复服务
  2. 使用 4 个节点作为参考,有没有办法消除节点 1 中的这个单点故障?(如果幸存节点在控制器(节点 1)关闭/不同步的情况下重新启动,则该节点也将发生故障)。

答案1

根据您在节点一上的症状,您正在使用

wsrep_cluster_address=gcomm:// 

在您的配置文件中,这意味着该节点将启动一个新集群。您可以通过将节点 1 上的 wsrep_cluster_size 变量设置为 1 来确认这一点,而将其他节点上的 wsrep_cluster_size 变量设置为 3。如果您想将节点 1 加入到您现有的集群,您应该指定

wsrep_cluster_address=gcomm://(此处为正在运行的节点的 ip)

这种情况下,node1会重新加入集群。

一些额外的想法:

  • 由于 PXC (Percona Xtradb Cluster) 中的仲裁机制,不建议在 4 个节点上运行它。建议使用奇数个节点,这样在发生网络分裂的情况下,分裂集群的一部分将能够拥有多数。

  • 您可以在 [mysqld_safe] 部分中使用 wsrep_urls,而不是 wsrep_cluster_address。

免责声明:我在 Percona 工作。

答案2

对这个问题的进一步研究似乎是一种可行的方法(暂时不接受这个答案,以防有人回复更好的设置):

  1. 循环设置
    1. 根据 pxc 文档,所有节点都从节点 1 同步
    2. 停止节点2重新指向节点3,启动节点2
    3. 停止节点3重新指向节点4,启动节点3
    4. 停止节点1重新指向节点2,启动节点1

这种设置似乎至少可以容忍任何节点因断开连接而丢失,并且在恢复节点同步时不会出现问题。

答案3

如果 Mysql 无法启动,原因是 DB 表损坏。

复制服务器正在执行的操作,并从已停止的服务器中为客户端数据库获取一份好的副本。

它通过 nc 将 $MYSQLHOME 中的 db 文件打包成 tar 文件。

我们使用 scp 将好的文件移动到位,然后通过启动坏服务器的 mysql 再次启动同步。

相关内容