nginx+keepalive實(shí)現(xiàn)負(fù)載均衡高可用

1.場景描述

? ? ? 在實(shí)際生產(chǎn)環(huán)境中負(fù)載均衡是一個至關(guān)重要的位置狗准,負(fù)載均衡關(guān)乎著整個網(wǎng)站訪問的命脈,所以運(yùn)維人員對于它的處理機(jī)制和高可用的重視非常高善涨,負(fù)載均衡存在單點(diǎn)故障無疑是對整個網(wǎng)站埋下了定時炸彈其骄,nginx +keeplive實(shí)現(xiàn)負(fù)載高可用,保障業(yè)務(wù)持續(xù)提供服務(wù)避免負(fù)載均衡的單點(diǎn)故障腊满。

負(fù)載均衡高可用

2. 資源說明

角色? ? ? ? ? ? ? ? IP地址? ? ? ? ? ? ? ? 主機(jī)名


負(fù)載01? ? ? ? ? ? 10.0.0.2? ? ? ? ? ? ? ?LB01


負(fù)載02? ? ? ? ? ? 10.0.0.3? ? ? ? ? ? ? ?LB02


虛擬服務(wù)? ? ? ? ?10.0.0.4? ? ? ? ? ? ? ? ? ? ? ?


??

? ? ? 兩臺nginx負(fù)載均衡+keepalive實(shí)現(xiàn)負(fù)載高可用兩臺LB的IP地址分別為:10.0.0.2套么、10.0.0.3 keepalive的vip為:10.0.0.4,當(dāng)10.0.0.2正常在vip工作在10.0.0.2,10.0.0.3服務(wù)出現(xiàn)宕機(jī)則vip自動跳轉(zhuǎn)到10.0.0.3的LB

3.nginx負(fù)載配置

LB01的配置

[root@wencqlb-01 ~]# cat /etc/nginx/conf.d/lb01.conf
?upstream node {
?server 10.0.0.5:80;
?server 10.0.0.6:80;
}
server { listen 80;
?server_name 10.0.0.4;
?location / {
?proxy_pass http://node;
?include proxy_params;
?}
}

LB02的配置

[root@wencqlb02 ~]# cat /etc/nginx/conf.d/lb02.conf
?upstream node {
?server 10.0.0.5:80;
?server 10.0.0.6:80;
}
server {
?listen 80;
?server_name 10.0.0.4;
?location / {

proxy_pass http://node;
?include proxy_params;
?}
}

4.keepalive配置

lb01

[root@wencqlb-01 conf.d]# yum install keepalived -y ##安裝keepalive
[root@wencqlb-01 ~]# 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.4
? ? }
}
[root@wencqlb-01 conf.d]# systemctl start keepalived.service ##啟動keepalive
[root@wencqlb-01 conf.d]# systemctl enable keepalived.service ##開機(jī)自啟?

? ? 我們可以看見兩臺LB中的負(fù)載配置相同,server name為vip,當(dāng)請求到達(dá)vip所在的LB服務(wù)器則會代理到對應(yīng)的node池進(jìn)行負(fù)載均衡碳蛋,通過keepalive的vip漂移為我們的服務(wù)提供高可用汛蝙,保障網(wǎng)站7*24提供服務(wù)

lb02

[root@wencqlb-01 conf.d]# yum install keepalived -y
[root@wencqlb02 ~]# cat /etc/keepalived/keepalived.conf
bal_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.4
}
}
[root@wencqlb02 conf.d]# systemctl start keepalived.service
[root@wencqlb02 conf.d]# systemctl enable? keepalived.servicekeeplive

5.演示



演示_視頻


? ? ? ? ?通過演示視頻我們模擬LB01宕機(jī)边翼,發(fā)現(xiàn)vip漂移至第二臺LB并且這個切換對于用戶是無感知的黎炉,今天nginx+keepalive的測試就到這里謝謝桃煎!

6.keepalive防止腦裂

主備服務(wù)器因?yàn)橛布蛘哕浖栴}(網(wǎng)線松動或者nginx進(jìn)程)造成keepalived服務(wù)無法檢測到心跳信息零蓉,nginx服務(wù)down掉keepalive還在正常運(yùn)行沒有進(jìn)行主備切換等等都會造成高可用沒有達(dá)到理想的效果我們可以通過主備機(jī)腳本來規(guī)避這些因素造成keepalive無法正常主備切換

備機(jī)檢測原理

????主機(jī)能不通穷缤,VIP在備機(jī)則認(rèn)為非正常主備切換可能主機(jī)狀態(tài)正常vip在主備機(jī)都存在

#!/bin/bash
LB01_vip=10.0.0.3
LB01_ip=10.0.0.5
while true;do
?????ping -c 2 -W 3 $LB01_ip &>/dev/null
#1.主機(jī)存活檢測
if [ $? -ne 0 -a `ip add|grep "$LB01_vip"|wc -l` -eq 1 ];then
#2.判斷主機(jī)down并且vip在備機(jī)發(fā)送郵件告知管理員
? ? ? ? ? echo "HA is split brain"? | mail -s LB-HA wen799923@163.com??
else?? ? ? ?
????????????echo "HA is ok"? ? ??
fi
sleep 5
done?

主機(jī)檢測原理

判斷主機(jī)nginx服務(wù)是否正常,如果nginx服務(wù)down掉嘗試啟動津肛,如果nginx嘗試啟動未成功則停掉主機(jī)keepalive服務(wù)切換至備機(jī)保證業(yè)務(wù)正常運(yùn)行??

#!/bin/bash
?nginxpid=$(ps -C nginx --no-header|wc -l)
?#1.判斷Nginx是否存活,如果不存活則嘗試啟動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? ??

總結(jié)

通過以上兩個腳本檢測章喉,我們能夠做到規(guī)避主備之間心跳檢測不正常,但是主備機(jī)服務(wù)正常會存在主備之間都會有VIP導(dǎo)致負(fù)載腦裂的問題以及負(fù)載服務(wù)down掉快耿,keepalive服務(wù)正常導(dǎo)致業(yè)務(wù)中斷問題囊陡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掀亥,隨后出現(xiàn)的幾起案子撞反,更是在濱河造成了極大的恐慌,老刑警劉巖搪花,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遏片,死亡現(xiàn)場離奇詭異,居然都是意外死亡撮竿,警方通過查閱死者的電腦和手機(jī)吮便,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幢踏,“玉大人髓需,你說我怎么就攤上這事》坎酰” “怎么了僚匆?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搭幻。 經(jīng)常有香客問我咧擂,道長,這世上最難降的妖魔是什么檀蹋? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任松申,我火速辦了婚禮,結(jié)果婚禮上俯逾,老公的妹妹穿的比我還像新娘贸桶。我一直安慰自己,他們只是感情好桌肴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布刨啸。 她就那樣靜靜地躺著,像睡著了一般识脆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天灼捂,我揣著相機(jī)與錄音离例,去河邊找鬼。 笑死悉稠,一個胖子當(dāng)著我的面吹牛宫蛆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播的猛,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耀盗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卦尊?” 一聲冷哼從身側(cè)響起叛拷,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忿薇,失蹤者是張志新(化名)和其女友劉穎躏哩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筋栋,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡正驻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年拨拓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婿着。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡竟宋,死狀恐怖形纺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜗字,我是刑警寧澤打肝,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布粗梭,位于F島的核電站断医,受9級特大地震影響奏纪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜序调,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一炕置、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧默垄,春花似錦甚纲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椰拒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間燃观,已是汗流浹背便瑟。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工到涂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颁督,地道東北人缚陷。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓箫爷,卻偏偏與公主長得像聂儒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窜护,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容