備胎的養(yǎng)成記KeepAlived實現(xiàn)熱備負載

入坑系列之HAProxy負載均衡中已經(jīng)詳細講過了怎么將高并發(fā)的請求按均衡算法分發(fā)到幾臺服務器上做均衡防止單機崩潰脸哀。

但這樣的話有沒有發(fā)現(xiàn)所有請求都經(jīng)過了HAproxy代理涩馆,自然當并發(fā)量越來越高時HAproxy就成了瓶頸糙及,突發(fā)時HAproxy就會掛掉凌蔬,或HAproxy服務器出現(xiàn)故障琳要,這時外部唯一的請求入口沒有了,怎么辦牍汹?重啟是個辦法铐维,但還是需要搶修時間柬泽,這期間內(nèi)客戶都無法訪問損失的鍋又得程序猿來背。

這種情況下備胎出現(xiàn)了方椎,?Keepalived登場,他可以解決服務宕機自動無縫切換钧嘶。

Keepalived采用VRRP(virtual router redundancy protocol棠众,虛擬路由冗余協(xié)議)熱備份協(xié)議,以軟件的方式實現(xiàn)linux服務器的多機熱備功能有决。VRRP是針對路由器的一種備份解決方案——由多臺路由器組成一個熱備組闸拿。通過共用的虛擬IP地址對外提供服務;每個熱備組內(nèi)同一時刻只有一臺主服務器提供服務书幕,其他服務器處于冗余狀態(tài)新荤,若當前在線的服務器失敗,其他服務器會自動接替(優(yōu)先級決定接替順序)虛擬IP地址台汇,以繼續(xù)提供服務苛骨。

keepalived 默認需要使用D類多播地址224.0.0.18 進行心跳通信

keepalived 使用vrrp協(xié)議(虛擬路由冗余協(xié)議)進行通信(協(xié)議號碼為112)

Keepalived也可以與LVS、Nginx苟呐、MySQL等結(jié)合使用痒芝,形成可靠的主備機,給了你寶貴的搶修時間牵素。

下面來講如何一步步搭建严衬。

環(huán)境

CentOS6.X

HAProxy 1.7.3

Keepalived?1.3.4

用root用戶安裝

下載

若在線安裝不用下載,可直接通過yum命令安裝(建議)笆呆,不過需要聯(lián)網(wǎng)请琳。

去官網(wǎng)下載 :http://www.keepalived.org/software/keepalived-1.3.4.tar.gz

下載后放進CentOS中的/usr/local/ 文件夾中

安裝

分兩種:

1、在線裝:yum install -y ipvsadm keepalived (建議)

2赠幕、安裝包;

此處按照下載好的安裝包操作:

[root@H32 local]#tar -zxvf keepalived-1.3.4.tar.gz

[root@H32 local]#cd keepalived-1.3.4

[root@H32 keepalived-1.3.4]#./configure --prefix=/usr/ --sysconfdir=/etc/

[root@H32 keepalived-1.3.4]#make

[root@H32 keepalived-1.3.4]#make install

在此之前還需要設置主備機的時間一致俄精,可用ntpdate向時間服務器同步,具體的方法有時間再詳細說明榕堰。

設置

修改keepalived.conf文件配置

[root@H32 ~]#vi /etc/keepalived/keepalived.conf

具體配置內(nèi)容:

! Configuration Fileforkeepalived

global_defs {

notification_email {

root@localhost#接受郵件方}

notification_email_from soul@104.com#發(fā)件人smtp_server 127.0.0.1#郵件服務器smtp_connect_timeout 30#超時時長router_id LVS_DEVEL#ID嘀倒;隨意即可}

vrrp_script chk_state_down {

script"[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"#如果在/roo/下有down文件;就失斁直测蘑;轉(zhuǎn)移到從上;否則正常interval 2weight3}

vrrp_script chk_haproxy {

script"/etc/keepalived/chk_haproxy.sh"#設置執(zhí)行的腳本康二,可以是腳本碳胳,也可以是命令interval 2#script執(zhí)行周期,每個interval執(zhí)行一次健康檢查weight 2#健康檢查返回0 & weight大于0沫勿,優(yōu)先級增加相應權(quán)值挨约;健康檢查非0 & weight小于0味混,優(yōu)先級減小相應值;#不管提高優(yōu)先級還是降低優(yōu)先級诫惭,最終優(yōu)先級的范圍是在[1,254]翁锡,不會出現(xiàn)優(yōu)先級小于等于0或者優(yōu)先級大于等于255的情況}

vrrp_instance VI_1 {#VRRP 配置標識 VI_1是實例名稱,一個文件可配置多個state MASTER#指定Keepalvied角色 MASTER表示此主機為主服務器BACKUP則是表示為備用服務器#當master出現(xiàn)異常后夕土,backup自動切換為master馆衔。當backup成為master后,master恢復正常后會再次搶占成為master怨绣,導致不必要的主備切換角溃。#實際應用中,可以將兩臺keepalived初始狀態(tài)均配置為backup篮撑,設置不同的優(yōu)先級减细,優(yōu)先級高的設置nopreempt(非搶占)解決異常恢復后再次搶占的問題赢笨。interface eth0#節(jié)點固有IP(非VIP)的網(wǎng)卡未蝌,用來發(fā)VRRP包virtual_router_id 111#虛擬路由標識(0-255),同一個VRRP實例使用唯一的標識茧妒,DB中的規(guī)范是使用節(jié)點IP的最后一位树埠。如10.10.16.51的51(主備相同)priority 100#節(jié)點優(yōu)先級,數(shù)字越大表示節(jié)點的優(yōu)先級越高嘶伟。keepalived啟動時會通過選舉將優(yōu)先級最高的節(jié)點選舉為master怎憋。如果某個節(jié)點初始state是master,但是優(yōu)先級低九昧,該節(jié)點會變成backupadvert_int 1#發(fā)送通告的時間間隔绊袋,#按照vrrp的官方文檔,backup會接收master的advert_int的值铸鹰,然后計算出skew time和master down interval癌别,認為master宕機觸發(fā)的選舉時間應該是(3 * Master_Adver_Interval) + Skew_timeauthentication {

auth_type PASS

auth_pass1111#同一 vrrp 實例MASTER 與 BACKUP 使用相同的密碼才能正常通信(主備相同)}

virtual_ipaddress {192.168.80.114#設置虛擬IP地址 (VIP),又叫做漂移IP地址 可以有多個,每個一行(主備機必須相同蹋笼,也是對外的虛擬IP)}

track_script {

chk_haproxy#該實例需要執(zhí)行的健康執(zhí)行腳本展姐,每個一行chk_state_down

}

notify_master"/etc/keepalived/notify.sh master 192.168.80.114"notify_backup"/etc/keepalived/notify.sh backup 192.168.80.114"notify_fault"/etc/keepalived/notify.sh fault 192.168.80.114"#狀態(tài)切換為master/backup/fault時執(zhí)行對應的腳本}

說明:

因為Keepalived在轉(zhuǎn)換狀態(tài)時會依照狀態(tài)來呼叫:

當進入Master狀態(tài)時會呼叫notify_master

當進入Backup狀態(tài)時會呼叫notify_backup

當發(fā)現(xiàn)異常情況時進入Fault狀態(tài)呼叫notify_fault

當Keepalived程序終止時則呼叫notify_stop

配置中notify.sh:

[root@H32 ~]#vi /etc/keepalived/notify.sh

配置內(nèi)容:

#!/bin/bash

#description: An example of notify script

#contact='root104@localhost'

notify() {

mailsubject="`hostname` to be $1: $2 floating"

mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"echo $mailbody| mail -s"$mailsubject"$contact

}

case"$1"inmaster)

notify master/etc/rc.d/init.d/haproxy start

exit 0

;;

backup)

notify backup/etc/rc.d/init.d/haproxy stop

exit 0

;;

fault)

notify fault/etc/rc.d/init.d/haproxy stop

exit 0

;;*)

echo'Usage: `basename $0` {master|backup|fault}'exit1;;

esac

其中chk_haproxy.sh

[root@H32 ~]#vi /etc/keepalived/chk_haproxy.sh

添加內(nèi)容:

#!/bin/bash#

#author: weizhifeng

#description:

#定時查看haproxy是否存在,如果不存在則啟動haproxy剖毯,

#如果啟動失敗圾笨,則停止keepalived#

status=$(ps aux|grep haproxy | grep -v grep | grep -v bash | wc -l)if["${status}"="0"]; then/etc/init.d/haproxy start

status2=$(ps aux|grep haproxy | grep -v grep | grep -v bash |wc -l)if["${status2}"="0"]; then/etc/init.d/keepalived stop

fi

fi


將以上三個文件全部更改后 復制一份到備機;注意根據(jù)上述高亮描述進行更改逊谋。(非常重要)

還要給chk_haproxy.sh和notify.sh執(zhí)行腳本的權(quán)限擂达。

chmod? +x? /etc/keepalived/notify.sh

chmod+x? /etc/keepalived/chk_haproxy.sh

啟動

配置完后進行啟動keepalived 和haproxy,主備機均要啟動:

service keepalived start

其它命令:

service keepalived stop#停止service keepalived restart#重啟

service keepalived enable#開機啟動

測試

down掉主機的haproxy胶滋,查看haproxy監(jiān)控訪問VIP:192.168.80.32:8089/stats板鬓,看haproxy的ID是否有變化悲敷,然后重啟主機的haproxy,再看haproxy的ID是否有變化俭令。

執(zhí)行ip a查看VIP在兩臺機子上有變化

[root@H32 ~]#ip a

思考:

虛擬IP必須與master 和 備機 在同一網(wǎng)段后德,經(jīng)測試若虛擬IP與他們不在同一網(wǎng)段訪問不了VIP。

防止keepalived互搶IP的辦法抄腔,這個也有網(wǎng)有提出過瓢湃,有相應的方法。

主備機互作主備妓柜,即主機也是備機箱季,可以做配置多個實例來實現(xiàn)涯穷。

有網(wǎng)友測試出Keepalived限制死20個VIP問題棍掐,那這個是怎么解決的。

有時主備機都出現(xiàn)綁定了VIP拷况,這時最可能的是主備機間無法通訊作煌,最簡單的測試方法是關(guān)掉兩機的防火墻,再試赚瘦,由于Keepalived基于vrrp 通訊粟誓,因此還需要加vrrp和防火墻:(在入坑系列之HAProxy負載均衡中提到過)

vi /etc/sysconfig/iptables

#編輯

-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT#允許組播地址通信(在做keepalived時用得到)-A RH-Firewall-1-INPUT -p? ? vrrp? ? -j ACCEPT#允許VRRP(虛擬路由器冗余協(xié))通信-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT#允許80端口通過防火墻:wq!#保存退出service iptables restart#重啟防火墻使配置生效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市起意,隨后出現(xiàn)的幾起案子鹰服,更是在濱河造成了極大的恐慌,老刑警劉巖揽咕,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悲酷,死亡現(xiàn)場離奇詭異,居然都是意外死亡亲善,警方通過查閱死者的電腦和手機设易,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛹头,“玉大人顿肺,你說我怎么就攤上這事≡希” “怎么了屠尊?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耕拷。 經(jīng)常有香客問我知染,道長,這世上最難降的妖魔是什么斑胜? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任控淡,我火速辦了婚禮嫌吠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掺炭。我一直安慰自己辫诅,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布涧狮。 她就那樣靜靜地躺著炕矮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪者冤。 梳的紋絲不亂的頭發(fā)上肤视,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音涉枫,去河邊找鬼邢滑。 笑死,一個胖子當著我的面吹牛愿汰,可吹牛的內(nèi)容都是我干的困后。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼衬廷,長吁一口氣:“原來是場噩夢啊……” “哼摇予!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吗跋,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤侧戴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跌宛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洞坑,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡盼玄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年介蛉,在試婚紗的時候發(fā)現(xiàn)自己被綠了沃测。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡入问,死狀恐怖丹锹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芬失,我是刑警寧澤楣黍,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站棱烂,受9級特大地震影響租漂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一哩治、第九天 我趴在偏房一處隱蔽的房頂上張望秃踩。 院中可真熱鬧,春花似錦业筏、人聲如沸憔杨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽消别。三九已至,卻和暖如春台谢,著一層夾襖步出監(jiān)牢的瞬間寻狂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工朋沮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛇券,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓朽们,卻偏偏與公主長得像怀读,于是被迫代替她去往敵國和親诉位。 傳聞我的和親對象是個殘疾皇子骑脱,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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