在上一篇日志中,介紹了數(shù)據(jù)庫(kù)主從環(huán)境的配置,本篇將介紹keepalived配置。
1、服務(wù)器角色及ip:
| 服務(wù)器角色 | IP | VIP |
|---|---|---|
| master A | 192.168.112.133 | 192.168.112.88 |
| master B | 192.168.112.135 | 192.168.112.88 |
| user | 192.168.112.134 | - |
2、 keepalived.conf 配置文件
- master A:192.168.112.133(數(shù)據(jù)庫(kù)節(jié)點(diǎn))
# 對(duì)于keepalived配置參數(shù),我不是很懂,很多都是照著別人的教程修改過(guò)來(lái)的
# 查閱過(guò)網(wǎng)上的很多參數(shù)詳解,不盡人意
# 所以在此我就不對(duì)參數(shù)內(nèi)容和含義進(jìn)行詳細(xì)解釋了,僅僅對(duì)我有把握的幾處地方做說(shuō)明
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
# router_id 可以理解為分組,所以在配置keepalived的時(shí)候,相同vip的服務(wù)器,應(yīng)該配置相同的router_id
router_id HA_MySQL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance HA_1 {
state BACKUP
# interface 之后的參數(shù)是網(wǎng)卡名字
interface ens33
virtual_router_id 51
# 權(quán)重,權(quán)重高的在初始階段會(huì)被當(dāng)做keepalived的master,占有vip
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 這個(gè)就是自己想要的vip,在規(guī)則范圍內(nèi),隨便寫(xiě)
192.168.112.88
}
}
virtual_server 192.168.112.88 3306 {
delay_loop 2
# lb_algo/lb_kind 這兩項(xiàng)注釋掉了,在不注釋掉的情況下,通過(guò)vip訪問(wèn)數(shù)據(jù)庫(kù),會(huì)發(fā)現(xiàn)3306端口號(hào)狀態(tài)為filtered,將會(huì)導(dǎo)致vip切換之后數(shù)據(jù)庫(kù)失聯(lián)
# lb_algo rr
# lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 60
protocol TCP
real_server 192.168.112.133 3306{
weight 3
# 自檢程序,當(dāng)本服務(wù)器mysql進(jìn)程宕掉之后執(zhí)行的腳本(keepalived自殺腳本)
notify_down /usr/local/keepalived_down.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
# 通過(guò)監(jiān)測(cè)第三臺(tái)服務(wù)器,判斷本服務(wù)器網(wǎng)絡(luò)是否暢通
# 簡(jiǎn)單的防腦裂,實(shí)際上這樣做很不科學(xué),有待完善
# 截至本篇日志,我還沒(méi)想出別的辦法,以后補(bǔ)充
real_server 192.168.112.134 22{
weight 3
notify_down /usr/local/keepalived_down.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 22
}
}
}
- master B:192.168.112.135(數(shù)據(jù)庫(kù)節(jié)點(diǎn))
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id HA_MySQL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance HA_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.112.88
}
}
virtual_server 192.168.112.88 3306 {
delay_loop 2
# lb_algo rr
# lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 60
protocol TCP
real_server 192.168.112.135 3306{
weight 3
notify_down /usr/local/keepalived_down.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 192.168.112.134 22{
weight 3
notify_down /usr/local/keepalived_down.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 22
}
}
}
- keepalived_down.sh 自殺腳本
#!/bin/bash
service keepalived stop
別忘記提升文件權(quán)限:
chmod +777 keepalived_down.sh
說(shuō)明:關(guān)于keepalived配置,相比于數(shù)據(jù)庫(kù)主從要簡(jiǎn)單得多。唯一需要注意的地方是,因?yàn)樵趉eepalived中加入了自檢腳本,所以對(duì)服務(wù)器的啟動(dòng)順序有一定要求。
需要先啟動(dòng)第三方中立的服務(wù)器,也就是配置中的192.168.112.134。否則將導(dǎo)致服務(wù)器啟動(dòng)了,keepalived進(jìn)程卻沒(méi)有啟動(dòng)。
之后,假如出現(xiàn)了數(shù)據(jù)庫(kù)服務(wù)出現(xiàn)故障,修復(fù)之后,也需要先啟動(dòng)數(shù)據(jù)庫(kù)服務(wù),再啟動(dòng)keepalived進(jìn)程。因?yàn)樵跊](méi)有mysql進(jìn)程的情況下,啟動(dòng)了keepalived也會(huì)立即自殺掉。
本篇文章中關(guān)于keepalived配置有諸多不足之處,今后逐步完善,逐步修改日志。
推薦一篇關(guān)于keepalived配置寫(xiě)的比較詳細(xì)而且好理解的博客給大家:
keepalived工作原理和配置說(shuō)明
至此,MySQL互為主從、keepalived實(shí)現(xiàn)vip漂移已經(jīng)總結(jié)完。
MySQL互為主從及Keepalived配置系列文章鏈接:
MySQL互為主從及Keepalived配置vip——環(huán)境篇
MySQL互為主從及Keepalived配置vip——主從配置篇
MySQL互為主從及Keepalived配置vip——keepalived配置篇