设想
对于我的应用程序,我希望拥有高可用性的 MySQL/MariaDB 设置。我发现Galera Cluster
在这种情况下很有趣,因为它具有自动数据冗余和即时可用性。我的目标是:
向应用程序隐藏集群的复杂性(集群可以变得更大,并通过添加一些异步节点来改变拓扑)
透明地处理应用程序外部的故障转移
为两个同步实例上的某些常见写入和读取提供负载平衡,
仍允许应用程序访问某个节点(例如异步节点),该节点针对分析的顺序读取进行了优化。如果此节点发生故障,我希望应用程序能够透明地故障转移到标准 Galera 实例,以保持一切正常运行。
迄今已完成
我读过很多关于如何使用MySQL
和 串联设置高可用性和负载平衡集群的HAProxy
文章Keepalived
,但没有一篇解释为什么在 MySQL/MariaDB/Galera 场景中使用这个组合。一些例子:
HAProxy+Keeplived,任意 MySQL CE 集群+Galera:https://severalnines.com/resources/tutorials/mysql-load-balancing-haproxy-tutorial
HAProxy+Keepalived,Galera集群:http://www.fromdual.com/making-haproxy-high-available-for-mysql-galera-cluster
HAProxy+Keepalived,异步集群:https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-mysql-load-balancing--3
当涉及到虚拟 IP 分配时,它由Keepalived
基于其自己的可编写脚本的健康检查器来处理VRRP
。
还支持负载平衡Keepalived
,有多种算法可以实现将连接负载平衡到目的地:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Load_Balancer_Administration/ch-initial-setup-VSA.html
HAProxy 为 HTTP 提供了一些高级功能,但这不是我的情况。
问题
对于上面提到的场景,使用HAProxy
withKeepalived
比仅使用 MySQL有什么优势?Keepalived