目錄
1、工作原理
2、環境準備
3、分別在主服務器和備用服務器上安裝keepalived和ipvsadm
4、修改keepalived服務的配置文件
4.1 修改主服務器上的keepalive服務的配置文件
4.2 修改備用服務器上的keepalive服務配置文件
5、編寫mysql監控腳本放到主服務器上
6、在主服務器和備用服務器上查看虛擬IP是否綁定到ens33網卡上。
7、高可用驗證
7.1 模擬宕機,查看虛擬IP是否漂移到備用服務器上,驗證高可用效果
1、工作原理
ipvsadm工具工作原理:
ipvsadm是一個用于管理IPVS(IP Virtual Server)的命令行工具。IPVS是linux內核中的一種負載均衡技術,它允許將網絡流量分發到多個后端服務器,以提高系統的可用性、性能和擴展性。而Keepalived是在ipvs基礎上實現高可用性。
ipvsadm提供了對IPVS的配置和管理功能,可以使用它來添加、刪除和修改虛擬模擬服務器(VS),以及與之關聯的后端服務器(Real Server)
keepalived服務工作原理可參考之前寫的博文:
nginx配置實例-高可用主備模式_nginx主備模式-CSDN博客
keepalived是一個基于VRRP的協議工具,它與ipvsadm結合使用,提供高可用性和故障轉移的功能。keepalived監控主服務器狀態,一旦檢測到主服務器不可用,它會自動將虛擬IP切換到備用服務器上,確保服務的持續可用性。keepalived使用ipvsadm來配置和管理ipvs ,來實現負載均衡和故障轉移。
通過將ipvsadm和keepalived結合使用,可以實現以下目標:
負載均衡 | 使用ipvsadm配置ipvs,將流量分發到多個后端服務器,提高系統的可用性和擴展性。 |
高可用性 | 使用keepalived監控主服務器,并在主服務器故障時自動切換到虛擬IP的備份服務器,確保服務的持續可用性。 |
故障轉移 | 在主服務器故障后,keepalived使用ipvsadm更新ipvs配置,將流量重定向到備用服務器 ,實現故障轉移。 |
一般情況下,當keealived服務和ipvsadmy工具一起使用時,keepalived會自動配置和管理ipvsadm,無需手動進行ipvsadm的配置。keepalived會根據配置文件中定義的IPVS配置(虛擬IP和后端服務器信息),自動使用ipvsadm對ipvs配置和管理,包括添加、刪除和修改虛擬服務器和后端服務器。
2、環境準備
主機名 | IP地址 | 說明 |
主服務器mysql_master | 192.168.81.131/24 | 已安裝且部署好mysql主從熱備 |
備用服務器mysql_slave | 192.168.81.132/24 | 已安裝且部署好mysql主從熱備 |
mysql主從熱備部署參考上一篇博文:
mysql主從熱備部署-CSDN博客
3、分別在主服務器和備用服務器上安裝keepalived和ipvsadm
使用yum方式安裝
yum install keepalived ipvsadm -y
安裝好后,將keepalivd程序開啟,并且加入到開機啟動項中。
systemctl start keepalived
systemctl enable keeaplived
4、修改keepalived服務的配置文件
yum方式安裝的配置文件在/etc/keepalived目錄下。
4.1 修改主服務器上的keepalive服務的配置文件
修改配置文件前,先做好備份!!!
使用sed命令將配置文件中默認內容刪除
將下面參數復制到配置文件/etc/keepalived/keepalived.conf中
[root@mysql_master ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id master
}vrrp_scripts chk_mysql { script /etc/keepalived/scripts/chk_mysql.sh # 監控mysqld服務腳本路徑interval 2 # 檢測時間間隔weight -10 # 權重減10}vrrp_instance VI_1 {state MASTER # 主從狀態interface ens33 # 綁定虛擬ip的網絡接口virtual_router_id 51 # 綁定虛擬路由的ID號,兩個節點的設置必須一樣priority 100 # 主節點的優先級,要比從節點高advert_int 1 # 每隔1秒發送一次心跳 authentication { # 定義認證方式和密鑰auth_type PASSauth_pass 1111 # 校驗類型:密碼1111}track_script { # 將track_scripts模塊加入到instance模塊chk_mysql # 執行mysql監控服務
}virtual_ipaddress {192.168.81.138 # 虛擬IP(設置虛擬IP網段需要同一個,需要根據實際要求調整)}
}virtual_server 192.168.81.138 3306 { # 定義虛擬服務器IP地址和端口為192.168.81.138 端口為3306delay_loop 6 # 延遲時間lb_algo rr # 負載均衡算法,這里使用輪序(rr)lb_kind DR # 負載就均衡方式persistence_timeout 0 # 存儲時間protocol TCP # 協議類型real_server 192.168.81.132 3306 { # 實際的后端服務器配置 weight 1TCP_CHECK { # 健康檢查配置 connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
修改好配置后,重啟keepalived服務,使得配置文件的修改內容生效。
4.2 修改備用服務器上的keepalive服務配置文件
配置步驟與3.1步驟相似,但是配置文件的內容略有不同。
[root@mysql_slave ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id backup
}vrrp_instance VI_1 {state BACKUP # 主從狀態interface ens33 # 綁定虛擬ip的網絡接口virtual_router_id 51 # 綁定虛擬路由的ID號,兩個節點的設置必須一樣priority 99 # 從節點的優先級,要比主節點低advert_int 1 # 每隔1秒發送一次心跳 authentication { # 定義認證方式和密鑰auth_type PASSauth_pass 1111 # 校驗類型:密碼1111}virtual_ipaddress {192.168.81.138 # 虛擬IP(設置虛擬IP網段需要同一個,需要根據實際要求調整)}
}virtual_server 192.168.81.138 3306 { # 定義虛擬服務器IP地址和端口為192.168.81.138 端口為3306delay_loop 6 # 延遲時間lb_algo rr # 負載均衡算法,這里使用輪序(rr)lb_kind DR # 負載就均衡方式persistence_timeout 0 # 存儲時間protocol TCP # 協議類型real_server 192.168.81.132 3306 { # 實際的后端服務器配置 weight 1TCP_CHECK { # 健康檢查配置 connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
5、編寫mysql監控腳本放到主服務器上
根據上面配置文件定義的監控路徑來創建目錄存放mysq服務的監控腳本。
編寫監控腳本/etc/keepalived/scripts/chk_mysql.sh
#!/bin/bash# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# + 1、此腳本為MySQL監控腳本,與keepalived組件配合使用
# + 2、keepalived配置文件:/etc/keepalived/keepalived.conf
# + 3、腳本輸出日志/etc/keepalived/check_service.log
# + 4、默認腳本路徑在/etc/keepalived/scripts下,需要改變路徑,請修改keepalived配置
# + 5、創建此腳本后請賦予可執行權限chmod +x /etc/keepalived/scripts/chk_mysql.sh
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# 基礎參數
DATE=`date +%Y%m%d`
logPath=/etc/keepalived# 檢測MySQL進程是否正常運行
A=`ps -C mysqld --no-header | wc -l`
#將腳本中的輸出內容同時輸出到終端和指定的日志文件中,并以追加的方式寫入日志文件。這樣可以方便查看腳本的輸出并記錄日志信息。
echo "$(date +%Y-%m-%d' '%H:%M:%S) MySQL進程數:$A" | tee -a ${logPath}/check_service.log
if [ $A -eq 0 ]; then# 如果MySQL進程宕機了,嘗試重啟MySQLsystemctl start mysqld# 等待一小會再次檢查MySQL,如果沒有啟動成功,則停止keepalived,使其啟動備用機sleep 3if [ `ps -C mysqld --no-header | wc -l` -eq 0 ]; thenecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL已停止!停止keepalived!" | tee -a ${logPath}/check_service.logsystemctl stop keepalivedexit 1fi
elseecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL正在運行!" | tee -a ${logPath}/check_service.logexit 0
fi
編寫并調試好后,給腳本添加可執行權限。
然后重啟備份服務器上的keepalived服務,確定虛擬IP地址綁定到主服務器上的網卡上。
6、在主服務器和備用服務器上查看虛擬IP是否綁定到ens33網卡上。
7、高可用驗證
7.1 模擬宕機,查看虛擬IP是否漂移到備用服務器上,驗證高可用效果
方法1:systemctl stop mysqld,停止mysqld服務
方法2:kill殺死mysqld的運行進程,停止mysqld服務
?