day09 keepalived高可用
1.什么是高可用国旷,為什么要設(shè)計(jì)高可用?
兩臺機(jī)器啟動(dòng)著相同的業(yè)務(wù)系統(tǒng),當(dāng)有一臺機(jī)器宕機(jī),另外一臺服務(wù)器能快速的接管忿项,對于訪問的用戶是無感知的陡鹃。
減少系統(tǒng)不能提供服務(wù)的時(shí)間沮峡。
2.高可用使用什么工具來實(shí)現(xiàn)? 是硬件還是軟件?
軟件: keepalived
3.keepalived如何實(shí)現(xiàn)高可用?
通過vrrp協(xié)議實(shí)現(xiàn), 虛擬路由冗余協(xié)議.
4.vrrp誕生的過程以及vrrp的原理?
5.keepalived高可用使用場景?
通常業(yè)務(wù)系統(tǒng)需要7×24小時(shí)不DOWN機(jī)算撮,比如公司內(nèi)部OA系統(tǒng)生宛,每天公司人員都要使用,則不允許DOWN機(jī)肮柜。做為業(yè)務(wù)來說陷舅,要隨時(shí)隨地都要可用。
6.keepalived高可用核心概念總結(jié)?
搶占式:當(dāng)master宕機(jī)后backup頂替工作审洞,當(dāng)master恢復(fù)正常之后莱睁,backup退下,master又繼續(xù)工作芒澜。
非搶占式:當(dāng)master宕機(jī)之后,backup頂替工作,當(dāng)master恢復(fù)正常之后爆班,只能等到backup宕機(jī)之后花嘶,master才能接入正常工作。
7.keepalived高可用安裝與配置?
10.0.0.5 (兩臺機(jī)器要保持一致) 10.0.0.6
1.安裝
[root@lb01 ~]# yum install keepalived -y
2.配置( master 主 backup備)
10.0.0.5 lb01
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
10.0.0.6 lb02
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
3.啟動(dòng)
[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# systemctl enable keepalived
4.驗(yàn)證
[root@lb01 ~]# ip addr|grep 10.0.0.3
8.keepalived高可用地址漂移測試?
1.抓包看看
1.10.0.0.3 發(fā)送 組播數(shù)據(jù)包--->
什么是廣播:打個(gè)比方誊酌,一個(gè)廣場上部凑,全是中國人,你大喊一句中文碧浊,大家都聽到了涂邀,這叫廣播。
什么是組播:如果廣場上有中國人和外國人箱锐,你大喊一句中文比勉, 只有中國人能聽懂,這就是組播驹止。組播是有特定目的的成員浩聋,是一種可控的廣播,組播成員需要加入組播組幢哨,才能收到該組播信息赡勘。
2.抓包查看arp緩存表 --->
9.keepalived高可用搶占式與非搶占式?
master故障--->backup頂上--->master恢復(fù)--->backup 搶占式 默認(rèn)
master故障--->backup頂上--->master恢復(fù)--->backup繼續(xù)工作 非搶占式
1、兩個(gè)節(jié)點(diǎn)的state都必須配置為BACKUP(官方建議)
2捞镰、兩個(gè)節(jié)點(diǎn)都在vrrp_instance中添加nopreempt參數(shù)
3闸与、其中一個(gè)節(jié)點(diǎn)的優(yōu)先級必須要高于另外一個(gè)節(jié)點(diǎn)的優(yōu)先級。
兩臺服務(wù)器都角色狀態(tài)啟用nopreempt后岸售,必須修改角色狀態(tài)統(tǒng)一為BACKUP践樱,唯一的區(qū)分就是優(yōu)先級。
1.搶占: 硬件配置不一
2.非搶占: 硬件配置一致,業(yè)務(wù)不允許多次切換
10.keepalived高可用與Nginx集成
地址漂移實(shí)現(xiàn)高可用
nginx和keeplaived沒有關(guān)系?
nginx需要借助keeplaived VIP 地址漂移 實(shí)現(xiàn) 高可用.
11.案例
如果Nginx宕機(jī), 會導(dǎo)致用戶請求失敗, 但Keepalived并不會進(jìn)行切換, 所以需要編寫一個(gè)腳本檢測Nginx的存活狀態(tài), 如果不存活則kill nginx和keepalived
思路:1.判斷nginx進(jìn)程是否存在 ps aux|grep nginx|grep -v grep
2.判斷nginx的端口是否存在 netstat -lntp|grep :80|wc -l
3.通過curl來模擬訪問,判斷訪問結(jié)果是否ok curl -H Host:url.oldxu.com http://10.0.0.3
1.編寫腳本
[root@lb01 ~]# mkdir /scripts
[root@lb01 ~]# vim /scripts/check_web.sh
#!/usr/bin/bash
nginx_port=$(netstat -lntp|grep :80|wc -l)
if [ $nginx_port -ne 1 ];then
systemctl start nginx &>/dev/null
rc=$?
sleep 3
if [ $rc -ne 0 ];then
systemctl stop keepalived
fi
fi
[root@lb01 ~]# chmod +x /scripts/check_web.sh
2.keeplaived調(diào)用該腳本
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
定義腳本名稱,以及腳本所在的路徑
vrrp_script check_web {
script "/scripts/check_web.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
#nopreempt
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
#調(diào)用腳本名稱
track_script {
check_web
}
}
3.模擬nginx停止,檢查nginx是否會被拉起
4.模擬nginx故障,檢查keeplaived的VIP是否會漂移至備節(jié)點(diǎn)
12.keepalived高可用腦裂與故障解決?
腦裂(split-brain)凸丸,指在一個(gè)高可用(HA)系統(tǒng)中拷邢,當(dāng)聯(lián)系著的兩個(gè)節(jié)點(diǎn)斷開聯(lián)系時(shí),本來為一個(gè)整體的系統(tǒng)屎慢,分裂為兩個(gè)獨(dú)立節(jié)點(diǎn)瞭稼,這時(shí)兩個(gè)節(jié)點(diǎn)開始爭搶共享資源忽洛,結(jié)果會導(dǎo)致系統(tǒng)混亂,數(shù)據(jù)損壞环肘。
對于無狀態(tài)服務(wù)的HA欲虚,無所謂腦裂不腦裂;
但對有狀態(tài)服務(wù)(比如MySQL)的HA悔雹,必須要嚴(yán)格防止腦裂复哆。
(但有些生產(chǎn)環(huán)境下的系統(tǒng)按照無狀態(tài)服務(wù)HA的那一套去配置有狀態(tài)服務(wù),結(jié)果可想而知...)
master 10.0.0.3
backup 10.0.0.3
1.在備上編寫檢測腳本, 測試如果能ping通主并且備節(jié)點(diǎn)還有VIP的話則認(rèn)為產(chǎn)生了腦列
[root@lb02 conf.d]# cat /scripts/check_spilt.sh
vip=10.0.0.3
master_ip=10.0.0.5
ping -c2 $master_ip &>/dev/null
if [ $? -eq 0 ];then
ip_check=$(ip addr | grep "$vip" | wc -l)
if [ $ip_check -eq 1 ];then
echo "腦列"
systemctl stop keepalived
fi
fi
--------------------------------------------------------------->
[root@lb02 conf.d]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb02
}
vrrp_script check_spilt {
script "/scripts/check_spilt.sh"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
check_spilt
}
}
keeplaived使用:
1.不能在公有云上使用
2.公有云要想實(shí)現(xiàn)負(fù)載均衡高可用-----> 購買的SLB 自帶高可用
3.虛擬IP咋使--->真實(shí)的硬件環(huán)境:l
總結(jié):
1.介紹高可用.....
2.高可用實(shí)現(xiàn)工具keepalived
3.keepalived--->VRRP協(xié)議實(shí)現(xiàn)--->誕生-->
4.keepalived安裝 配置 啟動(dòng) 測試地址漂移
5.nginx的高可用問題,nginx借助keeplaived地址漂移實(shí)現(xiàn)高可用
6.keepalived搶占和非搶占
7.keeplaived + nginx 實(shí)現(xiàn)高可用--->nginx故障-->強(qiáng)制殺死keepalived
8.keeplaived 腦裂 -->無狀態(tài)服務(wù)沒有影響 有狀態(tài)的有影響
9.keeplaived使用場景 如何使用-->
1.真實(shí)的硬件環(huán)境
2.不能在公有云使用
10.lvs+keeplaived nginx+keeplaived haproxy+keeplaived