本項目在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網管實戰寶典與網路資料