LVS+Keepalived高可用負載均衡叢集架構

xz43發表於2015-11-06

keepalived 簡介

keepalived的設計目標是構建高可用的LVS負載均衡群集,可以呼叫ipvsadm工具來建立虛擬伺服器,管理伺服器池,而不僅僅用來做雙機熱備。使用keepalived構建LVS群集更加簡便易用,主要優勢體現在:

LVS負載排程器實現熱備切換,提高可用性;

對伺服器池中的節點進行健康檢查,自動移除失效節點,恢復後再重新加入;

keepalived可以實現服務的高可用或熱備,用來防止單點故障的問題。Keepalived的核心VRRP協議,VRRP協議主要實現了在路由器或三層交換機處的冗餘,Keepalived就是使用VRRP協議來實現高可用的。

 

keepalived作用

如果有一臺web伺服器當機,或工作出現故障,Keepalived將檢測到,並將有故障的web伺服器從系統中剔除,當web伺服器工作正常後Keepalived自動將web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web伺服器。

Keepalived的程式碼結構和工作圖示:
LVS+Keepalived高可用負載均衡叢集架構實驗

keepalived依賴包

 ipvsadm libpopt0  libssl-dev

 

VRRP協議

虛擬路由器冗餘協議(VRRP)是一種選擇協議,VRRP通過優先順序來確定由誰當master,誰當backup

 

LVS

LVS是一個開源的軟體,可以實現LINUX平臺下的簡單負載均衡。

LVS是Linux Virtual Server的縮寫,意思是Linux虛擬伺服器。目前有三種IP負載均衡技術(VS/NATVS/TUNVS/DR);提供十種排程演算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

 

LVS結構與工作原理

LVS由前端的負載均衡器(Load BalancerLB)和後端的真實伺服器(Real ServerRS)群組成。RS間可通過區域網或廣域網連線。LVS的這種結構對使用者是透明的,使用者只能看見一臺作為LB的虛擬伺服器(Virtual Server),而看不到提供服務的RS群。

當使用者的請求發往虛擬伺服器,LB根據設定的包轉發策略和負載均衡排程演算法將使用者請求轉發給RSRS再將使用者請求結果返回給使用者。同請求包一樣,應答包的返回方式也與包轉發策略有關。


LVS轉發策略

NAT(Network Address Translation)模式、IP隧道(IP Tunneling)模式 、DR(Direct Routing)模式,其中最常見、使用最多的是DR模式。

 

實驗架構圖:

LVS+Keepalived高可用負載均衡叢集架構實驗

HA高可用叢集構建前提:

1、proxy和proxy2節點時間必須同步;建議使用ntp協議進行。

2、節點之間必須要通過主機名互相通訊;建議使用hosts檔案;

注意:通訊中使用的名字必須與其節點為上“uname -n”命令展示出的名字保持一致。

3、節點之間彼此root使用者能基於ssh金鑰方式進行通訊;

節點proxy: 

# ssh-keygen -t rsa -P ""

# ssh-copy-id -i .ssh/id_rsa.pub proxy2

節點proxy2:

# ssh-keygen -t rsa -P ""

# ssh-copy-id -i .ssh/id_rsa.pub proxy

測試ssh無金鑰通訊:

123 [root@proxy ~]# date ; ssh proxy2 date

 

安裝配置

MASTER

root@example:~# apt-get install libssl-dev libpopt-dev     \\安裝openssl及popt

root@example:~# apt-get install keepalived                 

root@example:~# vim /etc/keepalived/keepalived.conf      \\建立keepalived的配置檔案進行編寫

!Configuration File for keepalived

 global_defs {

     notification_email {

        root@example.com          #當出現問題時,傳送的收件人地址,可以設定多個

        }

    notification_email_from sysadmin@163.com  #設定郵件的傳送地址

        smtp_server 127.0.0.1                #設定smtp server的地址,該地址必須是存在的

        smtp_connect_timeout 30           #設定連線smtp server的超時時間

        router_id LVS_DEVEL           # 執行Keepalived伺服器的標識,發郵件時顯示在郵件標題中的資訊

}

        vrrp_instance VI_1 {         # #定義VRRP例項,例項名自定義

        state MASTER      #指定Keepalived的角色,MASTER為主伺服器,BACKUP為備用伺服器

        interface eth0           #指定HA監測的介面

        virtual_router_id 51       #虛擬路由標識,這個標識是一個數字(1-255),在一個VRRP例項中主備伺服器ID必須一樣,與整個vrrp中也是一致的

        priority 100       #優先順序,數字越大優先順序越高,在一個例項中主伺服器優先順序要高於備伺服器 

        advert_int 1  #設定主備之間同步檢查的時間間隔,單位秒

   authentication {        #設定驗證型別和密碼

       auth_type PASS   #型別主要有PASS、AH兩種,通常使用的型別為PASS

       auth_pass 1111   #設定驗證密碼,在一個例項中主備密碼保持一樣

}

virtual_ipaddress {      #定義虛擬IP地址,可以有多個,每行一個

       172.16.31.188

}

}

virtual_server 172.16.31.188 80 {#設定虛擬伺服器,需要指定虛擬IP與服務埠,用空格分隔

delay_loop 6                     #設定健康狀態檢查時間,單位為秒

lb_algo wrr                      #設定負載高度演算法

lb_kind DR                       #設定LVS實現負載均衡的機制,可以為{NAT|TUN|DR}三種

persistence_timeout 60     #會話保持時間,單位為秒;這個選項對於動態網頁是非常有用的,為叢集系統中session共享提供了一個很好的解決方案 

protocol TCP                  #指定轉發協議型別可以設定{TCP|UDP}兩種

 

real_server 172.16.31.50 80 {  #後端伺服器節點,需要指定RS的IP與埠,用空格分隔

       weight 3                       #配置服務節點的權重,數字越大,權重越高

       TCP_CHECK {              #設定檢測Realserver的方式為Tcp檢查,還可以是 HTTP_GET

       connect_timeout 10         #設定響應超時時間

       nb_get_retry 3                 #設定超時重試次數

       delay_before_retry 3        #設定超時後重試間隔

       connect_port 80              #連線埠

}

也可以是如下的http協議方式

HTTP_GET {             #設定檢測Realserver的方式為http協議 

    url {

          path / 

          status_code 200      #設定返回狀態碼為200表示Realserver是存活的 
            }

connect_timeout 10         #設定響應超時時間

       nb_get_retry 3                 #設定超時重試次數

       delay_before_retry 3        #設定超時後重試間隔

}

real_server 172.16.31.51 80 {

       weight 3

       TCP_CHECK {

       connect_timeout 10

       nb_get_retry 3

       delay_before_retry 3

       connect_port 80

       }

也可以是如下的http協議方式

HTTP_GET {             #設定檢測Realserver的方式為http協議 

    url {

          path / 

          status_code 200      #設定返回狀態碼為200表示Realserver是存活的 
            }

connect_timeout 10         #設定響應超時時間

       nb_get_retry 3                 #設定超時重試次數

       delay_before_retry 3        #設定超時後重試間隔

    }

}

 

BACKUP

root@example1:~# apt-get install libssl-dev libpopt-dev   

root@example1:~# apt-get install keepalived

將Master伺服器proxy節點上的主配置檔案拷貝到Backup伺服器proxy2節點稍作修改
# scp /etc/keepalived/keepalived.conf proxy2:/etc/keepalived/ 

######修改如下兩項 
[root@proxy2 ~]# vim /etc/keepalived/keepalived.conf 
state BACKUP       #備份伺服器

priority 99            #優先順序比master小

 

啟動兩臺伺服器上的Keepalived服務並設定為開機自啟動
# chkconfig --add keepalived ; ssh proxy2 "chkconfig --add keepalived"
# chkconfig  keepalived on ; ssh proxy2 "chkconfig keepalived on"          
# chkconfig --list keepalived; ssh proxy2 "chkconfig --list keepalived"
keepalived      0:off  1:off  2:on    3:on    4:on    5:on    6:off 
keepalived      0:off  1:off  2:on    3:on    4:on    5:on    6:off

啟動服務:
# service keepalived start; ssh proxy2 "service keepalived start"

觀察各節點的服務啟動後的日誌:
MASTER節點的日誌;
[root@proxy keepalived]# tail -f /var/log/messages  

BACKUP節點的日誌:
[root@proxy2 keepalived]# tail -f /var/log/messages  

最後,需要開啟Master節點與Backup節點伺服器的路由轉發功能
#sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-1824310/,如需轉載,請註明出處,否則將追究法律責任。

相關文章