我目前正在使用主从复制,在应用程序级别将读取与写入分开。目前实施的唯一一种故障转移是应用程序级别检测主服务器故障,使从服务器成为新的主服务器,以便应用程序可以不间断运行。可以猜到,切换回来、同步、整理等等需要做很多工作。
我搜索了很多,也读了几十篇文章,但是我没有找到针对 HA MySQL 的解决方案,如果你主要有 MyISAM 表、Mysql 集群、Heartbeat/DRBD、Schooner,这些对于仅 InnoDB 设置来说都很好,但不适合 MyISAM。
我很感激您对 HA 设置的一些建议或实际经验。它不需要是开源的(免费阅读),只要能工作就行。
答案1
我们使用MMM与循环复制相结合。
我们有两台 MySQL 服务器(foo-db1、foo-db2),每个服务器都从属于另一个服务器,因此任何一个服务器的更新都会发送到另一个服务器:
http://onlamp.com/onlamp/2006/04/20/advanced-mysql-replication.html
现在每个实例都有数据了,我们发现最好只向一个实例写入数据。为了实现这一点,我们在不同的服务主机名 (foo-db) 下创建一个虚拟 IP (vIP),客户端将 INSERT 和 UPDATE 发送到该主机名。在 Debian 下,您需要安装“mysql-mmm-agent”包,并通常遵循以下指南:
我们在大多数网站上都使用这种配置:两个前端 Web 服务器与两个后端数据库服务器通信。MMM 监视器在其中一台 Web 服务器上运行(由 Heartbeat 确定):
www.howtoforge.com/high-availability-load-balancer-haproxy-heartbeat-debian-etch
所以总结一下:使用循环复制来确保两个(或更多?)MySQL 服务器同步;使用 MMM 来控制数据库服务 vIP 所在的位置;使用 Heartbeat 来确保 MMM 代理一次只在一台机器上运行。