1.keepalived安裝
參考centos7下keepalived1.4.0安裝啟動卸載章節:http://www.lxweimin.com/p/f987f7e449ab
2.mysql主主配置
參考centos7下mysql5.7主主復制章節:http://www.lxweimin.com/p/ed10e4162c68
3.keepalived配置
VIP:192.168.133.142,centos7
IP1:192.168.133.140,centos7
IP2:192.168.133.141,centos7
其中IP1的keepalived配置(本人配置文件在/etc/keepalived/keepalived.conf中)內容如下:
! Configuration File for keepalived
global_defs {
? router_id mysql-1
}
vrrp_instance VI_1 {
? ? state BACKUP
? ? interface eth0
? ? virtual_router_id 51
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.133.142//VIP地址
? ? }
}
virtual_server 192.168.133.142 3306 {
? ? delay_loop 6
? ? lb_algo rr
? ? lb_kind NAT
? ? persistence_timeout 50
? ? protocol TCP
? ? real_server 192.168.133.140 3306 {
? ? ? ? weight 3
? ? ? ? notify_down /etc/keepalived/bin/mysql.sh ?//這個配置在keepalived1.4.0中好像有點問題,后續會說
? ? ? ? TCP_CHECK {
? ? ? ? ? ? ? ? ?connect_timeout 3
? ? ? ? ? ? ? ? ?retry 3
? ? ? ? ? ? ? ? ?delay_before_retry 3
? ? ? ? ? ? ? ? ?connect_port 3306
? ? ? ? }
? ? }
}
IP2的keepalived配置內容如下:
! Configuration File for keepalived
global_defs {
? router_id mysql-2
}
vrrp_instance VI_1 {
? ? state BACKUP
? ? interface eth0
? ? virtual_router_id 51
? ? priority 50
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.133.142//VIP地址
? ? }
}
virtual_server 192.168.133.142 3306 {
? ? delay_loop 6
? ? lb_algo rr
? ? lb_kind NAT
? ? persistence_timeout 50
? ? protocol TCP
? ? real_server 192.168.133.141 3306 {
? ? ? ? weight 3
? ? ? ? notify_down /etc/keepalived/bin/mysql.sh
? ? ? ? TCP_CHECK {
? ? ? ? ? ? ? ? ? ? ? connect_timeout 3
? ? ? ? ? ? ? ? ? ? ? retry 3
? ? ? ? ? ? ? ? ? ? ? delay_before_retry 3
? ? ? ? ? ? ? ? ? ? ? connect_port 3306
? ? ? ? }
? ? }
}
上述配置配好后,重啟keepalived:service keepalived restart
(4)驗證
本人的VIP地址所屬服務器是centos7,每次也需要開啟這個服務器才能夠使用這個IP,好像也有其他方式不需要開啟這個服務器,具體就沒去了解了。
開啟后首先在宿主機win7下使用navicate分別使用VIP、IP1、IP2連接數據庫,如果連接不同請考慮是否是網絡或者防火墻問題。
連接成功后,可以看到VIP默認是在IP1上,這時停止IP1上的mysql服務:service mysqld stop。
網上說停止后keepalived本應該能通過notify_down監測到mysql停止事件,執行對應notify_dowm設置的mysql.sh腳本,停止keepalived運行,只有停止IP1上的keepalived運行,VIP才能自動切換到IP2上。(也有說是當real server宕掉或啟動時才會執行這里的腳本)
但本人這里并沒有執行該腳本,可能因為keepalived的版本原因,本人是直接通過命令:service keepalived stop方式停止的,停止后,在win7的navicate上重新用VIP地址連接,連接成功說明已經切換到IP2上了。
附注:
mysql.sh內容
#!/bin/bash
pkill keepalived
/sbin/ifdown eth0 && /sbin/ifup eth0
即殺死keepalived線程,然后重新啟動網絡。但是本人使用時,當mysql服務停止,并未執行該腳本。這個最新版本的keepalived里面有些屬性有點變動,比如TCP_CHECK 里的retry關鍵字,在低版本是nb_get_retry。由于未找到新版本的配置屬性說明,這里就沒有太多深入去了解。