一) 架構
二) 安裝 real server (web主機)
分別在 172.24.42.124 和 172.24.42.125 中完成以下操作
安裝 httpd
<span style="font-size:10px;"># yum install -y httpd
# /etc/init.d/httpd start
# cd /var/www/html
# echo "172.24.42.124" > keep.html </span><span style="font-size:18px;"> </span>
備注:keep.html 的內容為web主機的ip地址,以便通過虛擬IP訪問時能知道具體連上的是哪一臺.
編寫 realserver.sh, 內容如下
SNS_VIP=172.24.42.126
source /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
執行 realserver.sh start 啟動 lvs 客戶端
# ./realserver.sh start
三) 安裝 ipvsadm & keepalived
分別在 172.24.42.122 和 172.24.42.123 完成以下操作
下載 ipvsadm-1.27.tar.gz 后 進行安裝
# tar zxf ipvsadm-1.27.tar.gz
# cd ipvsadm-1.27; make; make install
下載 keepalived-1.2.10.tar.gz 后進行安裝
# tar zxf keepalived-1.2.10.tar.gz
# cd keepalived-1.2.10
# yum install -y libnfnetlink-devel openssl-devel
# ./configure --prefix=/usr/local/keepalived
make; make install
執行 link
# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
分別獲取兩臺 realserver 主機的 keep.html 的 MD5值
# /usr/local/keepalived/bin/genhash -s 172.24.42.124 -p 80 -u /keep.html
MD5SUM = f27498879019e5123512819c82fb7c4f
# /usr/local/keepalived/bin/genhash -s 172.24.42.125 -p 80 -u /keep.html
MD5SUM = f9b71fc29a750aca13934513f050234e
分別記下 MD5SUM 值, 在下一個步驟會用到
global_defs {
router_id LVS_DEVEL
}
vrrp_sync_group bl_group {
group {
VI_1
}
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.24.42.126/24
}
}
virtual_server 172.24.42.126 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 172.24.42.124 80 {
weight 1
HTTP_GET {
url {
path /keep.html
digest f27498879019e5123512819c82fb7c4f
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.24.42.125 80 {
weight 1
HTTP_GET {
url {
path /keep.html
digest f9b71fc29a750aca13934513f050234e
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
備注:
(1) 配置文件中的 digest 后面的值是上一個步驟記錄的 midsum 值
(2) 配置文件對于負載均衡主備兩臺服務器(172.24.42.122 / 172.24.42.123)來說, 有兩處不一樣:
172.24.42.122 (主) :
第一處: state MASTER
第二處: priority 100
172.24.42.123 (備) :
第一處: state BACKUP
第二處: priority 90
啟動 keepalived 服務
# /etc/init.d/keepalived restart
執行 ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.24.42.126:80 rr persistent 50
-> 172.24.42.124:80 Route 1 0 0
-> 172.24.42.125:80 Route 1 0 0
四) 驗證
1) 分別在不同的 client 上訪問 http://172.24.42.126/keep.html 會顯示真實訪問的服務器 ip (172.24.42.124 或 172.24.42.125)
(具備分配機制)
2) 顯示分配連接數
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.24.42.126:http rr persistent 50
-> 172.24.42.124:http Route 1 0 5
-> 172.24.42.125:http Route 1 0 2
網上的資料介紹 使用 lb_algo rr 時會平均分配, 但實際測試并沒有這樣 (待進一步分析)3) 將real server 172.24.42.124 服務器斷網, 再在多臺 cient 上訪問 http://172.24.42.126/keep.html
都會得到 172.24.42.125 的結果 (具備故障檢測功能)
恢復 172.24.42.124 的網絡后, 就會自動恢復分配機制
4) 再將負載均衡(主)服務器 172.24.42.122 斷網, 仍然可以訪問 http://172.24.42.126/keep.html,
得到 172.24.42.125 的結果 (當主出現故障后, 備自動接替主的工作)
恢復 172.24.42.122 的網絡后,負載均衡(主)服務器會重新接管虛擬IP 172.24.42.126
172.24.42.123 再進次入待命狀態.
重要筆記:
1) 配置 keepalived.conf 時, 所有大括號 { 前面要留一個空格, 否則無法正確識別,
2) 當負載均衡有兩臺或以上服務器時, 只有當主服務器 down 了以后, 備服務器才開始工作.
使用 # ip a 可以查看虛擬IP 工作在哪一臺負載均衡服務器
3) keepalived 服務日志存放在 /var/log/messages 中
4) LVS負載均衡有三種模式
LVS-DR (Direct Routing): 直接路由模式, 實際使用較多
LVS-NAT (Network Address Translaton) 地址轉換,因負載較重, 使用較少
LVS-TUN (IP Tunneling) 應用于遠程(外網)
5) LVS 負載均衡的調度算法
rr (Round Robin) 輪循調度
wrr (Weighted Round Robin) 加權輪循
DH (Destination Hashing) 目標地址散列
SH (Source Hashing) 源地址散列
LC (Least Connections) 最小鏈接
WLC (Weighted Least Connections) 加權最少鏈接 (推薦使用)
SED (Shortest Expected Delay0 最短的期望的延時
NQS (Never Queue Scheduling0 最少隊列調度
LBLC (Locality-Based Least Connections) 基于局部性的最少連接
LBLCR (Locality-Based Leat Connections Witch Replication) 帶復制的基于局部最少連接