在上一篇日志中,介紹了數(shù)據(jù)庫主從環(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ù)庫節(jié)點)
# 對于keepalived配置參數(shù),我不是很懂,很多都是照著別人的教程修改過來的
# 查閱過網(wǎng)上的很多參數(shù)詳解,不盡人意
# 所以在此我就不對參數(shù)內(nèi)容和含義進行詳細解釋了,僅僅對我有把握的幾處地方做說明
! 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的時候,相同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)重高的在初始階段會被當(dāng)做keepalived的master,占有vip
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 這個就是自己想要的vip,在規(guī)則范圍內(nèi),隨便寫
192.168.112.88
}
}
virtual_server 192.168.112.88 3306 {
delay_loop 2
# lb_algo/lb_kind 這兩項注釋掉了,在不注釋掉的情況下,通過vip訪問數(shù)據(jù)庫,會發(fā)現(xiàn)3306端口號狀態(tài)為filtered,將會導(dǎo)致vip切換之后數(shù)據(jù)庫失聯(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進程宕掉之后執(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
}
}
# 通過監(jiān)測第三臺服務(wù)器,判斷本服務(wù)器網(wǎng)絡(luò)是否暢通
# 簡單的防腦裂,實際上這樣做很不科學(xué),有待完善
# 截至本篇日志,我還沒想出別的辦法,以后補充
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ù)庫節(jié)點)
! 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
說明:關(guān)于keepalived配置,相比于數(shù)據(jù)庫主從要簡單得多。唯一需要注意的地方是,因為在keepalived中加入了自檢腳本,所以對服務(wù)器的啟動順序有一定要求。
需要先啟動第三方中立的服務(wù)器,也就是配置中的192.168.112.134。否則將導(dǎo)致服務(wù)器啟動了,keepalived進程卻沒有啟動。
之后,假如出現(xiàn)了數(shù)據(jù)庫服務(wù)出現(xiàn)故障,修復(fù)之后,也需要先啟動數(shù)據(jù)庫服務(wù),再啟動keepalived進程。因為在沒有mysql進程的情況下,啟動了keepalived也會立即自殺掉。
本篇文章中關(guān)于keepalived配置有諸多不足之處,今后逐步完善,逐步修改日志。
推薦一篇關(guān)于keepalived配置寫的比較詳細而且好理解的博客給大家:
keepalived工作原理和配置說明
至此,MySQL互為主從、keepalived實現(xiàn)vip漂移已經(jīng)總結(jié)完。
MySQL互為主從及Keepalived配置系列文章鏈接:
MySQL互為主從及Keepalived配置vip——環(huán)境篇
MySQL互為主從及Keepalived配置vip——主從配置篇
MySQL互為主從及Keepalived配置vip——keepalived配置篇