Keepalived 工做原理和配置說明

keepalived是什麼:
node

簡單來講 Keepalived 的功能
功能1.使用VRRP協議 來控制一組高可用(HA) 主備系統,一臺master工做,一臺slave熱備;master失效後slave當即接替工做
功能2.監控 工做集羣中的主機  ,若是有一臺服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除
         當服務器工做正常後Keepalived自動將web服務器加入到服務器羣中

mysql

         keepalived是集羣管理中保證集羣高可用的一個服務軟件,其功能相似於heartbeat,用來防止單點故障。
     可是它通常不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一塊兒工做來達到集羣的高可用。nginx

      1. Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,能夠利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。Keepalived是VRRP的完美實現.web

   2.Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。
 

keepalived工做原理:

(功能1)keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議sql

虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup。master上面有一個對外提供服務的vip(該路由器所在局域網內其餘機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就須要根據VRRP的優先級選舉一個backup當master。這樣的話就能夠保證路由器的高可用了。
       MASTER實現針對虛擬路由器IP的各類網絡功能,如ARP請求,ICMP,以及數據的轉發等;其餘設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。當主機失效時,BACKUP將接管原先MASTER的網絡功能
       配置VRRP協議時須要配置每一個路由器的虛擬路由器ID(VRID)優先權值,使用VRID將路由器進行分組,
具備相同VRID值的路由器爲同一個組,VRID是一個0~255的正整數;
同一組中的路由器經過使用優先權值來選舉MASTER,優先權大者爲MASTER,優先權也是一個0~255的正整數(255最大)。
緩存

 MASTER選舉:
若是對外的虛擬路由器IP就是路由器自己配置的IP地址的話,該路由器始終都是MASTER;
不然若是不具有虛擬IP的話,將進行MASTER選舉,各路由器都宣告本身是MASTER,發送VRRP通告信息;
若是收到其餘機器的發來的通告信息的優先級比本身高,將轉回BACKUP狀態;
若是優先級相等的話,將比較路由器的實際IP,IP值較大的優先權高;
不過若是對外的虛擬路由器IP就是路由器自己的IP的話,該路由器始終將是MASTER,這時的優先級值爲255。
服務器

 

keepalived主要有三個模塊,分別是core、check和vrrp。
core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。
check負責健康檢查,包括常見的各類檢查方式。
vrrp模塊是來實現VRRP協議的。
網絡

 

 

 (功能2)其工做在OSI七層協議的Layer3,4,7層。工做在IP/TCP協議棧的IP層,TCP層,及應用層。
原理分別以下:
Layer3網絡層:
Keepalived使用Layer3的方式工做式時,Keepalived會按期向服務器羣中的服務器發送一個ICMP的數據包(既咱們平時用的Ping程序),若是發現某臺服務的IP地址沒有激活,Keepalived便報告這臺服務器失效,並將它從服務器羣中剔除,這種狀況的典型例子是某臺服務器被非法關機。Layer3的方式是以服務器的IP地址是否有效做爲服務器工做正常與否的標準。
Layer4傳輸層:
若是您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態來決定服務器工做正常與否。如web server的服務端口通常是80,若是Keepalived檢測到80端口沒有啓動,則Keepalived將把這臺服務器從服務器羣中剔除。

Layer7應用層:
Layer7就是工做在具體的應用層了,比Layer3,Layer4要複雜一點,在網絡上佔用的帶寬也要大一些。Keepalived將根據用戶的設定檢查服務器程序的運行是否正常,若是與用戶的設定不相符,則Keepalived將把服務器從服務器羣中剔除。
 

 

 

 

 

keepalived的配置文件:

keepalived只有一個配置文件keepalived.conf,裏面主要包括如下幾個配置區域,分別是
global_defs、            故障時默認郵件發送 參數
static_ipaddress、    設置本節點的IP              若是你的機器上已經配置了IP和路由,那麼這兩個區域能夠不用配置
static_routes、          設置本節點路由信息       若是你的機器上已經配置了IP和路由,那麼這兩個區域能夠不用配置
vrrp_script、              用來作健康檢查,檢查失敗時會將vrrp_instancepriority減小相應的值。負載均衡

vrrp_instance             用來定義對外提供服務的VIP區域及其相關屬性
virtual_server            通常在超大型的LVS中用到,通常LVS用不到,略過網站

 

 

 
1、全局配置

 

全局配置又包括兩個子配置

全局定義(global definition)

靜態路由配置(static ipaddress/routes)

 

實戰階段:

1.全局定義(global definition)

global_defs {
notification_email                                                    發生諸如切換操做時發送email通知郵件地址 能夠多個每行一個
{
   admin@example.com
}
notification_email_from admin@example.com         發送通知郵件時郵件源地址是誰

smtp_server 127.0.0.1                                            發送email時使用的smtp服務器地址

stmp_connect_timeout 30                                        鏈接smtp鏈接超時時間

router_id node1                                                        機器標識 節點名標識,主要用於通知中 

}

2.靜態地址和路由配置

static_ipaddress {
     10.210.214.163/24 brd 10.210.214.255 dev eth0                 靜態ip配置        這裏實際上和系統裏面命令配置IP地址和路由同樣
...}
static_routes {
     10.0.0.0/8 via 10.210.214.1 dev eth0                                    靜態路由配置
...}
以上分別表示啓動/關閉keepalived時在本機執行的以下命令:

# /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0
# /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0
注意: 請忽略這兩個區域,通常這個區域不須要配置,由於我堅信你的機器確定已經配置了IP和路由。

 

2、VRRPD配置

 

    VRRPD配置包括三個類

   VRRP實例(VRRP Instance)

   VRRP同步組(synchroization group)

   VRRP腳本

 

1.VRRP實例(instance)

vrrp_instance http {
state   MASTER           實例初始狀態(還要根據priority值肯定)能夠是MASTER 或 BACKUP
                                               若是設置了nopreempt 則這個值不起做用,主從根據priority肯定
interface eth0               實例節點固有IP(非VIP)的網卡,用來發VRRP包
dont_track_primary     忽略VRRP網卡錯誤。(默認未設置)
track_interface {           監控如下網卡,若是任何一個不通就會切換到故障FALT狀態。(可選項)
     eth0 eth1
}
mcast_src_ip <IPADDR>     
vrrp組播包的源地址,默認源地址爲master的IP 這裏至關於heartbeat的心跳端口
                                                  若是沒有設置那麼就用默認的綁定的網卡的IP,也就是interface指定的IP地址
garp_master_delay 10          當切換爲Master狀態後多久更新ARP緩存
virtual_router_id 51                虛擬路由標識即VRID  相同的VRID爲一個組 他將決定多播的MAC地址

priority 100                             定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER 的優先級必須大於BACKUP。
                                                 
這個選項的值最好高於其餘機器50個點,該項範圍是1-255
advert_int 1                           檢查間隔默認爲1秒

authentication {                     設置認證

      auth_type PASS                   認證方式能夠是PASS或AH兩種認證方式
      autp_pass 1234                    認證密碼
}


 設置虛擬IP 能夠設置多個
virtual_ipaddress {                                  

#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>

192.168.200.17/24 dev eth1

192.168.200.18/24 dev eth2 label eth2:1

}

 

設置虛擬路由的地方
virtual_routes {

# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab

src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1

192.168.110.0/24 via 192.168.200.254 dev eth1

192.168.111.0/24 dev eth2

192.168.112.0/24 via 192.168.100.254

}

nopreempt                      設置不搶佔,這裏只能設置在state爲backup的節點上
                                         並且這個節點的優先級必須別另外的高。當主MASTER恢復後不搶佔資源

preemtp_delay 300       搶佔延遲 master啓動多久以後進行接管資源(VIP/Route信息等)

debug                               debug級別

}

注意事項: 設置state爲 雙備原理
一般若是master服務死掉後backup會變成master,可是當master服務又好了的時候 master此時會搶佔VIP.
這樣就會發生兩次切換對業務繁忙的網站來講是很差的。
因此咱們要在配置文件加入 nopreempt 非搶佔 參數,可是這個參數只能用於state 爲backup,
故咱們在用HA的時候最好master 和backup的state都設置成backup 讓其經過priority來競爭。
 
這樣加上nopreempt的時候,即便master又好了,依舊不會切換 。 
    state   nopreempt  priority
 主機  backup  設置  100
 從機  backup  不設置  50




2.VRRP同步組(synchroization group)配置

定義vrrp_intance組,使得這個組內成員動做一致。

例如兩個vrrp_instance同屬於一個vrrp_rsync_group,
那麼其中一個vrrp_instance發生故障切換時,另外一個vrrp_instance也會跟着切換(即便這個instance沒有發生故障)。

vrrp_sync_group VG_1 {
group { 
  http 
  mysql 

notify_master /path/to/to_master.sh      表示當切換到master狀態時要執行的腳本
notify_backup /path_to/to_backup.sh   表示當切換到backup狀態時要執行的腳本
notify_fault "/path/fault.sh VG_1"      表示出錯狀態時要執行的腳本
notify /path/to/notify.sh                       表示任何狀態切換時都調用該腳本,該腳本在以上三個腳本執行完成以後進行調用
smtp_alert                                          表示切換時給global defs中定義的郵件地址發送郵件通知
}

 

 

3.VRRP腳本
告訴 keepalived 在什麼狀況下切換,因此尤其重要。能夠有多個 vrrp_script
vrrp_script check_running {

script "/usr/local/bin/check_running"
定義腳本名字
interval 10
腳本執行的間隔
weight -10
腳本執行的優先級
}
若是script中的指令執行失敗,那麼相應的的優先級會減小10個點vrrp_instance
  • 若是腳本執行結果爲0,而且weight配置的值大於0,則優先級相應的增長
  • 若是腳本執行結果非0,而且weight配置的值小於0,則優先級相應的減小
  • 其餘狀況,本來配置的優先級不變,即配置文件中priority對應的值。
   
相關文章
相關標籤/搜索