Keepalived高可用
高可用介紹
1.什么是高可用
2.高可用使用什么方式實(shí)現(xiàn)
硬件
軟件 keepalived
3.keepalived如何實(shí)現(xiàn)高可用?
通過(guò)vrrp協(xié)議實(shí)現(xiàn)的高可用. 虛擬路由冗余協(xié)議
VMAC和VIP實(shí)現(xiàn)高可用技術(shù)方案 地址漂移
4.keepalived核心概念
1.如何確定誰(shuí)是主節(jié)點(diǎn)誰(shuí)是備節(jié)點(diǎn)是掰。(投票選舉思灌??jī)?yōu)先級(jí)?)
2.如果Master故障配并,Backup自動(dòng)接管,那Master恢復(fù)后會(huì)奪權(quán)嗎仔燕?(搶占式螟蝙、非搶占式)
3.如果兩臺(tái)服務(wù)器都認(rèn)為自己是Master會(huì)出現(xiàn)什么問(wèn)題?(腦裂)
keepalived 服務(wù)安裝配置
1.keepalived安裝
[root@lb01 ~]# yum install keepalived -y
[root@lb02 ~]# yum install keepalived -y
2.keepalived主配置
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
}
}
3.keepalived備份配置文件
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
}
}
4.keepalived啟動(dòng)
[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# systemctl enable keepalived
5.主配置文件和備配置文件的區(qū)別
Keepalived配置區(qū)別 Master配置 Backup節(jié)配置
route_id(唯一標(biāo)識(shí)) lb01 lb02
state(角色狀態(tài)) MASTER BACKUP
priority(優(yōu)先級(jí)) 150 100
測(cè)試
1.測(cè)試IP地址是否會(huì)自動(dòng)漂移 systemctl stop keepalived
2.測(cè)試漂移之后,檢查windows的arp緩存表 arp -a
3.使用wireshark抓包分析
搶占式(默認(rèn))和非搶占式
1扼褪、兩個(gè)節(jié)點(diǎn)的state都必須配置為BACKUP(官方建議)
2、兩個(gè)節(jié)點(diǎn)都在vrrp_instance中添加nopreempt參數(shù)
3软能、其中一個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)必須要高于另外一個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)迎捺。
PS: 兩臺(tái)服務(wù)器都角色狀態(tài)啟用nopreempt后举畸,必須修改角色狀態(tài)統(tǒng)一為BACKUP查排,唯一的區(qū)分就是優(yōu)先級(jí)。
配置步驟
1.修改state 為backup
2.增加nopreempt
如何將keepalived與nginx負(fù)載均衡結(jié)合
強(qiáng)調(diào): keepalived只做地址漂移,keepalived與nginx沒(méi)有任何關(guān)系.
user --> blog.oldboy.com --> 10.0.0.3 --->lb01 -->80 --->nginx
1.先讓10.0.0.6 能夠正常的訪問(wèn)到對(duì)應(yīng)的業(yè)務(wù) scp
2.修改windows Host解析,指向到10.0.0.6
3.接入keepalived技術(shù),修改windows Host解析 10.0.0.3
4.測(cè)試一臺(tái)出現(xiàn)故障,另一臺(tái)是否能自動(dòng)接管,并且正常訪問(wèn)
如何使用keepalived (生產(chǎn))
1.需要有硬件服務(wù)器,在云上不需要keepalived,阿里云自帶高可用.
2.申請(qǐng)?zhí)摂MIP,是內(nèi)網(wǎng)的,公網(wǎng)能不能申請(qǐng)
keepalived檢測(cè)腦裂
檢測(cè)腦裂腳本
vip=10.0.0.3
master_ip=10.0.0.5
while true;do
#1.通過(guò)ping命令測(cè)試主是否是通
ping -c 2 -W 3 $master_ip &>/dev/null
#2.ping的通master的ip,同時(shí)本地還存在一個(gè)vip地址
if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
echo "ha is split brain.warning."
else
echo "ha is ok"
fi
sleep 5
done
nginx故障問(wèn)題解決
1.嘗試?yán)餹ginx
2.如果拉不起nginx抄沮,則把keepalived殺死
腳本文件
[root@lb01 ~]# cat /scripts/check_web.sh
#!/bin/sh
nginxpid=$(ps -C nginx --no-header|wc -l)
#1.判斷Nginx是否存活,如果不存活則嘗試啟動(dòng)Nginx
if [ $nginxpid -eq 0 ];then
systemctl start nginx
sleep 3
#2.等待3秒后再次獲取一次Nginx狀態(tài)
nginxpid=$(ps -C nginx --no-header|wc -l)
#3.再次進(jìn)行判斷, 如Nginx還不存活則停止Keepalived,讓地址進(jìn)行漂移,并退出腳本
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
配置keepalived支持腳本
1.給腳本增加執(zhí)行權(quán)限
[root@lb01 conf.d]# chmod +x /scripts/check_web.sh
2.修改keepalived配置文件
[root@lb01 conf.d]# 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 BACKUP
priority 150
nopreempt
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
#調(diào)用并運(yùn)行該腳本
track_script {
check_web
}
}
keepalived高可用總結(jié)
1.高可用目的
減少系統(tǒng)故障時(shí)間
2.高可用通常使用keepalived來(lái)實(shí)現(xiàn)
3.keepalived底層借助的是vrrp虛擬路由冗余協(xié)議
4.vrrp誕生\vrrp解決了什么問(wèn)題
1.用戶手動(dòng)修改IP (人員過(guò)多的情況, pass)
2.將backup機(jī)器的地址改為master的IP
1.arp緩存表的問(wèn)題:
1.清理所有用戶的arp緩存表,讓其重新廣播 那master恢復(fù)了怎么辦?
3.vrrp解決這樣問(wèn)題?
新增一個(gè)vip ->vmac(對(duì)應(yīng)的是真實(shí)服務(wù)器的mac地址)
1.用戶只需要鏈接vip,無(wú)需在關(guān)心底層有多少機(jī)器
2.當(dāng)master故障,backup頂上時(shí),會(huì)通知客戶端更新vip對(duì)應(yīng)的vmac