3. 雙機故障切換
Keepalived的作用是檢測服務器的狀態,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中。
(1)在兩臺主機上分別裝上Keepalived。
由於在安裝過程中遇到很多坑,故將步驟描述一下
1. 下載keepalived-1.2.21.tar.gz。不同版本目錄結構有一定區別,以下步驟不一定適用於其他版本。
2. 在/usr/local/目錄下,tar zxvf keepalived-1.2.21.tar.gz
3. cd keepalived-1.2.21
4. ./configure => make => make install
5. ln -s /usr/local/keepalived-1.2.21/bin/keepalived /usr/bin/keepalived //將keepalived命令軟連接到/usr/bin下
6. cp /usr/local/keepalived-1.2.21/keepalived/etc/init.d/keepalived.init /etc/init.d/keepalived //這三步添加啓動腳本且方便用service管理
7. chmod 755 /etc/init.d/keepalived //添加執行權限
8. chkconfig keepalived on //開機啓動
9. 修改/etc/init.d/keepalived中的配置文件路徑,將. /etc/sysconfig/keepalived改爲. /usr/local/keepalived-1.2.21/keepalived/etc/init.d/keepalived.sysconfig
10. mkdir /etc/keepalived
11. ln -s /usr/local/keepalived-1.2.21/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
12. service keepalived restart
(2)主服務器keepalived配置
/etc/keepalived/keepalived.conf編輯如下:
! Configuration File for keepalived
global_defs {
notification_email {
***@163.com
}
notification_email_from ***@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
#router_id MYSQL_HA
#vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
vrrp_script check_mysql {
script "/usr/local/keepalived-1.2.21/check_mysql.sh" #定義監控mysql進程的腳本
interval 2 ##監控時間間隔
weight 2 #負載參數
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736 #通過ifconfig查看網卡名稱
virtual_router_id 51 #虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換
priority 100 #服務啓動優先級,值越大,優先級越高,BACKUP 不能大於MASTER
advert_int 1 #服務器之間的存活檢查時間
nopreempt #不主動搶佔資源,只在master這臺優先級高的設置,backup不設置
authentication {
auth_type PASS #認證類型
auth_pass 1111 #認證密碼,一組lvs 服務器的認證密碼必須一致
}
track_script {
check_mysql
}
virtual_ipaddress {
172.16.188.135
}
}
/usr/local/keepalived-1.2.21/check_mysql.sh如下,通過能否連接mysql來監控服務器是否可用
#! /bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=123
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" > /dev/null 2>&1
if [ $? == 0 ]
then
echo "$MYSQL_HOST mysql login successfully"
exit 0
else
/etc/init.d/keepalived stop
exit 2
fi
(3)另一臺服務器keepalived配置
與第(2)步中基本一致,除了
- state 設爲 BACKUP
- priority設爲90
- nopreempt不設置
注意:interface eno16777736 #通過ifconfig查到網卡名稱爲eno16777736
(4)兩臺主機防火牆配置
由於Centos7中用firewalld替代了iptables, 考慮到以下的配置,選擇關閉firewall並安裝iptables。
1、關閉firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
2、安裝iptables防火牆
yum install iptables-services #安裝
在/etc/sysconfig/iptables防火牆配置文件中添加以下3行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -d 172.16.188.135/32 -j ACCEPT#172.16.188.135爲虛擬主機地址
-A INPUT -d 224.0.0.18 -j ACCEPT#添加VRRP通訊支持
systemctl restart iptables.service #最後重啓防火牆使配置生效
systemctl enable iptables.service #設置防火牆開機啓動
重要提示:不能刪除firewall,否則會刪除很多關聯的系統組件
以上步驟,即實現了故障自動切換。可通過以下方式驗證。
- 通過ip addr命令查看VIP位於哪臺服務器上
- 通過mysql -h 172.16.188.135 -u user -p看能否連接成功
注:當故障恢復的時候,要關閉重啓keepalived,否則VIP無法自動切換回來
4. 參考文章
- 學一點 mysql 雙機異地熱備份—-快速理解mysql主從,主主備份原理及實踐 http://www.cnblogs.com/shuidao/p/3551238.html
- mysql主從複製配置操作以及主主配置宕機切換演練 http://blog.csdn.net/kjsayn/article/details/51350691