環境:
OS:CentOS 7_X64
數據庫:mysql-5.7
MASTER:192.168.119.23
BACKUP:192.168.119.24
VIP:192.168.119.138
keepalived+mysql搭建過程的詳細配置就不描述了,網上很多寫得很詳細的配置文檔自己可以去參考,我們直奔主題 。
這里主要分享在下本人在搭建公司的keepavlied+mysql出現一個很奇怪的現象,當A服務器為master主時邦定VIP 192.168.119.138,在A本機上可以正常ping 192.168.119.138 和 telnet 192.168.119.138 3306端口,此時在B服務器上ping 192.168.119.138也正常,但telnet 192.168.119.138 3306 時出現找不到路由的錯誤提示,同時檢查B服務器此時是沒有VIP 屬於正常的現象,可是telnet VIP+其他端口正常的。
經常反復的測試發現,當A、B服務器同時運行keepalived時,作為backup角色的服務器無法telnet 192.168.119.138 3306,將backup角色服務器上的keepalived關閉后,卻可以正常ping telnet。
問題還是在於配置文件,將keepalived.conf配置文件的LVS用不到調試算法lb_algo和轉發方式lb_kind去掉,正是這兩項導致backup服務器無法訪問mysql。正常的配置文件如下:
[root@DB01 ~]# vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
1234@sina.com
}
notification_email_from 1234@test.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA #標識,雙主相同
}
vrrp_instance VI_1 {
state BACKUP #兩台都設置BACKUP
interface eth0
virtual_router_id 51 #主備相同
priority 100 #優先級,backup設置50
advert_int 1
nopreempt #不主動搶占資源,只在master這台優先級高的設置,backup不需設置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.119.138
}
}
virtual_server 192.168.0.204 3306 {
delay_loop 2
#lb_algo rr #LVS算法,用不到,我們就關閉了
#lb_kind DR #就是這項導致上述的現象,LVS模式,如果不關閉,備用服務器不能通過VIP連接主MySQL
persistence_timeout 50 #同一IP的連接60秒內被分配到同一台真實服務器
protocol TCP
real_server 192.168.119.23 3306 { #檢測本地mysql,backup也要寫檢測本地mysql
weight 3
notify_down /usr/local/keepalived/mysql.sh #當mysq服down時,執行此腳本,殺死keepalived實現切換,也可以加入其他命令或腳本。
TCP_CHECK {
connect_timeout 3 #連接超時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔時間
}
}
雖然問題是解決的了,但沒搞明白為什么會這樣?我使用相同版本的mysql和keepalived在RHEL 6.0 X64環境下測試並沒有出現這問題。求高手出現解答。