Назад | Перейти на главную страницу

Стратегия отработки отказа для сценария с 4 серверами

Я пытаюсь понять, как настроить репликацию и аварийное переключение в сценарии с 4 серверами (по 2 на каждое местоположение), где любой сервер может взять на себя роль мастера. Мой первоначальный сценарий следующий:

Для этого я думаю об использовании конфигурации Master-Master Active-Passive, предложенной в O'Reilly "High Performance MySQL", на всех из них, чтобы каждый мог стать Мастером, когда это необходимо.

Если Мастер "умирает", другой сервер из местоположения A принимает на себя роль Мастера, когда это возможно. Он всегда будет иметь больший приоритет, чем серверы в местоположении B. Сервер в местоположении B переключится на Master только в том случае, если ни один сервер в местоположении A не сможет это сделать.

Поскольку MySQL не может справиться с этим автоматически, мне нужен другой способ реализовать это. Я уже читал про сердцебиение и Мааткит. Это путь? Кто-нибудь использовал это в подобном сценарии? Есть ли другой способ добиться этого? Любые указатели на сбой будут оценены.

Я хочу, чтобы это было как можно проще, избегая таких вещей, как DRDB. Меня не беспокоит высокая доступность - это просто способ автоматического переключения ролей без лишних хлопот.

Я использую SuSe Enterprise 10 и MySQL 5.1.30-community.

Заранее спасибо,

Жуан

расположение 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

ha.cf

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