LVS+Keepalived高可用羣集

    keepalived是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能——判斷LVS負載調度器,節點服務器的可用性,及時隔離並替換爲新的服務器,當故障主機恢復後將其從新加入羣集。算法


Keepalived的熱備方式vim

    Keepalived採用VRRP(虛擬路由冗餘協議)熱備份協議,以軟件的方式實現Linux服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案——有多臺路由組成一個熱備組,經過共用的虛擬IP地址對外提供服務;每一個熱備組內同一時刻只有一臺主路由器提供服務 ,其餘路由器處於冗餘狀態,若當前在線路由器失敗,則其餘路由器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。以下圖所示:bash

楊書凡07.png

    熱備組內的每臺路由器都有可能成爲主路由器,虛擬路由器的IP地址能夠在熱備組內的路由器之間進行轉移,因此也稱爲漂移IP地址。使用keepalived時,漂移地址的實現不須要手動創建虛接口配置文件,而是由keepalived根據配置文件自動管理。服務器


                                     


LVS+Keepalived高可用羣集
負載均衡

    Keepalived的設計目標是構建可用的LVS負載均衡羣集,能夠調用ipvsadm工具來建立虛擬服務器,管理服務器池,而不單單用來作雙機熱備。使用keepalived構建LVS羣集更加簡便易用,主要優點體如今:對LVS負載調度器實現熱備切換,提升可用性,對服務器池中的節點進行健康檢查,自動移除失效節點,恢復後再從新加入。less

    在基於LVS-Keepalived實現的LVS羣集結構中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器,本例將以DR模式的LVS羣集爲基礎,增長一臺從負載調度器,使用Keepalived來實現主、從調度器的熱備,從而構建建有負載均衡、高可用兩種能力的LVS網站羣集平臺。以下面案例圖所示:dom

   使用Keepalived構建LVS羣集時,也須要用到ipvsadm管理工具,但大部分工做會由Keepalived自動完成,不須要手動執行ipvsadm。ide


實驗案例:工具

    公司的Web平臺已採用LVS-DR負載均衡結構,但只有一個負載均衡器。爲了提升Web服務的持續可用性,要求增長一臺負載調度器,與原有的調度器實現雙擊熱備,並要求能自動管理服務器池,而不是由管理員手動添加、移除節點,以下圖所示:oop

楊書凡08.png

需求描述:

1. 將現有的LVS羣集改造爲LVS+Keepalived高可用負載均衡羣集

2. 主調度器負則分配客戶機請求,若出現故障則由從調度器自動接替服務

3. 啓用郵件通知功能,以便及時瞭解各Web節點服務器的健康情況


實驗步驟以下:

    此實驗是在上篇博客的LVS-DR基礎上新增一個從調度器,參考文檔https://blog.51cto.com/yangshufan/2065686

1. 配置主調度器

[root@localhost ~]# service ipvsadm stop        //清除原有的ipvsadm策略
ipvsadm: Clearing the current IPVS table:                  [肯定]
ipvsadm: Unloading modules:                                [肯定]
[root@localhost ~]# ipvsadm -ln                 //確認清空
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@localhost ~]# rm -f /etc/sysconfig/network-scripts/ifcfg-eth0:0   //刪除網卡eth0:0
[root@localhost ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:FB  
          inet addr:172.16.16.173  Bcast:172.16.16.255  Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:05  
          inet addr:192.168.7.173  Bcast:192.168.7.255  Mask:255.255.255.0

[root@localhost ~]# yum -y install kernel-devel openssl-devel popt-devel  //安裝支持軟件
[root@localhost ~]# tar zxf keepalived-1.2.13.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/keepalived-1.2.13/
[root@localhost keepalived-1.2.13]# ./configure --prefix=/      //安裝路徑指定爲根目錄,這樣就無需額外建立連接文件
--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64        //只有在使用LVS時,才須要指定此參數
[root@localhost keepalived-1.2.13]# make && make install
[root@localhost keepalived-1.2.13]# chkconfig --add keepalived    //添加爲系統服務
[root@localhost keepalived-1.2.13]# chkconfig keepalived on       //設置爲開機自啓動

[root@localhost keepalived-1.2.13]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak    //備份配置文件
[root@localhost keepalived]# vim keepalived.conf               //修改配置文件
global_defs {                          //此區域指定全局參數
   notification_email {                //郵件服務
     root@firewall.loc                 //收件人地址
   }
   notification_email_from ysf localhost.localdomain      //發件人姓名、地址
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS-1                     //本服務器的名稱
}

vrrp_instance VI_1 {                  //此區域指定VRRP熱備參數
    state MASTER                  //熱備狀態,MASTER表示爲主服務器
    interface eth0                //承載VIP地址的物理接口
    virtual_router_id 51          //虛擬路由器的ID號,每一個熱備組必須保持一致
    priority 100                  //優先級,數值越大,優先級越高
    advert_int 1                  //通告間隔秒數(心跳頻率)
    authentication {              //認證信息,每一個熱備組必須保持一致       
        auth_type PASS            //認證類型
        auth_pass 1111            //密碼字串
    }
    virtual_ipaddress {
        172.16.16.172             //指定漂移地址(VIP),能夠有多個
    }
}
#下面區域用來配置虛擬服務器
virtual_server 172.16.16.172 80 {         //虛擬服務器地址(VIP)、端口
    delay_loop 6                          //健康檢查的間隔秒數(秒)
    lb_algo rr                            //輪詢(rr)調度算法
    lb_kind DR                            //直接路由(DR)集羣工做模式
    nat_mask 255.255.255.0       
    persistence_timeout 50                //鏈接保持秒數
    protocol TCP                          //應用服務採用TCP協議

    real_server 172.16.16.177 80 {        //第一個Web節點的地址、端口
        weight 1                          //節點的權重
        TCP_CHECK {                       //健康檢查方式
            connect_port 80               //檢查的目標端口
            connect_timeout 3             //鏈接超時(秒)
            nb_get_retry 3                //重試次數
            delay_before_retry 3          //重試間隔(秒)
        }
    }
    real_server 172.16.16.178 80 {        //第二個Web節點的地址、端口   
       ……                               //和第一個的配置相同,省略
    }
    real_server 172.16.16.179 80 {        //第三個Web節點的地址、端口 
       ……   
    }
    real_server 172.16.16.180 80 {        //第四個Web節點的地址、端口   
       …… 
    }
}    
    
[root@localhost keepalived]# /etc/init.d/keepalived start
正在啓動 keepalived:                                      [肯定]    

[root@localhost keepalived]# ip addr show dev eth0       //查看自動添加的VIP地址
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1c:b4:fb brd ff:ff:ff:ff:ff:ff
    inet 172.16.16.173/24 brd 172.16.16.255 scope global eth0
    inet 172.16.16.172/32 scope global eth0              //自動設置的VIP地址
    inet6 fe80::20c:29ff:fe1c:b4fb/64 scope link 
       valid_lft forever preferred_lft forever

[root@localhost keepalived]# ipvsadm -ln            //自動建立虛擬服務器,添加服務器節點
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 rr
  -> 172.16.16.178:80             Route   1      0          0         
  -> 172.16.16.179:80             Route   1      0          0         
  -> 172.16.16.180:80             Route   1      0          0



2. 配置從調度器

[root@localhost ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:4D  
          inet addr:172.16.16.174  Bcast:172.16.16.255  Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:05  
          inet addr:192.168.7.174  Bcast:192.168.7.255  Mask:255.255.255.0
          
[root@localhost ~]# modprobe ip_vs          
[root@localhost ~]# yum -y install kernel-devel openssl-devel popt-devel          
[root@localhost ~]# yum -y install ipvsadm          
[root@localhost ~]# tar zxf keepalived-1.2.13.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/keepalived-1.2.13/
[root@localhost keepalived-1.2.13]# ./configure --prefix=/      
--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64       
[root@localhost keepalived-1.2.13]# make && make install
[root@localhost keepalived-1.2.13]# chkconfig --add keepalived    
[root@localhost keepalived-1.2.13]# chkconfig keepalived on       

[root@localhost ~]# cd ~             //從服務器的配置文件可從主服務器中複製
[root@localhost ~]# scp root@172.16.16.173:/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf 
root@172.16.16.173's password: 
keepalived.conf                                                         100% 1378     1.4KB/s   00:00  
[root@localhost ~]# vim /etc/keepalived/keepalived.conf    //修改其中的三項
   router_id LVS-2                     //從調度器的名稱
    state BACKUP                       //從調度器的熱備狀態
    priority 50                        //從調度器的優先級

[root@localhost keepalived]# /etc/init.d/keepalived start
正在啓動 keepalived:                                      [肯定]



3. 配置Web節點服務器

    本實驗是基於上篇實驗配置的,Web節點服務器的配置不用修改,參考文檔https://blog.51cto.com/yangshufan/2065686


4. LVS+Keepalived集成測試

(1)禁用主調度器的eth0網卡,3分鐘後從新啓用,確認主從熱備正常

(2)禁用Web服務器池的一部分節點,確認對Web羣集的訪問仍然正常

(3)查閱通知郵件內容

[root@localhost ~]# less /var/spool/mail/root
From ysf@localhost.localdomain  Wed Jan 31 05:51:02 2018
Return-Path: <ysf@localhost.localdomain>
X-Original-To: root@localhost.localdomain
Delivered-To: root@localhost.localdomain
Received: from localhost (localhost [127.0.0.1])
        by localhost.localdomain (Postfix) with SMTP id 05C61422BA
        for <root@localhost.localdomain>; Wed, 31 Jan 2018 05:51:01 +0800 (CST)
Date: Tue, 30 Jan 2018 21:51:02 +0000
From: ysf@localhost.localdomain
Subject: [LVS-1] Realserver [172.16.16.177]:80 - DOWN
X-Mailer: Keepalived
To: root@localhost.localdomain
Message-Id: <20180130215102.05C61422BA@localhost.localdomain>

=> TCP CHECK failed on service <=


...skipping...
From ysf@localhost.localdomain  Wed Jan 31 05:51:02 2018
Return-Path: <ysf@localhost.localdomain>
X-Original-To: root@localhost.localdomain
Delivered-To: root@localhost.localdomain
Received: from localhost (localhost [127.0.0.1])
        by localhost.localdomain (Postfix) with SMTP id 05C61422BA
        for <root@localhost.localdomain>; Wed, 31 Jan 2018 05:51:01 +0800 (CST)
Date: Tue, 30 Jan 2018 21:51:02 +0000
From: ysf@localhost.localdomain
Subject: [LVS-1] Realserver [172.16.16.177]:80 - DOWN
X-Mailer: Keepalived
To: root@localhost.localdomain
Message-Id: <20180130215102.05C61422BA@localhost.localdomain>

=> TCP CHECK failed on service <=
相關文章
相關標籤/搜索