LVS+Keepalived實現高可用負載均衡

LVS+Keepalived實現高可用負載均衡 html

1、原理        
一、概要介紹
        若是將TCP/IP劃分爲5層,則Keepalived就是一個相似於3~5層交換機制的軟件,具備3~5層交換功能,其主要做用是檢測web服務器的狀態,若是某臺web服務器故障,Keepalived將檢測到並將其從系統中剔除,當該web服務器工做正常後Keepalived自動將其加入到服務器羣中,這些工做所有自動完成,而不須要人工干預,只須要人工修復故障的web服務器便可。
二、工做原理
        Keepalived基於VRRP協議來實現高可用解決方案,利用其避免單點故障,一般這個解決方案中,至少有2臺服務器運行Keepalived,即一臺爲MASTER,另外一臺爲BACKUP,但對外表現爲一個虛擬IP,MASTER會發送特定消息給BACKUP,當BACKUP收不到該消息時,則認爲MASTER故障了,BACKUP會接管虛擬IP,繼續提供服務,從而保證了高可用性,具體以下圖:
linux


圖1 
Keepalived原理圖web

        3層機理是發送ICMP數據包即PING給某臺服務器,若是不痛,則認爲其故障,並從服務器羣中剔除。
        4層機理是檢測TCP端口號狀態來判斷某臺服務器是否故障,若是故障,則從服務器羣中剔除。
        5層機理是根據用戶的設定檢查某個服務器應用程序是否正常運行,若是不正常,則從服務器羣中剔除。
三、實際做用
        主要用做RealServer的健康檢查,以及負載均衡設備MASTER和BACKUP之間failover的實現。

2、架構

        本系列文章以CentOS Linux release 6.0 (Final)爲例,介紹用LVS+Keepalived實現高可用負載均衡。具體業務需求是用虛擬IP轉發8080、2五、21端口請求到後端的真實服務器來處業務邏輯,系統拓撲以下圖所示:
後端


圖2 系統拓撲圖
bash

        客戶端經過VIP(Virtual IP)(172.28.14.227/228/229)來訪問負載均衡服務器,負載均衡服務器經過MASTER/172.28.19.92或BACKUP/172.28.19.93將請求分別轉發給真實服務器(Web服務器/172.28.19.100/101/10二、郵件服務器/172.28.19.103/104/10五、文件服務器/172.28.19.106/107/108)。
        負載均衡服務器的MASTER和BACKUP上都必須安裝LVS+Keepalived,下面開始安裝和配置之旅。

3、LVS安裝
        Master和Backup都必須安裝LVS,安裝ipvsadm步驟以下:
        (1)依賴包安裝
        執行以下命令查看依賴包是否安裝:
                (A)#rpm -qa|grep popt
                popt-static-1.13-7.el6.x86_64
                popt-devel-1.13-7.el6.x86_64
                popt-1.13-7.el6.x86_64
                若是沒有上述包,則須要依次安裝,具體以下:
                #yum install popt
                #yum install 
popt-devel
                #yum install 
popt-static
                (B)rpm -qa|grep libnl
                libnl-1.1-14.el6.x86_64
                libnl-devel-1.1-14.el6.x86_64
                若是沒有上述包,則須要依次安裝,具體以下:
                #yum install libnl
                #yum install libnl-devel
        (2)ipvsadm安裝
        #wget  http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
        #tar zxvf ipvsadm-1.26.tar.gz
        #ln -s /usr/src/kernels/2.6.32-71.el6.x86_64 /usr/src/linux         //注意:每一個系統這個路徑可能會不同
        #cd ipvsadm-1.26
        #make
        #make install
        OK,LVS就這麼安裝好了。

4、Keepalived安裝
       Master和Backup都必須安裝Keepalive,安裝步驟以下:
        #wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
        #tar zxvf keepalived-1.2.7.tar.gz
        #cd keepalived-1.2.7 
        #./configure 
        #make 
        #make install
        OK,Keepalived安裝好了。
        若是#./configure時出現下面錯誤:
        configure: error: 
          !!! OpenSSL is not properly installed on your system. !!!
          !!! Can not include OpenSSL headers files.            !!!
         則須要安裝OpenSSL相關包:
        #yum install openssl
        #
yum install openssl-devel
        而後從#./configure步驟開始執行如下後續步驟就行。

5、配置
一、服務腳本
        將Keepalived作成服務啓動(MASTER和BACKUP都是必須的),具體步驟以下:
        (1)拷貝服務啓動腳本
        #cp ./keepalived/etc/init.d /etc/init.d   
        (2)拷貝配置文件
        #mkdir /etc/keepalived
        #cp ./keepalived/etc/keepalived/keepalived.conf /etc/keepalived
        (3)拷貝可執行文件
        #cp ./bin/keepalived /usr/bin
        (4)啓動/中止服務
        #service keepalived start
        #service keepalived stop
二、配置MASTER
        備份並打開配置文件修改部份內容,尤爲注意紅色部分,具體以下:
        #cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
        #vi /etc/keepalived/keepalived.conf
        vrrp_instance VI_1 {
            state MASTER            # 狀態實際MASTER
            interface eth0            # 監聽網卡切換
            virtual_router_id 51
            priority 100                # 優先級(越大優先級越高)
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress {        # 虛擬IP地址列表,即VIP
                172.28.14.227
                172.28.14.228
                172.28.14.229
            }
        }
        virtual_server 172.28.14.227 8080 {
            delay_loop 6
            lb_algo wlc
            lb_kind DR                    # DR模式
            persistence_timeout 50
            protocol TCP
            real_server 172.28.19.100 8080 {
                weight 1                  # 權重(權重越高處理的請求越多)
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 8080
                }
            }
            real_server 172.28.19.101 8080 {
                weight 1                  # 權重(權重越高處理的請求越多
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 8080
                }
            }
            real_server 172.28.19.102 8080 {
                weight 1                  # 權重(權重越高處理的請求越多
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 8080
                }
            }

        }
        virtual_server 172.28.14.228 25 {
            delay_loop 6
            lb_algo wlc
            lb_kind DR                    # DR模式
            persistence_timeout 50
            protocol TCP
            real_server 172.28.19.103 25 {
                weight 1                  # 權重(權重越高處理的請求越多
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 25
                }
            }
            real_server 172.28.19.104 25 {
                weight 1                  # 權重(權重越高處理的請求越多
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 25
                }
            }
            real_server 172.28.19.105 25 {
                weight 1                  # 權重(權重越高處理的請求越多)
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 25
                }
            }

        }
        virtual_server 172.28.14.229 21 {
            delay_loop 6
            lb_algo wlc
            lb_kind DR                    # DR模式
            persistence_timeout 50
            protocol TCP
            real_server 172.28.19.106 21 {
                weight 1                  # 權重(權重越高處理的請求越多
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 21
                }
            }
            real_server 172.28.19.107 21 {
                weight 1                  # 權重(權重越高處理的請求越多
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 21
                }
            }
            real_server 172.28.19.108 21 {
                weight 1                  # 權重(權重越高處理的請求越多)
                TCP_CHECK {
                    connect_timeout 3
                    nb_get_retry 3
                    delay_before_retry 3
                    connect_port 21
                }
            }

        }
三、配置BACKUP
        BACKUP配置與MASTER基本一致,除了紅色部分外,具體以下:
        #cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
        #vi /etc/keepalived/keepalived.conf
        vrrp_instance VI_1 {
            state BACKP            # 狀態實際BACKUP
            ...
            priority 99                # 優先級99(比MASTER優先級100低
            ...
        }

四、配置Realserver
        爲Realserver的某塊網卡建立啓動腳本,腳本內容以下:
        #vi realserverd
        #!/bin/bash
        VIP=172.28.14.227
        . /etc/rc.d/init.d/functions
        case "$1" in
        start)
            echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
            echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
            ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
            /sbin/route add -host $VIP dev lo:0
            sysctl -p > /dev/null 2>&1
            echo "realserver start OK"
            ;;
        stop)
            echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
            echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
            echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
            ifconfig lo:0 down
            /sbin/route del $VIP > /dev/null 2>&1
            echo "realserver stoped"
            ;;
        *)
            echo "Usage:$0 {start|stop}"
            exit 1
        esac
        exit 0
        注意腳本中紅色部分,每塊網卡綁定一個虛擬IP地址,若是綁定多個虛擬IP,則須要爲每塊網卡建立一個腳本,而且指定lo:X(好比:lo:0,lo:1等),另外,.和/etc/rc.d/funtions之間有空格。
        啓動keepalived服務,並執行上述腳本,而後用ip a能確認是否有VIP地址。
        輸入ipvsadm -Ln查看LVS工做狀態。
        中止MASTER的keepalived服務,BACKUP能接管VIP地址,再次啓動MASTER的keepalived服務,MASTER又能再一次接管VIP地址。
        若是這些你都搞定了,恭喜你,你已經擁有高可用服務了,!服務器

相關文章
相關標籤/搜索