Keepalived позволяет выполнять балансировку трафика и повышает отказоустойчивость за счет виртуального IP на основе протокола VRRP. Для нашей конфигурации мы не будем использовать балансировку трафика, а только настроем виртуальный IP для двух Mysql серверов, работающих в режиме master-master.
 Имеем следующие исходные данные:
10.1.11.11 — виртуальный ip, на который маршрутизируются mysql соединения
  10.1.11.10 — mysql сервер test1
  10.1.11.9 — mysql сервер test2
Mysql на серверах test1 и test2 находятся в master-master репликации, запись одновременно происходит только на один сервер. В случае падение одного из серверов, виртуальный ip автоматически переключается на второй сервер. При восстановление работоспособности сервера возможна автоматическая обратная миграция виртуального ip или же можно ее отключить с помощью опции (nopreempt).
 Установку и конфигурацию keepalived будем осуществлять в дистрибутиве RHEL6. Самую последнюю версию keepalived можно скачать с официального сайта. Установка может быть выполнена с помощью исходных кодов или же предварительно создав rpm пакет из исходников, как было описано в предыдущей статье.
 Установим keepalived
sudo apt-get install keepalived
Отредактируем конфигурационный файл на первом сервере test1:
[testrpm@test1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
funix@gmail.com ##email для отправки уведомлений
}
notification_email_from keepalived@test1 ##для второго сервера keepalived@test2
smtp_server localhost
smtp_connect_timeout 30
router_id test1-keepalived ##для второго сервера test2-keepalived
}
vrrp_script check_mysql {
script "/usr/local/bin/check_mysql.sh" ##скрипт для проверки mysql
interval 1
fall 3 ##количество неуспешных проверок для переключения VIP на другой сервер
}
vrrp_instance Mysql-VIP {
state BACKUP
interface bond0 ##интерфейс для привязки VIP
virtual_router_id 10
priority 101 ##VRRP приоритет сервера, для второго сервера 100
advert_int 1
unicast_peer {
10.1.11.9 ##для второго сервера 10.1.11.10
}
authentication {
auth_type PASS
auth_pass myvrrp
}
track_script {
check_mysql
}
nopreempt ##не выполнять обратное переключение
smtp_alert ##включить отправку email сообщений
virtual_ipaddress {
10.1.11.11
}
notify_master "/usr/local/bin/check_mysql.sh master"##вызов скрипта при
notify_backup "/usr/local/bin/check_mysql.sh backup"##изменении состояния
notify_fault "/usr/local/bin/check_mysql.sh fault" #на master,backup или fault
}Скрипт можно создать с помощью следующего мануалы, который описывает процесс отправки сообщений с помощью mutt. Для конфигурации keepalived на втором сервере скопируем конфигурационный файл /etc/keepalived/keepalived.conf и внесем изменения, которые были указаны в комментариях.
 Скрипт проверки работоспособности mysql очень простой и состоит из одной строчки, для удобства логирование событий переключения keepalived и проверки доступности mysql обьеденим в один скрипт:
[root@vas-msp-test1 ~]# vim /usr/local/bin/check_mysql.sh
#!/bin/bash #This script is used by keepalived for checking mysqld work #Additional info about keepalived work you can find in /var/log/messages state=$1 host=`hostname` current_date=`/bin/date +"%b %d %H:%M:%S"` password='mypass' logfile='/var/tmp/keepalived.log' case $state in master) echo "$current_date Keepalived: $host now Master server with VIP on it" >> $logfile ;; backup) echo "$current_date Keepalived: $host now Backup server" >> $logfile ;; fault) echo "$current_date Keepalived: $host server fault. Mysql check failed. Trying switchover" >> $logfile ;; *) mysql -u root -p$password --connect_timeout=2 -e "select version();" 2>/dev/null ;; esac
Необходимо скопировать скрипт проверки mysql на второй сервер test2 и сделать его исполняемым:
[root@vas-msp-test1 ~]# chmod +x /usr/local/bin/check_mysql.sh
Запустим keepalived на обоих серверах и проверим, что был поднят виртуальный ip:
[root@test1 ~]# /etc/init.d/keepalived start
[root@test1 ~]# ip addr show bond0 4: bond0:<BROADCAST,MULTICAST,MASTER,UP,LOWER_UP>mtu 1500 qdisc noqueue state UP link/ether 00:21:5a:eb:91:86 brd ff:ff:ff:ff:ff:ff inet 10.1.11.10/24 brd 10.1.14.255 scope global bond0 inet 10.1.11.11/32 scope global bond0 inet6 fe80::221:5aff:feeb:9186/64 scope link valid_lft forever preferred_lft forever
Можно протестировать несколько сценариев работы keepalived:
 — остановка mysql на мастер сервере
 — остановка сетевого подключения на мастер сервере
 — перезагрузка ОС на мастер сервере
 Для проверки корректной работый необходимо проверить:
 — почтовые уведомления
 — логи /var/log/messages и /var/tmp/keepalived.log на обоих серверах
 — состояния виртуального ip на обоих серверах
[root@test1 ~]# ip addr show bond0
— время переключения и доступности mysql (выполняем постоянные подключения к mysql во время переезда VIP):
[root@test1 ~]# while true; do echo `date`; mysql -uroot -pmypass --host=10.1.11.11 --port=3306 -sse "select version();"; sleep 0.5; done