1. 程式人生 > >Keepalived高可用叢集應用實踐

Keepalived高可用叢集應用實踐

一,Keepalived高可用軟體

  1,Keepalived介紹

  1.1 Keepalived軟體起初是專門為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。

  1.2 Keepalived軟體主要是通過VRRP協議實現高可用功能的。

  2,Keepalived服務三個重要功能

    2.1 管理LVS負載均衡軟體

    2.2 實現對LVS叢集節點健康檢查功能(healthcheck)

    2.3 作為系統網路服務的高可用功能(failover)

  3,Keepalived高可用故障切換原理

    3.1 Keepalived高可用服務之間的故障切換轉移,是通過VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗餘協議)來實現的。

    3.2 在Keepalived服務正常工作時,主Master節點會不斷地向備節點發送(多播的方式)心跳訊息,用以告訴備Backup節點自己還活著,當主Master節點發生故障時,就無法傳送心跳訊息,備節點也就因此無法繼續檢測到來自主Master節點的心跳了,於是呼叫自身的接管程式,接管主Master節點的IP資源及服務。而當主Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。

    bond0是網絡卡繫結高可用 

二,Keepalived高可用服務搭建準備

  2.1 環境準備

  

HOSTNAME

IP

說明

lb01

192.168.200.138

Keepalived主伺服器(Nginx主負載均衡器)

lb02

192.168.200.130

Keepalived備伺服器(Nginx備負載均衡器)

web01

192.168.200.136

web01伺服器

web02

192.168.200.137

web02伺服器

  2.2 安裝Keepalived軟體

    [[email protected] ~]# yum -y install keepalived

    [[email protected] ~]# rpm -qa keepalived

      keepalived-1.2.7-3.el6.x86_64

    注:上述安裝過程需要在lb01和lb02兩臺伺服器上同時安裝。

  2.3 啟動Keepalived服務並檢查

    [[email protected] ~]# /etc/init.d/keepalived start

    Starting keepalived:                                       [  OK  ]

    [[email protected] ~]# ps -ef | grep keep | grep -v grep

    root       7111      1  0 11:18 ?        00:00:00 /usr/sbin/keepalived -D

    root       7114   7111  0 11:18 ?        00:00:00 /usr/sbin/keepalived -D

    root       7117   7111  0 11:18 ?        00:00:00 /usr/sbin/keepalived -D

 

    注:啟動後有3個Keepalived程序表示安裝正確

 

    [[email protected] ~]# ip add | grep 192.168

        inet 192.168.0.221/24 brd 192.168.0.255 scope global eth0

        inet 192.168.200.16/32 scope global eth0

        inet 192.168.200.17/32 scope global eth0

        inet 192.168.200.18/32 scope global eth0

      注:預設情況會啟動三個VIP地址

    

      [[email protected] ~]# /etc/init.d/keepalived stop

      Stopping keepalived:                                       [  OK  ]

      注:測試完畢後關閉服務,上述測試需要同時在lb01和lb02兩臺伺服器上進行

  2.4 Keepalived配置檔案說明

  2.4.1 全域性定義(Global Definitions)部分

    [[email protected] ~]# head -13 /etc/keepalived/keepalived.conf | cat -n

        1  ! Configuration File for keepalived

        2  

     3  global_defs {

        4     notification_email {

               5       [email protected]

               6       [email protected]

               7       [email protected]

               8     }

               9     notification_email_from [email protected]

              10     smtp_server 192.168.200.1

              11     smtp_connect_timeout 30

              12     router_id LVS_DEVEL

              13  }

      基礎引數說明:

      第1行是註釋,!開頭和#號開發一樣,都是註釋。
      第2行是空行。
      第3~8行是定義服務故障報警的Email地址。作用是當服務發生切換或RS節點等有故障時,發報警郵件。這幾行是可選配置,notification_email指定在Keepalived發生事件時,需要傳送的Email地址,可以有多個,每行一個。
      第9行是指定傳送郵件的傳送人,即發件人地址,也是可選的配置。
      第10行smtp_server指定傳送郵件的smtp伺服器,如果本機開啟了sendmail或postfix,就可以使用上面預設配置實現郵件傳送,也是可選配置。
      第11行smtp_connect_timeout是連線smtp的超時時間,也是可選配置。

      注意:
      第4~11行所有和郵件報警相關的引數均可以不配,在實際工作中會將監控的任務交給更加擅長監控報警的Nagios或Zabbix軟體。

      第12行是Keepalived伺服器的路由標識(router_id).在一個區域網內,這個標識(router_id)應該是唯一的。

   2.4.2 VRRP例項定義區塊(VRRP instance(s))部分

    [[email protected] ~]# sed -n '15,30{=;p}' /etc/keepalived/keepalived.conf | xargs -L2

    15 vrrp_instance VI_1 {

    16 state MASTER

    17 interface eth0

    18 virtual_router_id 51

    19 priority 100

    20 advert_int 1

    21 authentication {

    22 auth_type PASS

    23 auth_pass 1111

    24 }

    25 virtual_ipaddress {

    26 192.168.200.16

    27 192.168.200.17

    28 192.168.200.18

    29 }

    30 }

    

引數說明:

第15行表示定義一個vrrp_instance例項,名字是VI_1,每個vrrp_instance例項可以認為是Keepalived服務的一個例項或者作為一個業務服務,在Keepalived服務配置中,這樣的vrrp_instance例項可以有多個。注意,存在於主節點中的vrrp_instance例項在備節點中也要存在,這樣才能實現故障切換接管。

第16行state MASTER表示當前例項VI_1的角色狀態,當前角色為MASTER,這個狀態只能有MASTER和BACKUP兩種狀態,並且需要大寫這些字元。其中MASTER為正式工作的狀態,BACKUP為備用的狀態。當MASTER所在的伺服器故障或失效時,BACKUP所在的伺服器會接管故障的MASTER繼續提供服務。

第17行interface為網路通訊介面。為對外提供服務的網路介面,如eth0,eth1。當前主流的伺服器都有2~4個網路介面,在選擇服務介面時,要搞清楚了。

第18行virtual_router_id為虛擬路由ID標識,這個標識最好是一個數字,並且要在一個keepalived.conf配置中是唯一的。但是MASTER和BACKUP配置中相同例項的virtual_router_id又必須是一致的,否則將出現腦裂問題。

第19行priority為優先順序,其後面的數值也是一個數字,數字越大,表示例項優先順序越高。在同一個vrrp_instance例項裡,MASTER的優先順序配置要高於BACKUP的。若MASTER的priority值為150,那麼BACKUP的priority必須小於150,一般建議間隔50以上為佳,例如:設定BACKUP的priority為100或更小的數值。

第20行advert_int為同步通知間隔。MASTER與BACKUP之間通訊檢查的時間間隔,單位為秒,預設為1.

第21~24行authentication為許可權認證配置。包含認證型別(auth_type)和認證密碼(auth_pass)。認證型別有PASS(Simple Passwd(suggested)),AH(IPSEC(not recommended))兩種,官方推薦使用的型別為PASS。驗證密碼為明文方式,最好長度不要超過8個字元,建議用4位數字,同一vrrp例項的MASTER與BACKUP使用相同的密碼才能正常通訊。

第25 ~ 29 行virtual_ipaddress為虛擬IP地址。可以配置多個IP地址,每個地址佔一行,配置時最好明確指定子網掩碼以及虛擬IP繫結的網路介面。否則,子網掩碼預設是32位,繫結的介面和前面的interface引數配置的一致。注意,這裡的虛擬IP就是在工作中需要和域名繫結的IP,即和配置的高可用服務監聽的IP要保持一致!