天天看點

Ubuntu建構LVS+Keepalived高可用負載均衡叢集【生産環境部署】

系統版本:Ubuntu 14.04

LVS1實體IP:14.17.64.2   初始接管VIP:14.17.64.13

LVS2實體IP:14.17.64.3   初始接管VIP:14.17.64.14

真實web伺服器IP:14.17.64.4-12

實作效果:去往14.17.64.13或14的封包,轉發給14.17.64.4-12中的一台伺服器處理,實作負載均衡。

要求1:當一台真實web伺服器故障後,自動把該IP從負載均衡中踢除,恢複後自動加入叢集。

要求2:當一台LVS伺服器故障後,正常的LVS伺服器會接管故障LVS伺服器上的VIP,故障恢複後自動搶占回VIP,繼續負載分擔。

#aptitude install ipvsadm          #安裝lvs

#aptitude install keepalived      #安裝keepalived

#配置檔案目錄/etc/keepalived/keepalived.conf,預設并沒有配置檔案,需要手動建立。

此處是單台LVS上keepalived.conf的配置,另一台LVS上的keepalived.conf的配置檔案,隻需把下列紅色與藍色字型參數對換一下即可。

配置檔案如下:

! Configuration File for keepalived

vrrp_instance VI_1 {            #定義一個執行個體,keepalived間的高可用隻能接管相同執行個體名稱

    stateMASTER                 #指定Keepalived的角色,MASTER表示此主機是主伺服器 BACKUP表示此主機是備用伺服器,是以設定priority時要注意MASTER比BACKUP高。

    interface p1p1              #指定監測網絡的接口,當LVS接管時,将會把IP位址添加到該網卡上。

    virtual_router_id 51        #虛拟路由辨別,同一個vrrp執行個體使用唯一的辨別,同一個vrrp_instance下,MASTER和BACKUP必須一緻。

    priority120                 #指定這個執行個體優先級

advert_int 1                 #心跳封包發送間隔

#notify_master/path/xx.sh    #這個執行個體切換為master時執行的腳本

#notify_backup /path/xx.sh   #這個執行個體切換為backup時執行的腳本

#track_interface{            #設定額外的監控,裡面某個網卡故障也會進行切換,這個一般用來監控上行鍊路

#eth1

#}

    authentication {

        auth_type PASS          #設定驗證類型,主要有PASS和AH兩種

        auth_pass 1111          #設定驗證密碼,同一個vrrp_instance下,MASTER和BACKUP的密碼必須一緻才能正常通信

    }

    virtual_ipaddress {         #設定虛拟IP位址,可以設定多個虛拟IP位址,每行一個

     14.17.64.13

}

vrrp_instance VI_2 {            #定義另一個執行個體

    state BACKUP

    interface p1p1

    virtual_router_id 52

    priority 80

    advert_int 1

        auth_type PASS

        auth_pass 1111

    virtual_ipaddress {

          14.17.64.14

virtual_server 14.17.64.13 0 {     #設定虛拟伺服器,需要指定虛拟IP位址和服務端口,IP與端口之間用空格隔開 

    delay_loop 6                   #設定運作情況檢查時間,機關是秒

    lb_algo wrr                    #設定負載調試算法,這裡設定為wrr即權重論詢算法

    lb_kind DR                     #設定LVS實作負載均衡的機制,有NAT,TUN和DR三個模式可選

    persistence_timeout 50         #設定會話保持時間,機關是秒

    protocol TCP                   #指定轉發協定類型,有TCP和UDP兩種

    real_server 14.17.64.4 0 {     #配置服務節點1,需要指定real server的真實IP位址和端口

        weight 1                   #配置服務節點的權值,

        TCP_CHECK {

        connect_timeout 8          #表示8秒無響應逾時

        nb_get_retry 3             #表示重試次數

        delay_before_retry 3       #表示重試間隔

        connect_port 80            #使用80端口進行保活

        }

         }

    real_server 14.17.64.5 0 {

        weight 1             

        connect_timeout 8    

        nb_get_retry 3       

        delay_before_retry 3 

        #connect_port 80        

         }       

#更多real_server略掉。

virtual_server 14.17.64.14 0 {    #設定虛拟伺服器,需要指定虛拟IP位址和服務端口,IP與端口之間用空格隔開

    delay_loop 6                  #設定運作情況檢查時間,機關是秒

    lb_algo wrr                   #設定負載調試算法,這裡設定為wrr即權重論詢算法

    lb_kind DR                    #設定LVS實作負載均衡的機制,有NAT,TUN和DR三個模式可選

    persistence_timeout 50        #設定會話保持時間,機關是秒

    protocol TCP                  #指定轉發協定類型,有TCP和UDP兩種

    real_server 14.17.64.4 0 {    #配置服務節點1,需要指定real server的真實IP位址和端口

        weight 1                  #配置服務節點的權值,

        connect_timeout 8         #表示8秒無響應逾時

        nb_get_retry 3            #表示重試次數

        delay_before_retry 3      #表示重試間隔

        connect_port 80        

        connect_timeout 8     

#更多real_server略掉

    由于是線上環境,我不能通過關閉機器或網卡進行測試,但是他保活是通過tcp 80端口來保活的,是以隻需關閉真實伺服器上的http服務就OK。

如下所示,關掉nginx服務後,果真從lvs負載裡踢出了。

root@ubuntu:/etc/keepalived# ipvsadm-L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  14.17.64.13:0 wrr persistent50

  -> 14.17.64.4:0                 Route   1     0          0        

  -> 14.17.64.5:0                 Route   1     0          0        

  -> 14.17.64.6:0                 Route   1     0          0        

  -> 14.17.64.7:0                 Route   1     3          0         

  -> 14.17.64.8:0                 Route   1     0          0        

  -> 14.17.64.9:0                 Route   1     0          0        

  -> 14.17.64.10:0                Route   1     2          1        

  -> 14.17.64.11:0                Route   1     1          1        

  -> 14.17.64.12:0                Route   1     0          0        

TCP  14.17.64.14:0 wrr persistent50

  -> 14.17.64.4:0                 Route   1     0          0        

  -> 14.17.64.5:0                 Route   1      0         0        

  -> 14.17.64.7:0                 Route   1     0          0        

  -> 14.17.64.10:0                Route   1     0          0        

  -> 14.17.64.11:0                Route   1     0          0        

  -> 14.17.64.12:0                Route   1      0         0        

root@ubuntu:/etc/keepalived# /etc/init.d/nginxstop

  -> 14.17.64.7:0                 Route   1     3          0        

  -> 14.17.64.6:0                 Route   1     0          0        

  -> 14.17.64.9:0                 Route   1     0          0         

  -> 14.17.64.12:0                Route   1     0          0  

啟動真實伺服器上nginx後,該真實伺服器又加入ipvsadm轉發規則中。

root@ubuntu:/etc/keepalived# /etc/init.d/nginxstart

  -> 14.17.64.5:0                 Route   1     0          0        

  -> 14.17.64.10:0                Route   1     1          1        

  -> 14.17.64.11:0                Route   1      0         0        

  -> 14.17.64.5:0                 Route   1     0          0        

  -> 14.17.64.9:0                 Route  1      0          0        

從測試結果得知,keepalived真實伺服器保活測試成功。

由于都是在IDC機房伺服器上操作,不可能斷掉網卡,是以重新開機一台LVS伺服器。

VIP接管檢視:

其中一台LVS接管了14.17.64.14:

root@ubuntu:~# ip add |grep14.17.64

    inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1

    inet 14.17.64.14/32 scopeglobal p1p1

另一台LVS接管了14.17.64.13:

root@ubuntu:/etc/keepalived# ipadd |grep 14.17.64

    inet 14.17.64.3/24 brd14.17.64.255 scope global p1p1

    inet 14.17.64.13/32 scopeglobal p1p1

把ipvsadm和keepalived加入開機自啟動:

#cat  /etc/rc.local

ipvsadm

/etc/init.d/keepalived start

重新開機14.17.64.3伺服器檢視VIP切換情況:

經過測試,重新開機幾秒鐘後,14.17.64.2伺服器就把VIP 14.17.64.13接管了過來。同時使用ssh登入14.17.64.13測試,能夠正常的轉發。

root@ubuntu:~# ip add|grep 14.17.64

root@ubuntu:~# ipvsadm -L -c      #從這兒可以看出,14.17.64.13轉發到10真實伺服器上。

IPVS connection entries

pro expire state      source             virtual            destination

TCP 14:58  ESTABLISHED242.103.143.219.broad.bj.bj.dynamic.163data.com.cn:54106 14.17.64.13:62222  14.17.64.10:62222

在lvs伺服器重新啟動之後,還會把VIP搶占回來

到此,LVS+Keepalived高可用搭建完成,并能實作多端口的轉發(即轉發所有TCP端口)。

思考:

此處隻部署了兩台LVS,如果要部署更多LVS,也是同樣的配置,因為keepalived的心跳封包是廣播的,是以隻要在同一個區域網路内,無論多少個keepalived程式都能夠進行選舉與VIP接管。

     本文轉自楊雲1028 51CTO部落格,原文連結:http://blog.51cto.com/yangrong/1575909,如需轉載請自行聯系原作者

下一篇: 軟體集

繼續閱讀