我们没有用于 API、库。因此,几乎所有决策最终都以高可用性而不是可扩展性为首要任务。
不过,由于数据库大小不超过 500 GB,因此扩展对于我们的情况来说已经足够了。主要要求之一是能够访问主节点,因为我们有相当远的读写工作负载。
我们当前的设置是存储来自客户端、服务器等的所有数据。使用由三个节点组成的PXC,没有任何地理复制。所有节点都在同一个数据中心运行。
我们计划将此集群迁移到三个地点的地
理复制集群:美国、荷兰和新加坡。如果其中一个位置无法访问,这将使我们能够确保高可用性。
由于PXC使用完全同步复制,因此写入会有更高的延迟。但由于每个位置都有本地复制,读取速度会快得多。
我们对MySQL集群复制做了一些研究,但它要求实例距离更近,并且对延迟更敏感。
组复制旨在部署在服务器实例彼此非常接近且受网络延迟和网络带宽影响的集群环境中。
我们之前使用过 PXC,因此我们知
道如何在关键情况下处理它并使其更可用。
在000webhost.com项目和 hAPI (Hostinger API)中,我们使 老挝电报数据 用前面提到的独特解决方案,该解决方案使用 Layer3 协议选择主节点。
我们最好的朋友之一是 BGP 和 BGP 协议,它已经足够老了 计费和客户 ,可以自己买啤酒了,所以我们经常使用它。此实现还使用 BGP 作为底层协议,并帮助指向实际的主节点。为了运行 BGP 协议,我们使用 ExaBGP 服务并将 VIP 地址作为来自两个主节点的任播进行通告。
您可能想知道:但是他们如何确定 MySQL 查询将发送到同一个实例而不是同时发送到两个实例?我们使用Zookeeper的临时节点来获取互斥的锁。
Zookeeper 充当 BGP 发言者和 MySQL 客户端之间的断路器。如果应用阻止,我们会从主节点通告 VIP,并且应用程序会向此路由发送查询。如果锁被释放,另一个节点可以控制并通告 VIP,因此应用程序将毫不费力地发送查询。
MySQL配置
此外,无论是否指定 After=,如果其他驱动器之一显式停止,则该驱动器将停止。
使用systemd,我们可以创建一个很好的依赖关系 计费和客户 树,以确 你从中得到什么? 保满足所有这些依赖关系。停止、终止甚至重新启动 MySQL 将导致 systemd 停止 ExaBGP 进程并删除 VIP 广告。最终的结果就是新选出的大师。
我们在排练期间在战斗中测试了 河南移动电话号码列表 所有这些,但尚未发现任何关键问题。