使用Percona XtraDB群集管理复制


最近,一位客户要求我在两个不同的Percona XtraDB集群之间设置复制,这些集群位于地理上分离的数据中心。客户的目标是只在灾难恢复时使用其中一个集群。他们尝试扩展集群,但由于WAN延迟对其写入的影响,以及第三个数据中心中节点的需求

够容易的对!当然,这两个集群都是基于云的,提供商可以在短时间内停止/重启任何节点。此设置引起了客户对如何处理复制的一些关注。由于他们没有专门的人员来监视复制,或者至少处理警报,他们询问我们是否可以找到一种方法来自动化这个过程。所以,我们开始吧!

我们都试图用我们知道的工具来解决问题。对我来说,我很喜欢起搏器。所以使用起搏器是我的第一个想法。在云环境中,起搏器的设置并不容易(那不是集群中的集群吗……有点重)。但是等等!带有Galera复制的Percona XtraDB集群已经在处理仲裁,它提供了在节点之间交换信息的方法。为什么不用那个?

我们可以用与clustercheck脚本相同的方式检测仲裁状态。要交换消息,我们为什么不简单地写到一个表。Galera复制将更新其他节点。我接着写了一个bash脚本,cron每分钟都会调用它。脚本监视节点状态和表的内容。如果一切正常,它将更新表以报告它的存在(以及它是否充当从机)。脚本验证集群中是否存在从机。如果找不到报告从机,脚本将根据WSREP_LOCAL_INDEX价值。基本上,脚本就是一大堆“如果”语句。脚本是here,以及有关如何设置它的基本文档here

当然,如果它适用于一个集群,它也可以适用于两个集群。我已经使用此脚本在主到主关系中配置了客户的两个Percona XtraDB集群。我看了一堆失败的案例。剧本幸存下来了!但当然,这是新的。如果您要实现这个解决方案,请运行您自己的测试集!如果您发现任何问题,请在GitHub上提交一个问题。我很乐意修好它!