我正在尝试弄清楚如何在具有 4 台服务器(每个位置 2 台)的场景中设置复制和故障转移,其中任何服务器都可以承担主服务器角色。我的初始场景如下:
- 位置 A 有 2 台服务器 (一台主服务器,一台从服务器);
- 位置 B 有 2 台服务器 (两个从属服务器)。
为此,我正在考虑在所有这些服务器上使用 O'Reilly 的“高性能 MySQL”中建议的 Master-Master Active-Passive 配置,以便每个服务器在需要时都可以成为 Master。
如果主服务器“死亡”,则位置 A 上的其他服务器将尽可能承担主服务器角色。它始终比位置 B 上的服务器具有更高的优先级。只有当位置 A 上的服务器都无法切换为主服务器时,位置 B 上的服务器才会切换为主服务器。
由于 MySQL 无法自动处理这个问题,我需要其他方法来实现它。我已经阅读了有关 heartbeat 和 Maatkit 的文章。这是可行的方法吗?有人在类似情况下使用过它吗?还有其他方法可以实现这一点吗?任何有关故障的指示都将不胜感激。
我希望尽可能保持简单,避免使用诸如 DRDB 之类的东西。我并不关心高可用性,只是希望能够自动切换角色,而不会带来太多麻烦。
我正在使用 SuSe Enterprise 10 和 MySQL 5.1.30-community。
提前致谢,
若昂
答案1
位置 A:两个 HA MySQL 代理(serv1 ip 192.168.0.1,serv2 ip 192.168.0.2)
位置B:两台MySQL数据主主(serv1 ip 192.168.0.3,serv2 ip 192.168.0.4)
serv1
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 200M
binlog_ignore_db = test
binlog_ignore_db = mysql
master-host = 192.168.0.4
master-user = replication
master-password = you_pass
master-port = 3306
mysql -u root -p
Enter password:
>grant replication slave on *.* to 'replication'@'192.168.0.4' identified by 'you_pass';
>flush privileges;
>quit;
/etc/init.d/mysql restart
serv2
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 200M
binlog_ignore_db = test
binlog_ignore_db = mysql
master-host = 192.168.0.3
master-user = replication
master-password = you_pass
master-port = 3306
mysql -u root -p
Enter password:
>grant replication slave on *.* to 'replication'@'192.168.0.3' identified by 'you_pass';
>flush privileges;
>quit;
/etc/init.d/mysql restart
mysql —u root —p
Enter password:
>show slave status \G
loc a serv1 和 serv2 安装 mysql-proxy 和 heartbeat
mysql-proxy --proxy-backend-addresses=192.168.0.3 \
--proxy-backend-addresses=192.168.0.4 \
--proxy-address=:3306
—daemon
授权键
auth 2
2 sha1 your-strong-password
哈夫
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 10
initdead 120
bcast eth0
udpport 694
auto_failback on
node mysql-proxy1
node mysql-proxy2
mysql-proxy1 并且 mysql-proxy1 在该主机上是 uname -n
人力资源
mysql-proxy1 192.168.0.5
192.168.0.5虚拟mysql地址