LVS+Keepalived實現高可用羣集

1、keepalived概述html

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

一、keepalived的熱備原理概述算法

keepalived採用VRRP(虛擬路由冗餘協議)熱備份協議,以軟件的方式實現Linux服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案——有多臺路由組成一個熱備組,經過共用的虛擬IP地址對外提供服務;每一個熱備組內同一時刻只有一臺主路由器提供服務 ,其餘路由器處於冗餘狀態,若當前在線路由器失敗,則其餘路由器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。熱備組內的每臺路由器都有可能成爲主路由器,虛擬路由器的IP地址能夠在熱備組內的路由器之間進行轉移,因此也稱爲漂移IP地址。使用keepalived時,漂移地址的實現不須要手動創建虛接口配置文件,而是由keepalived根據配置文件自動管理。vim

二、安裝keepalived所須要支持的軟件包服務器

在編譯安裝keepalived以前,必須先安裝內核開發包kernel-devel,以及openssl-devel和popt-devel等支持庫。負載均衡

[root@localhost /]#yum -y install kernel-devel openssl-devel popt-devel

三、編譯安裝keepalived
ide

使用指定Linux內核位置對keepalived進行配置,並將安裝路徑指定爲根目錄,這樣就無需額外建立連接文件了。工具

[root@localhost /]#tar zxf keepalived-1.2.2.tar.gz -C /usr/src/
[root@localhost /]#cd /usr/src/keepalived-1.2.2
[root@localhost keepalived-1.2.2]#./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.e16.i686
[root@localhost keepalived-1.2.2]#make && make install

四、啓動keepalived服務進程oop

執行make install操做之後,會自動生成「/etc/init.d/keepalived」腳本文件,但還須要手動添加爲系統服務,這樣就可使用service,chkconfig工具來對keepalived服務進程進行管理了。測試

[root@localhost /]#chkconfig --add keepalived
[root@localhost /]#chkconfig keepalived on


2、配置LVS+Keepalived高可用羣集

keepalived的設計目標是構建可用的LVS負載均衡羣集,能夠調用ipvsadm工具來建立虛擬服務器,管理服務器池,而不只僅用來作雙擊熱備。使用keepalived構建LVS羣集更加簡便易用,主要優點體如今:對LVS負載調度器實現熱備切換,提升可用性,對服務器池中的節點進行健康檢查,自動移除失效節點,恢復後再從新加入。在基於LVS-Keepalived實現的LVS羣集結構中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器,本例將以DR模式的LVS羣集爲基礎,增長一臺從負載調度器,使用Keepalived來實現主、從調度器的熱備,從而構建建有負載均衡、高可用兩種能力的LVS網站羣集平臺。拓撲圖以下:

090603823.jpg

實驗環境:參照上圖可知每臺主機網卡的IP地址,以下所示:共7臺主機

VIP(虛擬IP地址):172.16.16.172/24

主調度器:eth0 172.16.16.173/24 eth1: 192.168.7.173/24

從調度器:eth0 172.16.16.174/24 eth1: 192.168.7.174/24

WEB節點1:eth0 172.16.16.177/24 eth1: 192.168.7.177/24

WEB節點2:eth0 172.16.16.178/24 eth1: 192.168.7.178/24

WEB節點3:eth0 172.16.16.179/24 eth1: 192.168.7.179/24

WEB節點4:eth0 172.16.16.180/24 eth1: 192.168.7.180/24

NFS共享存儲:eth0 192.168.7.250/24

具體操做步驟以下:

一、配置各服務器的IP地址以及相應的軟件包

調度器:主調度器和從調度器上分別安裝keepalived和ipvsadm等軟件包,並安裝這些軟件包的依賴包,具體操做參考文章的上述部分。

WEB服務器:在各WEB服務器上分別安裝httpd軟件包,並將NFS服務器上的共享存儲掛載到本地。

NFS存儲:安裝NFS軟件包,並提供相應的共享源。

二、配置主調度器

Keepalived服務的配置目錄位於/etc/keepalived。其中keepalived.conf是主配置文件,另外包括一個子目錄samples/,提供了許多配置樣列做爲參考。在keepalived的配置文件中,使用」global_defs {……}」區段指定全局參數。使用」vrrp_instance 實例名稱 {……}」區段指定VRRP熱備參數,註釋文字以」!」符號開頭。

[root@localhost /]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived     #!表示註釋
global_defs
   notification_email {
        root@example.com                #接收警報的郵箱,能夠添加多個
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1                #使用本機轉發 email
   smtp_connect_timeout 30
   router_id  LVS_HA_R1                 #本服務器的名稱,備份組內惟一
}
vrrp_instance  VI_1 {                   #定義VRRP熱備實例
    state MASTER           #熱備狀態,MASTER(主);SLAVE(從);BACKUP(備份)
    interface eth0                      #承載VIP地址的物理接口
    virtual_router_id 50                #虛擬路由器的ID號,組內保存一致
    priority 100                        #優先級,數值越大優先級越高。
    advert_int 1                      #主備之間的通告間隔秒數(心跳頻率)
    authentication {                  #認證信息,每一個熱備組保持一致
        auth_type PASS                #認證類型,主備切換時的驗證
        auth_pass 1111                #密碼字串
    }
    virtual_ipaddress {               #指定漂移地址(VIP),能夠有多個
        172.16.16.172                 #HA 虛擬 ip,可加多個
    }
}
virtual_server 172.16.16.172 80 {  #虛擬服務器地址(VIP)、端口
    delay_loop 6                   #健康檢查的間隔時間(秒)
    lb_algo rr                     #lvs 調度算法,這裏使用輪詢
    lb_kind DR                     #lvs 負載均衡機制,這裏使用直連路由
!    persistence_timeout  50       #同一IP鏈接50秒內被分配到同一臺服務器
    protocol TCP                     #用 TCP 協議檢查 realserver 狀態
    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節點的地址、端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 real_server 172.16.16.179 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.180 80 {  #第四個WEB節點的地址、端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@localhost /]#service keeplaived restart      //重啓keepalived服務

配置完keepalived後,還須要配置負載調度器,加載ip_vs模塊,安裝ipvsadm軟件包.這裏使用的是LVS-DR模式,須要調整/proc系統的內核響應參數。

[root@localhost /]#modprobe ip_vs
[root@localhost /]#rpm -ivh /media/Packages/ipvsadm-1.25-9.e16.i686.rpm
[root@localhost /]#vim /etc/sysctl.conf
......//省略部份內容
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
[root@localhost /]#sysctl -p

三、配置從調度器

從調度器的配置與主調度器基本相同,也包括全局參數、熱備參數、服務器池配置,只須要調整router_idstateprority參數便可,其他內容徹底相同,配置完成之後重啓keepalived服務。

[root@localhost /]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived  
global_defs
   notification_email {
        root@example.com             
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1             
   smtp_connect_timeout 30
   router_id  LVS_HA_R2              
}
vrrp_instance  VI_1 {                
    state SLAVE         
    interface eth0                   
    virtual_router_id 50             
    priority 99                     
    advert_int 1                   
    authentication {               
        auth_type PASS             
        auth_pass 1111             
    }
    virtual_ipaddress {            
        172.16.16.172              
    }
}
virtual_server 172.16.16.172 80 {
    delay_loop 6                
    lb_algo rr                  
    lb_kind DR                  
!    persistence_timeout  50    
    protocol 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節點的地址、端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
 real_server 172.16.16.179 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.180 80 {  #第四個WEB節點的地址、端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@localhost /]#service keeplaived restart      //重啓keepalived服務

配置完keepalived後,還須要配置負載調度器,加載ip_vs模塊,安裝ipvsadm軟件包.這裏使用的是LVS-DR模式,須要調整/proc系統的內核響應參數。

[root@localhost /]#modprobe ip_vs
[root@localhost /]#rpm -ivh /media/Packages/ipvsadm-1.25-9.e16.i686.rpm
[root@localhost /]#vim /etc/sysctl.conf
......//省略部份內容
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
[root@localhost /]#sysctl -p

當主從服務器的keepalived服務都起來以後,咱們可使用「ip addr show dev eth0」命令來查看VIP所在的位置,在主調度器上執行此命令時,發現VIP當前是在主調度器上的。當將主調度器的eth0網卡宕掉時,VIP會轉移到從調度器上。

四、配置web節點服務器

因爲咱們羣集使用的是DR模式,因此咱們的web節點服務器的配置也和做者前一篇文章DR負載均衡羣集裏面配置的同樣。

配置虛接口

[root@localhost /]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]#vim ifcfg-lo:0
......//省略部份內容
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.16.172
NETMASK=255.255.255.255
[root@localhost network-scripts]#service network restart
[root@localhost network-scripts]#vim /etc/rc.local
......//省略部份內容
/sbin/route add -host 172.16.16.172 dev lo:0
[root@localhost network-scripts]#route add -host 172.16.16.172 dev lo:0

調整/proc響應參數

[root@localhost /]#vim /etc/sysctl.conf
......//省略部份內容
net.ipv4.conf.all.arp_ignore = 1
net.ipve.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipve.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipve.conf.lo.arp_announce = 2
[root@localhost /]#sysctl -p

掛載NFS共享存儲,並安裝httpd服務

[root@localhost /]#yum -y install httpd
[root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html
[root@localhost /]#vim /var/www/html/index.html
<h1>負載均衡測試網頁!!!</h1>
[root@localhost /]#service httpd start
[root@localhost /]#chkcofnig httpd on

注意:全部web節點服務器的配置均和此同樣。

五、配置NFS共享存儲

如何配置NFS共享存儲請你們參考文章http://cshbk.blog.51cto.com/5685776/1307880

六、測試LVS+Keepalived高可用羣集

安排多臺測試機,從internet中直接訪問http://172.16.16.172,將可以看到由真實服務器提供的網頁內容

LVS負載調度器中,經過「ipvsadm -Ln」或「ipvsadm -Lnc」命令查看節點狀態能夠觀察當前的負載分配狀況,對於輪詢算法來講,每一個節點所得到的鏈接負載應大體至關。


至此有關LVS+keepalived羣集配置完畢,這樣即實現了lvs負載平衡又實現了調度器的熱備。

相關文章
相關標籤/搜索