Linux下Keepalived安裝與配置

  • 簡介
    • 負載平衡是一種在真實服務器集羣中分配IP流量的方法,可提供一個或多個高度可用的虛擬服務。在設計負載均衡拓撲時,重要的是要考慮負載均衡器自己的可用性以及它背後的真實服務器。用C編寫的相似於layer3, 4 & 7交換機制軟件,具有咱們平時說的第3層、第4層和第7層交換機的功能。
    • Keepalived爲負載平衡和高可用性提供了框架。負載平衡框架依賴於衆所周知且普遍使用的Linux虛擬服務器(IPVS)內核模塊,該模塊提供第4層負載平衡。Keepalived實現了一組健康檢查器,以根據其健康動態地自適應地維護和管理負載平衡的服務器池。虛擬冗餘路由協議(VRRP)實現高可用性。VRRP是路由器故障轉移的基礎磚塊。此外,keepalived實現了一組掛鉤到VRRP有限狀態機,提供低級別和高速協議交互。每一個Keepalived框架能夠獨立使用或一塊兒使用,以提供彈性基礎設施。
    • 在這種狀況下,負載平衡器也能夠被稱爲導向器LVS路由器
    • 簡而言之,Keepalived提供了兩個主要功能:
    • 健康檢查LVS系統
    • 實施VRRPv2堆棧以處理負載均衡器故障轉移
  • Keepalived使用四個Linux內核組件:
    • LVS框架:使用getsockopt和setsockopt調用來獲取和設置套接字上的選項。
    • Netfilter框架:支持NAT和假裝的IPVS代碼。
    • Netlink接口:設置和刪除網絡接口上的VRRP虛擬IP。
    • 組播:將VRRP通告發送到保留的VRRP MULTICAST組(224.0.0.18)。

Keepalived體系結構

  • 上圖是Keepalived的功能體系結構,大體分兩層:用戶空間(user space)和內核空間(kernel space)。
  • 內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其餘相關的網絡功能)兩個部份。
  • 用戶空間
    • WatchDog:負載監控checkers和VRRP進程的情況
    • VRRP Stack:負載負載均衡器之間的失敗切換FailOver,若是隻用一個負載均稀器,則VRRP不是必須的。
    • Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能。換言之,能夠沒有VRRP Stack,但健康檢查healthchecking是必定要有的。
    • IPVS wrapper:用戶發送設定的規則到內核ipvs代碼
    • Netlink Reflector:用來設定vrrp的vip地址等。
  • Keepalived的全部功能是配置keepalived.conf文件來實現的。

 

  • 安裝keepalived
  • yum 安裝
安裝依賴包
[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
[root@localhost ~]# yum install -y keepalived
  • 初始化及啓動
[root@localhost ~]# systemctl start keepalived   //啓動keepalived
[root@localhost ~]# systemctl enable keepalived  //加入開機啓動keepalived
[root@localhost ~]# systemctl restart keepalived  //從新啓動keepalived
[root@localhost ~]# systemctl status keepalived   //查看keepalived狀態
[root@master src]# pwd
/usr/local/src
[root@master src]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
[root@master src]# tar xvf keepalived-2.0.7.tar.gz
[root@master src]# cd keepalived-2.0.7
[root@master keepalived-2.0.7]# ./configure --prefix=/usr/local/keepalived
[root@master keepalived-2.0.7]# make && make install
  • 完成後會在如下路徑生成:
/usr/local/etc/keepalived/keepalived.conf
/usr/local/etc/sysconfig/keepalived
/usr/local/sbin/keepalived
  • 初始化及啓動
# keepalived啓動腳本變量引用文件,默認文件路徑是/etc/sysconfig/,也能夠不作軟連接,直接修改啓動腳本中文件路徑便可(安裝目錄下)
[root@localhost /]# cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived 

# 將keepalived主程序加入到環境變量(安裝目錄下)
[root@localhost /]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

# keepalived啓動腳本(源碼目錄下),放到/etc/init.d/目錄下就可使用service命令便捷調用
[root@localhost /]# cp /usr/local/src/keepalived-2.0.7/keepalived/etc/init.d/keepalived  /etc/init.d/keepalived

# 將配置文件放到默認路徑下
[root@localhost /]# mkdir /etc/keepalived
[root@localhost /]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  • 加爲系統服務:chkconfig –add keepalived
  • 開機啓動:chkconfig keepalived on
  • 查看開機啓動的服務:chkconfig –list
  • 啓動、關閉、重啓service keepalived start|stop|restart

 

  • keepalived.conf配置文件說明html

    • keepalived服務安裝完成以後,後面的主要工做就是在keepalived.conf文件中配置HA和負載均衡。一個功能比較完整的經常使用的keepalived配置文件,主要包含三塊:全局定義塊、VRRP實例定義塊和虛擬服務器定義塊。全局定義塊是必須的,若是keepalived只用來作ha,虛擬服務器是可選的。下面是一個功能比較完整的配置文件模板:
#全局定義塊
global_defs {
    # 郵件通知配置
    notification_email {
        email1
        email2
    }
    notification_email_from email
    smtp_server host
    smtp_connect_timeout num

    lvs_id string
    router_id string    ## 標識本節點的字條串,一般爲hostname
}

#VRRP 實例定義塊
vrrp_sync_group string { 
    group {
        string
        string
    }
}

vrrp_instance string {
    state MASTER|BACKUP
    virtual_router_id num
    interface string
    mcast_src_ip @IP 
    priority num
    advert_int num
    nopreempt
    smtp_alert
    lvs_sync_daemon_interface string 
    authentication {
        auth_type PASS|AH
        auth_pass string
    }

    virtual_ipaddress {  # Block limited to 20 IP addresses @IP
        @IP
        @IP
    }
}

#虛擬服務器定義塊
virtual_server (@IP PORT)|(fwmark num) { 
    delay_loop num
    lb_algo rr|wrr|lc|wlc|sh|dh|lblc 
    lb_kind NAT|DR|TUN
    persistence_timeout num 
    protocol TCP|UDP
    real_server @IP PORT { 
        weight num
        notify_down /path/script.sh
        TCP_CHECK { 
            connect_port num 
            connect_timeout num
        }
    }

    real_server @IP PORT {
        weight num
        MISC_CHECK {
            misc_path /path_to_script/script.sh(or misc_path 「/path_to_script/script.sh <arg_list>」)
        }
    }

    real_server @IP PORT {
        weight num
        HTTP_GET|SSL_GET {
            url { 
                # You can add multiple url block path alphanum
                digest alphanum
            }
            connect_port num
            connect_timeout num 
            nb_get_retry num 
            delay_before_retry num
        }
    }
}
  • 全局定義塊ios

  • email通知(notification_email、smtp_server、smtp_connect_timeout):用於服務有故障時發送郵件報警,可選項,不建議用。須要系統開啓sendmail服務,建議用第三獨立監控服務,如用nagios全面監控代替。
  • lvs_id:lvs負載均衡器標識,在一個網絡內,它的值應該是惟一的。
  • router_id:用戶標識本節點的名稱,一般爲hostname
  • 花括號{}:用來分隔定義塊,必須成對出現。若是寫漏了,keepalived運行時不會獲得預期的結果。因爲定義塊存在嵌套關係,所以很容易遺漏結尾處的花括號,這點須要特別注意。

 

  • VRRP實例定義塊算法

    • vrrp_sync_group:同步vrrp級,用於肯定失敗切換(FailOver)包含的路由實例個數。即在有2個負載均衡器的場景,一旦某個負載均衡器失效,須要自動切換到另一個負載均衡器的實例是哪
    • group:至少要包含一個vrrp實例,vrrp實例名稱必須和vrrp_instance定義的一致
    • vrrp_instance:vrrp實例名
      1> state:實例狀態,只有MASTER 和 BACKUP兩種狀態,而且須要所有大寫。搶佔模式下,其中MASTER爲工做狀態,BACKUP爲備用狀態。當MASTER所在的服務器失效時,BACKUP所在的服務會自動把它的狀態由BACKUP切換到MASTER狀態。當失效的MASTER所在的服務恢復時,BACKUP從MASTER恢復到BACKUP狀態。
      2> interface:對外提供服務的網卡接口,即VIP綁定的網卡接口。如:eth0,eth1。當前主流的服務器都有2個或2個以上的接口(分別對應外網和內網),在選擇網卡接口時,必定要覈實清楚。
      3> mcast_src_ip:本機IP地址
      4> virtual_router_id:虛擬路由的ID號,每一個節點設置必須同樣,可選擇IP最後一段使用,相同的 VRID 爲一個組,他將決定多播的 MAC 地址。
      5> priority:節點優先級,取值範圍0~254,MASTER要比BACKUP高
      6> advert_int:MASTER與BACKUP節點間同步檢查的時間間隔,單位爲秒
      7> lvs_sync_daemon_inteface:負載均衡器之間的監控接口,相似於 HA HeartBeat 的心跳線。但它的機制優於 Heartbeat,由於它沒有「裂腦」這個問題,它是以優先級這個機制來規避這個麻煩的。在 DR 模式中,lvs_sync_daemon_inteface與服務接口interface使用同一個網絡接口
      8> authentication:驗證類型和驗證密碼。類型主要有 PASS、AH 兩種,一般使用PASS類型,聽說AH使用時有問題。驗證密碼爲明文,同一vrrp 實例MASTER與BACKUP使用相同的密碼才能正常通訊。
      9> smtp_alert:有故障時是否激活郵件通知
      10> nopreempt:禁止搶佔服務。默認狀況,當MASTER服務掛掉以後,BACKUP自動升級爲MASTER並接替它的任務,當MASTER服務恢復後,升級爲MASTER的BACKUP服務又自動降爲BACKUP,把工做權交給原MASTER。當配置了nopreempt,MASTER從掛掉到恢復,再也不將服務搶佔過來。
      11> virtual_ipaddress:虛擬IP地址池,能夠有多個IP,每一個IP佔一行,不須要指定子網掩碼。注意:這個IP必須與咱們的設定的vip保持一致。

 

  • 虛擬服務器virtual_server定義塊服務器

  • virtual_server:定義一個虛擬服務器,這個ip是virtual_ipaddress中定義的其中一個,後面一個空格,而後加上虛擬服務的端口號。
    1> delay_loop:健康檢查時間間隔,單位:秒
    2> lb_algo:負載均衡調度算法,互聯網應用經常使用方式爲wlc或rr
    3> lb_kind:負載均衡轉發規則。包括DR、NAT、TUN 3種,通常使用路由(DR)轉發規則。
    4> persistence_timeout:http服務會話保持時間,單位:秒
    5> protocol:轉發協議,分爲TCP和UDP兩種
  1. real_server:真實服務器IP和端口,能夠定義多個 1> weight:負載權重,值越大,轉發的優先級越高 2> notify_down:服務中止後執行的腳本 3> TCP_CHECK:服務有效性檢測 * connect_port:服務鏈接端口 * connect_timeout:服務鏈接超時時長,單位:秒 * nb_get_retry:服務鏈接失敗重試次數 * delay_before_retry:重試鏈接間隔,單位:秒
相關文章
相關標籤/搜索