LVS+Keepalived 實現 負載平衡,高可用性模擬實驗

 

LVS

Linux vritual server是針對linux內核開發的一個負載均衡項目,lvs實際上是一個基於IP 的一個虛擬化應用。LVS想已成爲Linux系統的一部分。默認編譯爲IP_VS模塊,必要時可以調用。

KeepAlived

Keepalived 是針對LVS的一款強大的輔助工具,主要用來提供故障切換和健檢查功能,如判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換爲新的服務器,當故障主機恢復後將其重新加入羣集。在非LVS羣集環境中使用時Keepalived也可以作爲熱備軟件使用。

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

熱備組內的每臺服務器都可以成爲主服務器,虛擬IP地址(VIP)可以在熱備組內的服務器之間進行轉移,所以也稱爲漂移IP地址,使用Keepalived時,漂移地址的實現不需要手動建立虛擬接口配置文件(如eth0:0),而是由Keepalived根據配置文件自動管理。

下面是我實驗的兩個案例: (LVS-NAT+HA)和 (LVS-DR+HA)

LVS-NAT+HA

實驗拓撲如下:(全是RHEL6 X32模擬)

wps_clip_image-30284

地址安排:

主調度器: 外網ip 12.12.12.1 /24

內網ip 192.168.1.1/24

輔助調度器: 外網 ip 12.12.12.2/24

內網ip 192.168.1.2/24

VIP虛擬ip 12.12.12.10/24 (web服務) 192.168.1.254 (內網的網關)

Web節點 1 : 192.168.1.3/24 gw 192.168.1.254

Web節點2 :19.168.1.4/24 gw 192.168.1.254

分析:

① 要實現LVS和keepalived實現的HA(高可用性)結合,需要安軟ipvsadm 這個工具包來實現負載平衡以及安裝keepalived實現高可用性,故障切換。

② 因爲是LVS是NAT的工作模式,要解決防火牆以及路由轉發的問題。

③ keepalived 是基於VRRP協議來工作的,所以要允許他們的通信。

④ keepalived 主配置文件的問題,文件中確定誰是主,誰是輔,以及VIP ,RIP。

⑤ LVS和Keepalived都是虛擬服務的一部分,要加載IP_VS模塊。

⑥ web節點需鏈接vip網關,並提供web服務。

步驟:

先來解決第一步

rpm 安裝 ipvsadm-1.25-9.el6.i686.rpm

wps_clip_image-22259

源碼安裝keepalived 安裝之前 必須先安裝內核開發包kernel-devel以及openssl-devel、popt-devel等支持庫 沒有要安裝

wps_clip_image-29518

進入解壓目錄

./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.i686/ 配置 建議安裝到/ 目錄下 不然不會自動添加到系統服務。

wps_clip_image-13053

make && make  安裝

安裝後會生成以下的目錄和文件

Keepalived.conf 是主要配置文件

wps_clip_image-1697

並且配置 服務開機自動啓動 chkconfig keepalived on

wps_clip_image-8399

配置防火牆 允許 80端口 和 目標地址是224.0.0.18的包 (224.0.0.18)是VRRP的通信地址  配置SNAT策略和允許源地址是80的轉發包

wps_clip_image-27491

修改/etc/sysctl.conf 配置文件 實現轉發功能

把“net.ipv4.ip_forward = 0 ”的值給成1  啓用轉發

wps_clip_image-30461

sysctl -p 生效

wps_clip_image-11804

配置keepalived的主配置文件

主配置文件由三部分組成, 註釋文字以”!”符號開頭。

使用global_defs {……}區段指定全局參數。

使用vrrp_instance  實例名稱{……}區段指定VRRP熱備參數。

使用vritual_server  ip地址 {……}指定虛擬服務。

主配置調度器的配置

! Configuration File for keepalived #註釋信息

global_defs { #全局配置開始

!   notification_email { #郵件提醒配置

!     [email protected] #本行和下兩行指定收件人地址

!     [email protected]

!     [email protected]

!   }

!   notification_email_from [email protected] #指定發件人地址

!   smtp_server 192.168.200.1 #指定郵件服務器地址

!   smtp_connect_timeout 30 #鏈接超時時間

   router_id LVS_1 #本服務器的ID號爲 LVS_1 必須是唯一的

}

!###############定義內部網關實例################################

vrrp_instance VI_1 { #開始定義VRRP實例 名稱爲VI_1 一組服務器的名稱要一致

state MASTER #熱備狀態,MASTER表示主服務器;SLAVE表示備用服務器;當 有多臺備用的服務器,熱備狀態改爲 BACKUP,此狀態是由 priority  的值來決定的,當前priority 的值小於備機的值,那麼將會失MASTER  狀態   

interface eth0 #檢測承載VIP流量的網卡

    virtual_router_id 51   #虛擬路由器的ID號。主、輔機的 virtual_router_id 必須相同

    priority 100 #主機的優先級,數值越大優先能越高

    advert_int 1 #主備之間的通告間隔秒數(心跳頻率)

    authentication { #認證信息,每個熱備組保持一致

        auth_type PASS #認證類型,主備切換時的驗證

        auth_pass 1111  #密碼

    }

    virtual_ipaddress { #指定虛擬地址(VIP),可以有多個

        192.168.1.254 #HA 虛擬 ip,可加多個

    }

}

!#######################定義外網web服務實例#############################

vrrp_instance VI_11 {

    state MASTER

    interface eth1

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        12.12.12.10

    }

}

!###############################定義網關虛擬地址######################

virtual_server 192.168.1.254 { #虛擬服務器地址(VIP)

    delay_loop 6 #健康檢查的間隔時間(秒),每隔 6 秒查詢 realserver狀態

    lb_algo rr #lvs 調度算法,這裏使用輪詢

    lb_kind NAT #lvs 負載均衡機制,這裏使用NAT

    nat_mask 255.255.255.0 #虛擬ip的子網掩碼

!    persistence_timeout 50 #同一 IP 的連接 50 秒內被分配到同一臺 realserver

    protocol TCP ##用 TCP 協議檢查 realserver 狀態

    real_server 192.168.1.1 { #第一個網關節點的地址

        weight 1 #節點的權重

        TCP_CHECK {  #健康檢查方式

            connect_timeout 3 #故障重試秒數(即連接超時)

            nb_get_retry 3 #重試延遲(即重試次數)

            delay_before_retry 3 #重試間隔(秒)

                }

    }

    real_server 192.168.1.2 { #第二個網關節點的地址

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

}

    }

}

!########################定義虛擬web地址 ##############################

virtual_server 12.12.12.10 80 { #虛擬服務器地址(VIP)、端口

    delay_loop 6

    lb_algo rr

    lb_kind NAT

     nat_mask 255.255.255.0

!persistence_timeout 50

    protocol TCP

    real_server 192.168.1.3 80 { #第一個web服務器

        weight 1

        TCP_CHECK {

connect_port 80 #指定檢測的端口

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

                                }

real_server 192.168.1.4 80 { #第二個服務器

        weight 1

        TCP_CHECK {

connect_port 80 

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

                                }

輔助負載調度器的配置和主的大致相同  擔憂三點配置不能一樣

全局配置中的ID標識

狀態

優先級  !注意這裏一個VRRP 實例中有兩個不一樣 同理 兩個VRRP實例中…… 自己算

wps_clip_image-26408

然後負加載 ip_vs模塊   modprobe ip_vs

注意從服務器重啓後會失效

wps_clip_image-7229

啓動keepalived服務

wps_clip_image-10758

好了 進度到一半了

輔助調度器一樣的配置 處理keepalived的主配置文件不同

主調度器命令 ip address show dev 網卡名稱 來查看端口監測的ip,主調度其中每個網卡應承載兩個ip (VIP) 應爲他是主 MASTER 優先級是100

wps_clip_image-20608

輔助調度器 是一個正常ip  沒有負載 VIP

wps_clip_image-10434

爲了測試keepalived能夠正常實行故障切換  用ping + -t 命令檢測 在ping的過程中斷開主調度器的鏈接 然他不能和輔助調度器鏈接 VRRP 輔助調度器就認爲主調度器down掉,邊自動的成爲主調度器 承載VIP的流量。Ping的過程中是 如下的效果

wps_clip_image-19288

RIP(web節點)的配置

開啓httpd服務

防火牆允許

網關指向VIP網關 也就是 192.168.1.254

這裏兩臺web服務器我用了 不同的內容html文檔

如果web節點down掉或出現問題

主從調度器上將把他排除  用ipvsadm命令查不到他

wps_clip_image-30254

說明192.168.1.4這個web節點有問題 用TCP 協議檢測他的80 端口

配置正常後

wps_clip_image-16341

最後 測試頁面如下

請求被髮送到web節點1

wps_clip_image-16022

請求被髮送到web節點2

wps_clip_image-16546

主負載調度器查看

ipvsadm  -lcn

wps_clip_image-19265

還算比較平衡

LVS-DR +HA

實驗拓撲如下:

主調度器:12.12.12.1/24

輔助調度器: 12.12.12.2/24

VIP:12.12.12.10/24

Web01: 12.12.12.3/24

Web02:12.12.12.4/24

wps_clip_image-5646

分析:

思路基本一致

① 在主輔調度器上安裝ipvsadm和keepalived軟件

② 解決主輔調度器的連通性問題

③ ip_vs模塊的應用

④ 配置文件配置

⑤ web節點的配置

步驟:

思路 ① ② ③ 就省去詳細步驟了,參考LVS-NAT+HA或 鏈接 http://zhangyongli.blog.51cto.com/6691702/1288731

來直接看看配置文件的不同。

主負載調配器

! Configuration File for keepalived

global_defs {

!   notification_email {

!     [email protected]

!     [email protected]

!     [email protected]

!   }

!   notification_email_from [email protected]

!   smtp_server 192.168.200.1

!   smtp_connect_timeout 30

   router_id LVS_1

}

!##########################VRRP實例#################################

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        12.12.12.10

    }

}

!################################定義虛擬服務器####################

virtual_server 12.12.12.10 80 {

    delay_loop 6

    lb_algo rr

lb_kind DR #注意是DR

    !persistence_timeout 50

    protocol TCP

    real_server 12.12.12.3 80 { #第一個真實web

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 12.12.12.4 80 { #第二個真實web

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

輔助調度服務器

全局配置中  router_id 不同  vrrp實例中  狀態不一樣  優先級不一樣

Web節點的配置

因爲是LVS-DR模式

所以 web客戶端是獨立向客戶端迴應響應包的 添加ifcf-etho:0文件

內容如下

wps_clip_image-24286

DEVICE=lo:0 #設備名稱

IPADDR=12.12.12.10 #監聽vip地址

NETMASK=255.255.255.255 #主機路由

注意sysctl.conf配置添加

wps_clip_image-3386

詳細含義參考 http://zhangyongli.blog.51cto.com/6691702/1288731 文檔尾部

添加路由

route  add  12.12.12.10 dev lo:0

Web節點相同的配置 

然後測試;

wps_clip_image-6766

wps_clip_image-20968

主負載調度器

wps_clip_image-22124

ip   addr   show   dev  echt0

wps_clip_image-12152

好了  大功告成!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章