dbPaaS实战:MySQL高可用管理
zCloud数据库云平台将最佳实践融入到对MySQL高可用的管理,并紧贴市场需要,选择了成熟稳定的数据库中间件(HAProxy、KeepAlive、ProxySQL、ShardingSphere等),满足MySQL集群的自动高可用、负载均衡、读写分离、分库分表等高级特性。
zCloud使用Keepalived检测HAproxy集群中服务器的健康状况,以及实现HAproxy主备之间进行故障转移,用来防止单点故障的发生,Keepalived通过请求一个VIP来达到请求真实IP地址的功能,而VIP能够在一台机器发生故障时候,自动漂移到另外一台机器上,从来达到了高可用HA功能。
-
HAProxy作为MySQL的连接代理,属于业界主流方案,经过大量实践验证,非常成熟; -
HAProxy本身只做网络转发,不涉及任何MySQL兼容性问题,非常稳定; -
HAProxy在中间层,避免了Keepalived直接与MySQL数据库交互,可以防止由于主从脑裂导致的数据不一致。
ProxySQL能够方便地实现SQL的读写分离和负载均衡,并与其他中间件对比体现出功能丰富,易用性、兼容性等优势。
-
100%兼容MySQL和SQL语句; -
高性能,单进程支持1万以上连接;支持连接池;C语言编写性能较之Java中间件高出数倍;支持网络连接多路复用; -
自身高可用,中间件进程故障会自动启动新的进程; -
支持读写分离、查询重写和SQL流量镜像; -
支持负载均衡,也可与HAProxy结合实现负载均衡; -
Query Cache功能,由于MySQL自带功能,多维度控制语句缓存方式; -
自动下线/上线后端DB; -
便捷管理,在线更改配置无需重启;详细状态统计,SQL性能和SQL语句统计等。
go编写的MySQL高可用性和复制拓扑管理工具,支持复制拓扑结构的调整,自动故障转移和手动主从切换等。大致有如下特点:自动发现MySQL的复制拓扑、重构复制关系、检测主异常,并可以自动或手动恢复,通过Hooks进行自定义脚本。
一主多从,最多支持九个从节点。便于维护和扩展。
-
成本低,部署快速方便; -
支持读写分离; -
由于同步延迟造成数据一致性问题。
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器),是关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能基于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供Replication Failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。
-
安全、稳定性较高,可扩展性好; -
对服务器数量要求至少三台及以上; -
对双主(主从)复制性要求较高; -
可实现读写分离。
Galera Cluster for MySQL是一套基于同步复制的多主MySQL集群解决方案。
-
同步复制; -
多主服务器的拓扑结构; -
可以在任意节点上进行读写; -
自动剔除故障节点; -
自动加入新节点; -
真正行级别的并发复制; -
客户端连接跟操作单台MySQL数据库的体验一致。
MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供。MGR基于分布式paxos协议,实现组复制,保证数据一致性。内置故障检测和自动选主功能,只要不是集群中的大多数节点都宕机,就可以继续正常工作。提供单主模式与多主模式,多主模式支持多点写入。
-
避免脑裂:MGR中不会出现脑裂的现象; -
数据一致性保障:MGR的冗余能力很好,能够做到同时宕机的成员不超过半数便不会导致数据丢失,且宕机的服务器重启后,不再需要特殊的处理就可以加入组; -
多节点写入支持:多写模式下支持集群中的所有节点都可以写入。
接下来介绍zCloud是怎样管理MySQL高可用的。
下图是MySQL一主两从且使用了高可用组件的拓扑图。中间件也做了冗余,并通过VIP提供统一访问入口。
zCloud支持手动和自动的高可用切换。当主节点不可用时,集群中的某从节点会自动变为Master角色,提供读和写的服务。
-
数据完全同步后才能切换; -
切换时从节点同步最多等待时间; -
切换前检查从节点延迟超过多久不执行切换。