keepalived 配置文件詳解

 
keepalived配置文件詳解
一個功能比較完整的keepalived的配置文件,其配置文件keepalived.conf可以包含三個文本塊:全局定義塊、VRRP實例定義塊及虛擬服務器定義塊。全局定義塊和虛擬服務器定義塊是必須的,如果在只有一個負載均衡器的場合,就不須VRRP實例定義塊。
 

 

#全局定義塊
 

global_defs {
      notification_email {           #指定keepalived在發生切換時需要發送email到的對象,一行一個
         [email protected]
      }
     notification_email_from [email protected]   #指定發件人
     smtp_server 127.0.0.1           #指定smtp服務器地址
     smtp_connect_timeout 3          #指定smtp連接超時時間
     router_id LVS_DEVEL             #運行keepalived機器的一個標識
}

#監控haproxy 進程
vrrp_script chk_haproxy {            # Requires keepalived-1.1.13
     script "killall -0 haproxy"     # widely used idiom
     interval 2                      # check every 2 seconds
     weight 2                        # add 2 points of prio if OK weight -2 #經測試keepalived 1.17版本加這個配置不能切換,最新版本1.21加上這個則可以
   

#VRRP實例定義塊
vrrp_sync_group VG_1{               #監控多個網段的實例
        group {
  inside_network                    #實例名
  outside_network
 }
 notify_master /path/xx.sh          #指定當切換到master時,執行的腳本
 netify_backup /path/xx.sh          #指定當切換到backup時,執行的腳本
 notify_fault "path/xx.sh VG_1"     #故障時執行的腳本
 notify /path/xx.sh
 smtp_alert                         #使用global_defs中提供的郵件地址和smtp服務器發送郵件通知
}
vrrp_instance inside_network {
    state BACKUP                    #指定那個爲master,那個爲backup,如果設置了nopreempt這個值不起作用,主備考priority決定

  # nopreempt                       #設置爲不搶佔注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高
    interface eth0                  #設置實例綁定的網卡
    dont_track_primary              #忽略vrrp的interface錯誤(默認不設置)
    track_interface{                #設置額外的監控,裏面那個網卡出現問題都會切換
     eth0
     eth1
    }

    mcast_src_ip                    #發送多播包的地址,如果不設置默認使用綁定網卡的primary ip
    garp_master_delay               #在切換到master狀態後,延遲進行gratuitous ARP請求
    virtual_router_id 50            #VPID標記 ,路由ID,可通過#tcpdump vrrp查看
    priority 99                     #優先級,高優先級競選爲master
    advert_int 1                    #檢查間隔,默認1秒

    preempt_delay                   #搶佔延時,默認5分鐘
    debug                           #debug級別
    authentication {                #設置認證
        auth_type PASS              #認證方式
        auth_pass 111111            #認證密碼
    }
    virtual_ipaddress {             #設置vip
        192.168.202.200
    }
}

#虛擬服務器定義塊
virtual_server 192.168.202.200 23 {
    delay_loop 6                    #健康檢查時間間隔
    lb_algo rr                      #lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR                      #負載均衡轉發規則NAT|DR|RUN
    persistence_timeout 5           #會話保持時間
    protocol TCP                    #使用的協議
    persistence_granularity <NETMASK>  #lvs會話保持粒度
    virtualhost <string>            #檢查的web服務器的虛擬主機(host:頭)   
    sorry_server<IPADDR> <port>     #備用機,所有realserver失效後啓用
    real_server 192.168.200.5 23 {
               weight 1             #默認爲1,0爲失效
               inhibit_on_failure   #在服務器健康檢查失效時,將其設爲0,而不是直接從ipvs中刪除
               notify_up <string> | <quoted-string>   #在檢測到server up後執行腳本
               notify_down <string> | <quoted-string> #在檢測到server down後執行腳本
   
               TCP_CHECK {
               connect_timeout 3    #連接超時時間
               nb_get_retry 3       #重連次數
               delay_before_retry 3 #重連間隔時間
               connect_port 23      #健康檢查的端口的端口
               bindto <ip>  
                         }
              HTTP_GET | SSL_GET{
              url{                  #檢查url,可以指定多個
              path /
              digest <string>       #檢查後的摘要信息
              status_code 200       #檢查的返回狀態碼
                 }
              connect_port <port>
              bindto <IPADD>
              connect_timeout 5
              nb_get_retry 3
              delay_before_retry 2
                              }

              SMTP_CHECK{
              host{
              connect_ip <IP ADDRESS>
              connect_port <port>  #默認檢查25端口
              bindto <IP ADDRESS>
                  }
              connect_timeout 5
              retry 3
              delay_before_retry 2
              helo_name <string> | <quoted-string>   #smtp helo請求命令參數,可選
                       }
             MISC_CHECK{
             misc_path <string> | <quoted-string> #外部腳本路徑
             misc_timeout        #腳本執行超時時間
             misc_dynamic        #如設置該項,則退出狀態碼會用來動態調整服務器的權重,返回0 正常,不修改;返回1,檢查失敗,權重改爲0;返回2-255,正常,權重設置爲:返回狀態碼-2
                       }
      }

}


 

//
●     全局定義塊

1、  email通知。作用:有故障,發郵件報警。這是可選項目,建議不用,用nagios全面監控代替之。

2、  Lvs負載均衡器標識(lvs_id)。在一個網絡內,它應該是唯一的。

3、  花括號“{}”。用來分隔定義塊,因此必須成對出現。如果寫漏了,keepalived運行時,不會得到預期的結果。由於定義塊內存在嵌套關係,因此很容易遺漏結尾處的花括號,這點要特別注意。

 

●     VRRP定義塊

1、  同步vrrp組vrrp_sync_group。作用:確定失敗切換(FailOver)包含的路由實例個數。即在有2個負載均衡器的場景,一旦某個負載均衡器失效,需要自動切換到另外一個負載均衡器的實例是哪些?

2、  實例組group.至少包含一個vrrp實例。

3、  Vrrp實例vrrp_instance.實例名出自實例組group所包含的那些名字。

(1)       實例狀態state.只有MASTER和BACKUP兩種狀態,並且需要大寫這些單詞。其中MASTER爲工作狀態,BACKUP爲備用狀態。當MASTER所在的服務器失效時,BACKUP所在的系統會自動把它的狀態有BACKUP變換成MASTER;當失效的MASTER所在的系統恢復時,BACKUP從MASTER恢復到BACKUP狀態。

(2)       通信接口interface。對外提供服務的網絡接口,如eth0,eth1.當前主流的服務器都有2個或2個以上的接口,在選擇服務接口時,一定要覈實清楚。

(3)       lvs_sync_daemon_inteface。負載均衡器之間的監控接口,類似於HA HeartBeat的心跳線。但它的機制優於Heartbeat,因爲它沒有“裂腦”這個問題,它是以優先級這個機制來規避這個麻煩的。在DR模式中,lvs_sync_daemon_inteface 與服務接口interface 使用同一個網絡接口。

(4)       虛擬路由標識virtual_router_id.這個標識是一個數字,並且同一個vrrp實例使用唯一的標識。即同一個vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同時在整個vrrp內是唯一的。

(5)       優先級priority.這是一個數字,數值愈大,優先級越高。在同一個vrrp_instance裏,MASTER 的優先級高於BACKUP。若MASTER的priority值爲150,那麼BACKUP的priority只能是140或更小的數值。

(6)       同步通知間隔 advert_int .MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位爲秒。

(7)       驗證authentication。包含驗證類型和驗證密碼。類型主要有PASS、AH兩種,通常使用的類型爲PASS,據說AH使用時有問題。驗證密碼爲明文,同一vrrp實例MASTER與BACKUP 使用相同的密碼才能正常通信。

4、  虛擬ip地址virtual_ipaddress . 可以有多個地址,每個地址佔一行,不需要指定子網掩碼。注意:這個ip必須與我們在lvs客戶端設定的vip相一致!

 

●     虛擬服務器virtual_server定義塊

虛擬服務器定義是keepalived框架最重要的項目了,是keepalived.conf必不可少的部分。

1、  虛擬服務器virtual_server. 這個ip來自於vrrp定義塊的第“4”步,後面一個空格,然後加上端口號。定義一個vip,可以實現多個tcp端口的負載均衡功能。

(1)       delay_loop。健康檢查時間間隔,單位是秒。

(2)       lb_algo. 負載均衡調度算法,互聯網應用常使用wlc或rr。

(3)       lb_kind. 負載均衡轉發規則。一般包括DR,NAT,TUN3種,在我的方案中,都使用DR的方式。

(4)       persistence_timeout.會話保持時間,單位是秒。這個選項對動態網站很有用處:當用戶從遠程用帳號進行登陸網站時,有了這個會話保持功能,就能把用戶的請求轉發給同一個應用服務器。在這裏,我們來做一個假設,假定現在有一個lvs 環境,使用DR轉發模式,真實服務器有3個,負載均衡器不啓用會話保持功能。當用戶第一次訪問的時候,他的訪問請求被負載均衡器轉給某個真實服務器,這樣他看到一個登陸頁面,第一次訪問完畢;接着他在登陸框填寫用戶名和密碼,然後提交;這時候,問題就可能出現了—登陸不能成功。因爲沒有會話保持,負載均衡器可能會把第2次的請求轉發到其他的服務器。

(5)       轉發協議protocol.一般有tcp和udp兩種。實話說,我還沒嘗試過udp協議類的轉發。

2、  真實服務器real_server.也即服務器池。Real_server的值包括ip地址和端口號。多個連續的真實ip,轉發的端口相同,是不是可以以範圍表示?需要進一步實驗。如寫成real_server 61.135.20.1-10 80 .

(1)       權重weight.權重值是一個數字,數值越大,權重越高。使用不同的權重值的目的在於爲不同性能的機器分配不同的負載,性能較好的機器,負載分擔大些;反之,性能差的機器,則分擔較少的負載,這樣就可以合理的利用不同性能的機器資源。

(2)       Tcp檢查 tcp_check

//
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章