keepalived主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。keepalived主要目的在於,其自身啓動一個服務,可以實現工做在雙節點或多個節點上,而且能夠在內核生效的ipvs規則其中當前持有資源的節點被稱爲活躍節點,另外的節點被稱爲備節點被稱爲 Master/Backup。html
虛擬路由器冗餘協議(VRRP)是一種選擇協議,它能夠把一個虛擬路由器的責任動態分配到局域網上的 VRRP 路由器中的一臺。控制虛擬路由器 IP 地址的 VRRP 路由器稱爲主路由器,它負責轉發數據包到這些虛擬 IP 地址。一旦主路由器不可用,這種選擇過程就提供了動態的故障轉移機制,這就容許虛擬路由器的 IP 地址能夠做爲終端主機的默認第一跳路由器。使用 VRRP 的好處是有更高的默認路徑的可用性而無需在每一個終端主機上配置動態路由或路由發現協議。 VRRP 包封裝在 IP 包中發送。python
VRRP優先級別:nginx
VRRP每一個節點是有本身的優先級的,通常優先級是從0-255 ,數字越大優先級越高所以能夠這麼定義: 假如要有一初始化的狀態,其中一節點優先級100 另外一節點優先級99,那麼毫無疑問,誰的優先級高誰就是主節點全部的節點剛啓動後上線都是backup狀態,需經過選舉的方式選擇master,若是其餘節點沒有響應則將本身提高爲master 通告機制: 若是節點之間master出現故障,其會自動轉移當前角色,這時咱們的管理員應該知道其已切換角色keepalived支持郵件發送機制,若是其狀態發生改變的話 能夠經過郵件方式發送給管理員,使管理員第一時間能夠查看其活動狀態,方便以後的運維工做
keepalived核心組成部分c#
keepalivedcentos
KeepAlived的安裝:bash
[root@Nginx-one ~]# tar zxf keepalived-1.2.13.tar.gz [root@Nginx-one ~]# cd keepalived-1.2.13 [root@Nginx-one keepalived-1.2.13]# yum install kernel-devel openssl-devel libnl-devel [root@Nginx-one keepalived-1.2.13]# ./configure --prefix=/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ [root@Nginx-one keepalived-1.2.13]# make && make install Keepalived configuration ------------------------ Keepalived version : 1.2.13 ##version# Compiler : gcc ##編譯工具## Compiler flags : -g -O2 ##參數## Extra Lib : -lssl -lcrypto -lcrypt ##擴展庫## Use IPVS Framework : Yes ##LVS核心代碼框架,不使用LVS能夠編譯時disable-lvs## IPVS sync daemon support : Yes ##IPVS同步進程,是否開啓取決於 IPVS FRAMEWORK### IPVS use libnl : Yes ##是否使用libnl庫## fwmark socket support : Yes ##套接字框架## Use VRRP Framework : Yes ##VRRP框架,keepalived的核心進程vrrpd## Use VRRP VMAC : Yes ##VRRP Virtual mac## SNMP support : No SHA1 support : No Use Debug flags : No [root@Nginx-one keepalived-1.2.13]# make && make install
KeepAlived的全部配置都在一個配置文件裏設置,支持的配置可分爲如下三類:服務器
1、全局配置(global configure) 2、VRRPD配置 3、LVS配置 很明顯,全局配置就是對整個keepalived生效的配置,無論是否使用LVS,VRRPD是keepalived的核心,LVS配置只在要使用keepalived來配置和管理LVS時使用,若是僅使用keepalived來作HA,LVS不須要配置。 配置文件都是以塊(block)形式組織的,每一個塊都在{}範圍內,#和!表示註釋。
全局定義(global definition)app
global_defs { notification_email { ##指定keepalived在發生事件(如切換)須要發送Email的對象,多個寫多行## itchenyi@gmail.com } notification_email_from itchenyi@gmail.com smtp_server 127.0.0.1 ##SMTP服務器## smtp_connect_timeout 30 ##連接超時時間## router_id Nginx-one ##路由標識,這裏用主機名## }
不使用SYNC Group的話,若是路由有2個網段,一個內網,一個外網,每一個網段開啓一個VRRP實例,假設VRRP配置爲檢查內網,那麼當外網出現問題時,VRRPD會認爲本身是健康的,則不會發送Master和Backup的切換,從而致使問題,Sync Group能夠把兩個實例都放入Sync Group,這樣的話,Group 裏任何一個實例出現問題都會發生切換。框架
vrrp_instance VI_1 { ##虛擬路由標識## state MASTER ##初始狀態,默認,選舉產生後才能夠升級爲Master ,這裏明肯定義其爲Master## interface eth1 ##選舉經過那個網卡接口## virtual_router_id 10 ##虛擬路由的ID號,通常不大於255,可選IP最後一段使用## priority 100 ##初始優先級,選舉過程當中判斷的依據,和路由的概念同樣## advert_int 1 ##檢查間隔,默認1s## authentication { ##認證機制## auth_type PASS ##認證方式,PASS爲明文## auth_pass ipython ##認證密碼## } virtual_ipaddress { ##虛擬地址池## 1.1.1.100 } } ###後面的配置參數 先刪刪掉吧###
配置Backup 配置以下:運維
[root@nginx-two keepalived-1.2.13]# cat /software/keepalived/etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { itchenyi@gmail.com } notification_email_from itchenyi@gmail.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id nginx-two } vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 20 priority 50 advert_int 1 authentication { auth_type PASS auth_pass ipython } virtual_ipaddress { 1.1.1.100 } } ###其餘配置:#### nopreempt 設置爲不搶佔,這個配置只能設置在state爲BACKUP的節點上,而且這個機器的優先級必須比另外一臺高 preempt_delay 搶佔延遲,默認5分鐘 debug debug級別 notify_master 切換到Master時執行的腳本 ##start## [root@Nginx-one keepalived-1.2.13]# service keepalived start Starting keepalived: [ OK ] ###觀察其日誌文件### [root@Nginx-one keepalived-1.2.13]# tail -f /var/log/messages Aug 3 00:02:12 Nginx-one Keepalived[8177]: Starting Keepalived v1.2.13 (08/03,2014) Aug 3 00:02:12 Nginx-one Keepalived[8178]: Starting Healthcheck child process, pid=8180 Aug 3 00:02:12 Nginx-one Keepalived[8178]: Starting VRRP child process, pid=8181 ####當前的IP地址#### Aug 3 00:02:13 Nginx-one Keepalived_vrrp[8181]: Netlink reflector reports IP 1.1.1.10 added Aug 3 00: