close
 實現目標

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。

本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。

目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);

十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

Keepalvied

Keepalived在這裏主要用作RealServer的健康狀態檢查以及LoadBalance主機

和BackUP主機之間failover的實現

Near's實驗環境規劃設計(本例使用DR mode)

共四台主機(本實驗略過NFS組態部份,以Lvs與keepalive為實驗主軸)

CentOS 5.6 * 2 (Real Server(Lvs Client) , 安裝Apache 並啟動服務)

node1: 192.168.0.171/24

node2: 192.168.0.172/24

#駐: Lvs Client 另需撰寫Script 與Lvs Server溝通(另需阻隔ARP干擾..等等)

Fedora core 14*2(分別為Lvs master 與Lvs backer )

lvs191(Master): 192.168.0.191/24
lvs192(Backer): 192.168.0.192/24

為Fedora 14*2  安裝ipvsadm 1.25 , 與 keepalived 1.1.20 可獲得較新版本套件

> yum -y install ipvsadm keepalived

#註: CentOS 5.6 目前僅支援到1.24,故需升級核心,才可順利安裝新版ipvsadm 1.25

#註: 目前ipvsadm官方最新版本 1.26

 本人曾於前年於此blog寫過利用Heartbeat 打造Fail Over Web Site 類似文章,但接觸後

  Lvs+Keepalived 架構後,腦裂遇到狀況較Heartbeat少,就會想就以此取代之想法
      

 

(A). 首先建立Lvs Client 端(Node1,Node2)進而與LVS 負載器溝通Script(lvs_w)

     註: 此script 於本人blog 首頁 右方"Sky Drive" 網路硬碟中有share,可供下載修改


>  vi  /usr/local/bin/lvs_w                #內容如下

#!/bin/bash

#lvs real server

VIP=192.168.0.100                              #定義之VIP 虛擬IP Address

source  /etc/rc.d/init.d/functions

case "$1" in

start)

echo "start  Lvs of Real_Server"

/sbin/ifconfig  lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore      #當啟動是抑制相關arp動作

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
;;

stop)

/sbin/ifconfig lo:0 down

echo "close LVS DR"

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

;;

*)

echo " Usage: $0 {start | stop}"

exit 1

esac

 
> chmod +x /usr/local/bin/lvs_w     #允許可執行權限

> /usr/local/bin/lvs_w start   # 依序啟動lvs Client(node1->node2 測試)

(B)> Then, 我們在node1 或 node2 使用以下command 檢視script 執行是否ok

       > ip add                #於node1測試

        從下圖中得知,當lvs_w 啟動時,將VIP附掛於lo:0 界面上(且抑制arp動作), Then

        當關閉此script時,原掛於lo:0 ip  將自動卸載  

   
(C.) LVS Director 配置:   ipvsadm 與 keepalived 套件安裝

        >  yum -y install ipvsadm  keepalived

       > rpm -qa | grep ipvsadm         #ver.  ipvsadm-1.25-5 , keepalived-1.1-20-1

       > ipvsadm
 
       > chkconfig ipvsadm on


    

Then 我們在Lvs_191 上 執行 ipvsadm 指令來觀看

   > ipvsadm      #ipvsadm 工具必須先執行,ip_vs 模組才會載入  
  
   >lsmod | grep ip_vs          #成功載入ip_vs 畫面應該如下

 

(D)  keepalived  配置:  安裝於lvs_191與lvs_192 兩台DR 主機上

       編輯keepalived 組態檔: /etc/keepalived/keepalived.conf
 
       註: 此組態檔於本人blog 首頁 右方"Sky Drive" 網路硬碟中有share,可供下載修改

       列出  keepalived 說明區塊一 (以編修Master lvs_191 為例)

      global_defs {

      notification_email {                           #about E-MAIL 警告訊息發送

     keynes_0918@livemail.tw

      }

     notification_email_from admin@livemail.tw

     smtp_server 168.95.1.1

     smtp_connect_timeout 30

    router_id lvs_191       #router_id 不可master 與 backup 重複

    }

  vrrp_sync_group VGM {               #建立同步群組,本例取名為VGM

  group {

      vip_apache                              #群組成員:  vrrp_insatnce vip_apache 

    } 

  }


vrrp_instance vip_apache {     # 編輯vrrp_instance vip_apache 細部設定

     state MASTER                 #由於lvs_191請設定state為 MASTER(大寫) ,
                                                # lvs_192 請設定state為BACKUP(大寫)

     interface eth0                  #提供對外服務的網路介面,我們使用eth0
 
     lync_sync_daemon_interface eth0   # 偵測心跳介面類似heartneat

     virtual_router_id 51      #virtual_router_id 編號: master 與 backup 須一致

     priority 150                   # master 我們設 priority 150 , backup 我們設為100

     advert_int 5                 #master 與 backup 同步檢查間隔秒數

     authentication {          # authentication 區塊必須master 與backup 一致設定

      auth_type PASS      #不建議使用AH

       auth_pass 0204   #設定master 與 backup通信時password,必須一致

      }

    virtual_ipaddress {       #設置virtual ip ,可設定多個

        192.168.0.100        

    }

}

      

 

列出  keepalived 說明區塊二(以編修Master lvs_191 為例)

    virtual_server 192.168.0.100 80 {    #VIP 192.168.0.100 , port: 80

    delay_loop 6                                  #健康檢查間隔秒數

    lb_algo rr                                        #使用rr(RoundRobin負載平衡演算法)

    lb_kind DR                                    #使用DR 路由模式,另有NAT與TUN共三種轉發模式

    nat_mask 255.255.255.0           #netmask 設定

    #persistence_timeout 50         # 會話保留秒數,建議開啟
   
    protocol   tcp

    real_server 192.168.0.171 80 {    #第一台真實Server 相關組態設定

        weight 100        #權重分配有助於,提升硬體使用效能,這此兩台WEB Server我們設100

        TCP_CHECK {           #TCP 相關check

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.0.172 80 {  # 第二台真實主機設置,請參考上述設定說明

        weight 100

        TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

}

 註:
 Backup(lvs_192) keepalived.conf ,也請參照上述說明修改即可.注意有三個地方相異處

 須修改分別為    router_id , vrrp_instance 內部區塊中state與priority 即可完成lvs_192組態

Then 完成lvs_191 與 lvs_192 兩台主機之keepalived 組態後,我們依序啟動keepalived 服務

 > service keepalived start

> chkconfig keepalived on

#在未完成組態keepalived 與ipvs 啟用前,我們ping VIP:192.168.0.100 是不通的

  但一啟動keepalived 服務後,試著ping VIP,發現已可ping通VIP(keepalived具備Route功能) 

  在確認ipvs,keepalived, Lvs Client 端已啟動後,我們回到 lvs_191 查看目前lvs運行狀況

> ipvsadm

   下圖裡,我們可以看到兩台真實伺服器已經On上線,當負載轉移過程中InActConn 數值將變化


(E): 開始測試:  [測試rr Round Robin 流量負載平衡] 

      我們預先在node1與node2 撰寫兩個網頁,

      並標示"I am node1" 與 "i am node2",然後重新啟動兩台apache主機

      接著開啟chrome broswer ,新增頁面測試 : 192.168.0.100

       第一次執行是跑到Node1 Web Server
  
   第二次執行是跑到Node2 Web Server


  當然,我們也可以查尋目前轉發狀況

   > ipvsadm -lcn  
    #由下圖中得知.rr 機制是在運作,Lvs負載平衡測試成功   
  [測試Fail Over 容錯自轉移叢集功能]

  [情境A:  當master keealived 掛點時,是否Backup角色會tack over]

  先關閉 master keealived  ,我們在切換到lvs_192(Backup主機)底下查看log

  >   tail -f /var/log/messages

   由下圖得知,當Backup 偵測到Master 掛點時,即進入"Master Mode" 成功接手了原先

   MASTER ROLES 工作進而達到Custer叢集Fail Over 功效

  

  [情境B:  當web server node1 掛點時,是否node2角色會取代node1繼續work]

  先把node1 apache 服務關閉,在回到lvs_191 底下查看

  > ipvsadm

  下圖中可得知.171 web server 已從叢集佇列中移除,改有.172 接手工作
   
   Inactconn  值也明顯異動  

   讀者亦可使用broswer test 是否目前轉發改由.172 接手,到此為止已完成本Lab目標

 

LAB參考技術資料: 田逸先生/MIS網管實戰寶典與網路資料

arrow
arrow
    全站熱搜

    終極.凱因斯 發表在 痞客邦 留言(0) 人氣()