KeepAlived基礎


前言

在之前的學習中,學習了通過LVS構建4層負載均衡集群和通過Nginx的反向代理構建7層負載均衡磁滚,了解到負載均衡是由調(diào)度服務基于調(diào)度算法把請求平攤到后端的服務器中谆甜,可見,調(diào)度器的作用可是相當重要的就漾,當一個負載均衡集群中,調(diào)度器發(fā)生故障不能提供服務時念搬,整個集群將會失效,所以需要對調(diào)度器做高可用摆出,保證當調(diào)度器出現(xiàn)故障時朗徊,由其他服務器負責調(diào)度任務。其中高可用實現(xiàn)方案中偎漫,可以使用VRRP協(xié)議來實現(xiàn)冗余達到高可用目的爷恳。

VRRP協(xié)議

VRRP協(xié)議是為消除在靜態(tài)缺省路由環(huán)境下的缺省路由器單點故障引起的網(wǎng)絡失效而設計的主備模式的協(xié)議,使得在發(fā)生故障而進行設備功能切換時可以不影響內(nèi)外數(shù)據(jù)通信象踊,不需要再修改內(nèi)部網(wǎng)絡的網(wǎng)絡參數(shù)温亲。VRRP協(xié)議需要具有IP地址備份棚壁,優(yōu)先路由選擇,減少不必要的路由器間通信等功能栈虚。

VRRP的幾個術語

  • 虛擬路由器:

由一個Master路由器和多個Backup路由器組成袖外。主機將虛擬路由器當作默認網(wǎng)關。

  • 虛擬路由器標識 VRID
    虛擬路由器的標識魂务。由相同VRID的一組路由器構成一個虛擬路由器曼验。
  • Master路由器:

虛擬路由器中承擔報文轉(zhuǎn)發(fā)任務的路由器。

  • Backup路由器:

Master路由器出現(xiàn)故障時粘姜,能夠代替Master路由器工作的路由器鬓照。

  • 虛擬IP地址:

虛擬路由器的IP地址。一個虛擬路由器可以擁有一個或多個IP地址孤紧。

  • 優(yōu)先級:

VRRP根據(jù)優(yōu)先級來確定虛擬路由器中每臺路由器的地位豺裆。

  • 虛擬MAC地址:

一個虛擬路由器擁有一個虛擬MAC地址。虛擬MAC地址的格式為00-00-5E-00-01-{VRID}号显。通常情況下臭猜,虛擬路由器回應ARP請求使用的是虛擬MAC地址,只有虛擬路由器做特殊配置的時候咙轩,才回應接口的真實MAC地址获讳。

VRRP的基礎

在VRRP虛擬結構中,虛擬路由器是通過"MAC+VRID"的形式來標識的活喊,如"00-00-5E-00-01-{VRID}"丐膝。在VRRP同一虛擬路由,MASTER和BACKUP路由器的VRID是一致的

VRRP結構中路由器之間的通信是通過IP多播的方式實現(xiàn)的(也可以配置為其它通信方式)钾菊。要想保持自己一直時MASTER身份帅矗, 則在間隔時間往多播地址發(fā)送VRRP狀態(tài)消息,可以理解為心跳包煞烫,告訴BACKUP自己還或者浑此,當BACKUP路由器收不到MASTER的心跳包時,則認為MASTER宕機滞详,會重新選舉一個MASTER凛俱。

keepalived

簡介

Keepalived在設計之初就是LVS的一個輔助工具,因此它和LVS的兼容性非常好料饥,能對后端的RS作健康檢查蒲犬,當后端的RS宕機,能在該RS從集群中剔除岸啡。也能高可用IPVS服務原叮。Keepalived基于vrrp協(xié)議完成地址流動,能為當前虛擬路由地址所在的節(jié)點生成ipvs規(guī)則,還能基于腳本調(diào)用接口通過執(zhí)行腳本完成腳本中定義的功能奋隶。

keepalived架構

架構圖:


image_1chc9kd2nd3s19kvppg193nkc49.png-217.4kB
image_1chc9kd2nd3s19kvppg193nkc49.png-217.4kB

組件說明:
checkers:用于檢查后端RS的健康狀態(tài)擂送,并且也能管理后端RS,該組件使用獨立的子進程負責唯欣,由父進程管理嘹吨。
VRRPstack:基于VRRP協(xié)議實現(xiàn)高可用的組件,它能夠提供故障轉(zhuǎn)移功能黍聂,并且能單獨使用躺苦,即不對后端做健康檢查,運行為一個獨立的子進程由父進程管理
System Call:提供讀取自定義腳本的功能
IPVS wrapper:能夠讀取配置文件的規(guī)則产还,通過系統(tǒng)調(diào)用直接管理ipvs
Netlink Reflector:用于管理和檢查VIP地址
Watch Dog:用于檢查Checkers和VRRPstack進程

安裝Keepalived

在base倉庫已經(jīng)包含了Keepalived程序包匹厘,直接安裝即可。

 [root@nginx_proxy ~]# yum install keepalived -y
 
 [root@nginx_proxy ~]# rpm -ql keepalived
/etc/keepalived
/etc/keepalived/keepalived.conf #keepalived的配置文件
/etc/sysconfig/keepalived   #一些keepalived的選項參數(shù)設置脐区,例如對日志的記錄選項 
/usr/bin/genhash    #keepalive能對TCP的返回內(nèi)容做哈希檢查愈诚,這個程序是計算哈希的
/usr/lib/systemd/system/keepalived.service  #unit file
/usr/libexec/keepalived
/usr/sbin/keepalived    #keepalived的程序

修改keepalived的輸出日志文件

keepalived的日志默認輸出到/var/log/messages,可以設置輸出為一個單獨文件牛隅。
首先對/etc/sysconfig/keepalived這個文件的選項作修改

KEEPALIVED_OPTIONS="-D -S 0" #-D -S 0 即把詳細的日志信息記錄到本地syslog local 0 這個設備上面 

然后修改rsyslog的配置文件/etc/rsyslog.conf炕柔,添加該設備記錄日志的級別和路徑。
添加local 0 設置的日志路徑

#keepalive log messages
local0.*                                                /var/log/keepalived.log

重啟rsyslog

[root@nginx_proxy ~]# systemctl restart rsyslog

Keepalived的配置文件詳解

Keepalived的配置文件分為3部分:
全局配置媒佣,配置對全局都生效
VRRP部分匕累,即高可用部分,vrrp部分的配置文件主要影響VRRP STACK組件

配置詳解:

global_defs {   #全局部分基本都是定義郵件報警設置
   notification_email {     #定義報警郵件的收件箱
     acassen@firewall.loc   #收件人地址
   }
   notification_email_from Alexandre.Cassen@firewall.loc    #報警郵件的發(fā)件人
   smtp_server 192.168.200.1    #Smtp的服務器
   smtp_connect_timeout 30      #連接超時時間   
   router_id LVS_DEVEL      #標識keepalived服務器的字符串默伍,實現(xiàn)高可用時需要使用它標識節(jié)點
   vrrp_strict  #執(zhí)行嚴格的VRRP協(xié)議遵從性
   vrrp_mcast_group4  224.0.0.18     # 設置ipv4的組播地址
}



#定義vrrp虛擬路由器(實例)欢嘿。一個配置文件中可以實現(xiàn)多實例。
vrrp_instance <STRING> {
    ....
}
                    
專用參數(shù):
state MASTER|BACKUP #義實例的角色狀態(tài)是master還是backup
interface IFACE_NAME    #綁定的網(wǎng)卡接口也糊,即用于發(fā)送接受VRRP協(xié)議的接口
virtual_router_id VRID  #同組實例中VRID必須一樣炼蹦,取值范圍0-255
priority 100        #表示當前主機在此實例中的優(yōu)先級,范圍1-254狸剃;
advert_int 1    #VRRP協(xié)議報文的通告間隔
authentication {    #定義vrrp的認證掐隐,防止濫竽充數(shù)
    auth_type AH|PASS       #簡單的PASS認證
    auth_pass <PASSWORD>    #不超過8位,超過8位則取前8位
    }
virtual_ipaddress {     #定義流動IP钞馁,綁定在網(wǎng)卡上
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
    192.168.200.17/24 dev eth1
    192.168.200.18/24 dev eth2 label eth2:1
    }
track_interface {   #配置要監(jiān)控的網(wǎng)絡接口虑省,一旦接口出現(xiàn)故障,則轉(zhuǎn)為FAULT狀態(tài)僧凰;
    eth0
    eth1
    ...
    }
                    
nopreempt   #定義主機處在非搶占模式下
preempt_delay 300 #搶占式模式下探颈,節(jié)點上線后觸發(fā)新選舉操作的延遲時長;
                        
定義通知腳本:
notify_master <STRING>|<QUOTED-STRING>  #當前節(jié)點轉(zhuǎn)為master時觸發(fā)的腳本
notify_backup <STRING>|<QUOTED-STRING>  #當此節(jié)點轉(zhuǎn)為backup時觸發(fā)的腳本
notify_fault <STRING>|<QUOTED-STRING>   #當前節(jié)點轉(zhuǎn)為“失敗”狀態(tài)時觸發(fā)的腳本允悦;
notify <STRING>|<QUOTED-STRING>         #通用格式的通知觸發(fā)機制,一個腳本可完成以上三種狀態(tài)的轉(zhuǎn)換時的通知;





-------分割線隙弛,上面是定義VRRP的高可用架馋,實現(xiàn)地址流動,下面是定義ipvs負載規(guī)則-------

#LVS 虛擬服務的定義
虛擬服務器:
配置參數(shù):
virtual_server IP port 或者
virtual_server fwmark int 
{
    ...
    real_server {
        ...
        }
        ...
        }
            
常用參數(shù):
delay_loop <INT>    #對后端健康檢查的間隔全闷;
lb_algo rr|wrr|lc|wlc|lblc|sh|dh    #調(diào)度算法
lb_kind NAT|DR|TUN      #集群的類型叉寂;
persistence_timeout <INT>       #持久連接的時長
protocol TCP        #服務類型,只支持TCP
sorry_server <IPADDR> <PORT>    #當所有的后端都宕機時总珠,由哪臺服務器繼續(xù)提供服務
real_server <IPADDR> <PORT>     #定義后端Real server
    {
        weight <INT>        #權重
        notify_up <STRING>|<QUOTED-STRING>  #當出現(xiàn)匹配字符串時屏鳍,就認為服務是up的
        notify_down <STRING>|<QUOTED-STRING>     #當出現(xiàn)匹配字符串時,就認為服務是down的
        HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }   #定義當前主機的健康狀態(tài)檢測方法局服;
    }
                


HTTP_GET|SSL_GET {  #定義應用層檢測
    url {
    path <URL_PATH>     #定義要監(jiān)控的URL
    status_code <INT>   #定義以什么狀態(tài)碼作為正常钓瞭。
    digest <STRING>     #判斷上述檢測機制為健康狀態(tài)的響應的內(nèi)容的校驗碼;
        }
nb_get_retry <INT>      #重試次數(shù)淫奔;
delay_before_retry <INT>    #在重試前山涡,等待多長時間
connect_ip <IP ADDRESS>     #連接RS的哪個IP
connect_port <PORT>         #連接RS的哪個端口
bindto <IP ADDRESS>         #使用哪個地址作為源IP
bind_port <PORT>            #使用哪個端口作為源端口
connect_timeout <INTEGER>   #連接請求的超時時長;
                }

                
TCP_CHECK {
    connect_ip <IP ADDRESS>    #向當前RS的哪個IP地址發(fā)起健康狀態(tài)檢測請求
    connect_port <PORT> #向當前RS的哪個PORT發(fā)起健康狀態(tài)檢測請求
    bindto <IP ADDRESS> #發(fā)出健康狀態(tài)檢測請求時使用的源地址唆迁;
    bind_port <PORT>    #發(fā)出健康狀態(tài)檢測請求時使用的源端口鸭丛;
    connect_timeout <INTEGER>   #連接請求的超時時長;
        }



?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唐责,一起剝皮案震驚了整個濱河市鳞溉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鼠哥,老刑警劉巖熟菲,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肴盏,居然都是意外死亡科盛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門菜皂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贞绵,“玉大人,你說我怎么就攤上這事恍飘≌ケ溃” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵章母,是天一觀的道長母蛛。 經(jīng)常有香客問我,道長乳怎,這世上最難降的妖魔是什么彩郊? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上秫逝,老公的妹妹穿的比我還像新娘恕出。我一直安慰自己,他們只是感情好违帆,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布浙巫。 她就那樣靜靜地躺著,像睡著了一般刷后。 火紅的嫁衣襯著肌膚如雪的畴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天尝胆,我揣著相機與錄音丧裁,去河邊找鬼。 笑死班巩,一個胖子當著我的面吹牛渣慕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抱慌,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼逊桦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抑进?” 一聲冷哼從身側響起强经,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寺渗,沒想到半個月后匿情,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡信殊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年炬称,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涡拘。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡玲躯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳄乏,到底是詐尸還是另有隱情跷车,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布橱野,位于F島的核電站朽缴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏水援。R本人自食惡果不足惜密强,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一茅郎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧或渤,春花似錦只洒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽成畦。三九已至距芬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間循帐,已是汗流浹背框仔。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拄养,地道東北人离斩。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像瘪匿,于是被迫代替她去往敵國和親跛梗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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