Keepalived-mysql高可用架構(主主熱備)
master:192.168.8.131
backup:192.168.8.132
VIP:192.168.8.100
安裝Keepalived工具
分别在master和backup伺服器上安裝Keepalived工具:
[[email protected] ~]# yum install -y keepalived
開始配置
配置master伺服器:
配置Keepalived:
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
! Configuration File forkeepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA #辨別,雙主相同
}
vrrp_instance VI_1 {
state BACKUP #兩台都設定BACKUP
interface ens33
virtual_router_id 51 #主備相同
priority 100 #優先級,backup設定90
advert_int 1
nopreempt #不主動搶占資源,隻在master這台優先級高的設定,backup不設定
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.8.100
}
}
virtual_server 192.168.8.100 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.8.131 3306 { #檢測本地mysql,backup也要寫檢測本地mysql
weight 3
notify_down /usr/local/sbin/keepalived/mysql.sh #當mysq服down時,執行此腳本,殺死keepalived實作切換
TCP_CHECK {
connect_timeout 3 #連接配接逾時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔時間
}
}
建立mysql.sh腳本:
[[email protected] ~]# mkdir /usr/local/sbin/keepalived
[[email protected] ~]# vim /usr/local/sbin/keepalived/mysql.sh
#!/bin/bash
pkill keepalived
更改檔案權限:
[[email protected] ~]# chmod 755 /usr/local/sbin/keepalived/mysql.sh
啟動Keepalived:
[[email protected] ~]# systemctl start keepalived
配置backup伺服器:
配置Keepalived:
! Configuration File forkeepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA #辨別,雙主相同
}
vrrp_instance VI_1 {
state BACKUP #兩台都設定BACKUP
interface ens33
virtual_router_id 51 #主備相同
priority 90 #優先級,backup設定90
advert_int 1
# nopreempt #不主動搶占資源,隻在master這台優先級高的設定,backup不設定
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.8.100
}
}
virtual_server 192.168.8.100 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.8.132 3306 { #檢測本地mysql,backup也要寫檢測本地mysql
weight 3
notify_down /usr/local/sbin/keepalived/mysql.sh #當mysq服down時,執行此腳本,殺死keepalived實
現切換
TCP_CHECK {
connect_timeout 3 #連接配接逾時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔時間
}
}
建立mysql.sh檔案:
[[email protected] ~]# mkdir /usr/local/sbin/keepalived
[[email protected] ~]# vim /usr/local/sbin/keepalived/mysql.sh
#!/bin/bash
pkill keepalived
更改權限:
[[email protected] ~]# chmod 755 /usr/local/sbin/keepalived/mysql.sh
啟動Keepalived:
[[email protected] ~]# systemctl start keepalived
說明: backup伺服器與master伺服器Keepalived配置檔案的差別:隻修改priority為90、nopreempt不設定、real_server設定本地IP。
測試
如果伺服器當機,Keepalived服務肯定回停止工作,是以在此通過開/關Keepalived來模拟當機狀态:
當機前:
檢視master伺服器IP狀态:
[[email protected] ~]# ip add
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:8a:1b:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.8.131/24 brd 192.168.8.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.8.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::65d2:adc:20d3:8c74/64 scope link
valid_lft forever preferred_lft forever
檢視backup伺服器IP狀态:
[[email protected] ~]# ip add
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:af:b7:9f brd ff:ff:ff:ff:ff:ff
inet 192.168.8.132/24 brd 192.168.8.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::76c1:b882:4f26:608c/64 scope link
valid_lft forever preferred_lft forever
說明: 此時VIP在master伺服器上,說明有master對外提供服務。
master伺服器當機後:
[[email protected] ~]# systemctl stop keepalived
檢視master伺服器IP:
[[email protected] ~]# ip add
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:8a:1b:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.8.131/24 brd 192.168.8.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::65d2:adc:20d3:8c74/64 scope link
valid_lft forever preferred_lft forever
檢視backup伺服器IP:
[[email protected] ~]# ip add
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:af:b7:9f brd ff:ff:ff:ff:ff:ff
inet 192.168.8.132/24 brd 192.168.8.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.8.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::76c1:b882:4f26:608c/64 scope link
valid_lft forever preferred_lft forever
即,此時有backup伺服器接管master伺服器對外提供服務。
恢複master伺服器Keepalived服務:
[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# ip add
2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:8a:1b:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.8.131/24 brd 192.168.8.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::65d2:adc:20d3:8c74/64 scope link
valid_lft forever preferred_lft forever
此時VIP并沒有回到master伺服器上,原因是master在進行Keepalived的時候加入了參數nopreemt。
以上伺服器切換過程也可以通過檢視日志/var/logs/messages來了解。