1.什么是高可用?為什么要設(shè)置高可用
高可用:兩臺(tái)相同的機(jī)器啟動(dòng)著相同的業(yè)務(wù)姜骡,當(dāng)有一臺(tái)機(jī)器宕機(jī)時(shí)弃理,另外一臺(tái)機(jī)器能快速的接管,而對(duì)于用戶來說滔金,是無感的
為什么要設(shè)計(jì)高可用:
減少系統(tǒng)不能服務(wù)的時(shí)間色解,比如4個(gè)9,5個(gè)9
2.高可用使用什么工具來實(shí)現(xiàn)餐茵?硬件還是軟件
軟件的方式:keepalived
3.keepalived如何使用高可用
keepalived軟件是基于VRRP協(xié)議實(shí)現(xiàn)的科阎。
VRRP虛擬路由冗余協(xié)議,主要用于解決單點(diǎn)故障忿族。
4.VRRP如何誕生的锣笨,VRRP的原理是什么蝌矛?
我們的VRRP其實(shí)是通過軟件或硬件的形式在Master和Backup外面增加一個(gè)虛擬MAC地址(簡稱VMAC)與虛擬IP地址(簡稱VIP);
當(dāng)我們的pc請(qǐng)求VIP時(shí)错英,無論是Master處理還是Backup處理入撒,PC僅會(huì)在ARP緩存表中記錄VMAC與VIP的對(duì)應(yīng)關(guān)系。
6.高可用核心概念總結(jié)
1.如何確定誰是主從節(jié)點(diǎn):優(yōu)先級(jí)
2.如果Master故障椭岩,Backup自動(dòng)接管后茅逮,Master恢復(fù)后會(huì)奪權(quán)嗎?(搶占式判哥、非搶占式)
3.如果兩臺(tái)服務(wù)器都認(rèn)為自己是Master會(huì)出現(xiàn)什么問題献雅?(腦裂)
7.keepalived高可用安裝
部署在負(fù)載均衡上
10.0.0.5
10.0.0.6
1.安裝
yum install keepalived -y
2.配置
2.配置
#主配置
[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
}
}
#從配置
[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
PS:正常情況下,主配置有VIP塌计,從沒有
8.keepalived高可用地址飄移測(cè)試
1.用Windows的cmd測(cè)試
ping 10.0.0.3
停止lb01上的keepalived挺身,會(huì)自動(dòng)切換到lb02上
當(dāng)主恢復(fù)后,會(huì)自動(dòng)切換到lb01上
2.arp地址切換:
arp -a
3.抓包
9.keepalived高可用 搶占式與非搶占式
1.搶占式:
master故障-->backup頂上-->master恢復(fù)-->master頂上 #默認(rèn)
2.非搶占式
master故障-->backup頂上-->master恢復(fù)-->backup繼續(xù)工作-->當(dāng)backup故障-->master頂上
搶占式:硬件配置不一樣
非搶占式:硬件配置一致锌仅,業(yè)務(wù)不允許多次切換
非搶占式配置
要求:兩臺(tái)機(jī)器配置一樣
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í)伍玖。
兩臺(tái)服務(wù)器都角色狀態(tài)啟用nopreempt后,必須修改角色狀態(tài)統(tǒng)一為BACKUP剿吻,唯一的區(qū)分就是優(yōu)先級(jí)窍箍。
配置文件
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state BACKUP #用戶都為BACKUP
nopreempt #非搶占式,加入命令
interface eth0
virtual_router_id 50
priority 150 #只需要優(yōu)先級(jí)不一樣即可
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
兩個(gè)配置文件都這樣
10.keepalived高可用與Nginx集成
keepalived地址漂移實(shí)現(xiàn)高可用
Nginx借用keepalived提供的VIP地址
11.如果Nginx宕機(jī)丽旅,會(huì)導(dǎo)致用戶請(qǐng)求失敗椰棘,但keepalived并不會(huì)切換,所以需要寫一個(gè)腳本檢測(cè)Nginx存活狀態(tài)榄笙,如果Nginx宕機(jī)邪狞,嘗試重啟Nginx,重啟不成功茅撞,停掉keepalived
#腳本 注意:主配置
[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是否會(huì)被拉起
4.模擬nginx故障,檢查keeplaived的VIP是否會(huì)漂移至備節(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),開始爭(zhēng)搶資源拄查,結(jié)果會(huì)導(dǎo)致系統(tǒng)混亂吁津,數(shù)據(jù)損壞。
對(duì)于一個(gè)無狀態(tài)服務(wù)的HA堕扶,無所謂腦裂
但是碍脏,對(duì)于有狀態(tài)的服務(wù)(MySQL)的HA梭依,必須要嚴(yán)格防止腦裂。
#但有些生產(chǎn)環(huán)境下的系統(tǒng)按照無狀態(tài)服務(wù)HA的那一套去配置有狀態(tài)服務(wù)典尾,結(jié)果可想而知...
模仿腦裂配置:
開啟防火墻役拴,同時(shí)重啟keepalived服務(wù),模仿腦裂
#解決腦裂的案例 ***從配置
master 10.0.0.3
backup 10.0.0.3
1.在備上編寫檢測(cè)腳本, 測(cè)試如果能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
}
}
keepalived 使用環(huán)境
1.不能在公有云上使用
2.公有云要想實(shí)現(xiàn)負(fù)載均衡高可用-----> 購買的SLB 自帶高可用
3.虛擬IP咋使--->真實(shí)的硬件環(huán)境:
<article class="_2rhmJa"></article>