NetSeek大作:利用LVS+Keepalived 實現高性能高可用負載均衡伺服器
作者:NetSeek
轉:http://www.linuxtone.org/thread-1077-1-1.html
http://www.linuxtone.org(IT運維專家網|集群架構|性能調優)
歡迎轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明.
更新時間:2008-10-27
背景:
隨著你的網站業務量的增長你網站的伺服器壓力越來越大?需要負載均衡方案!商業的硬體如F5又太貴,你們又是創業型互聯公司如何有效節約成本,節省不必要的浪費?同時實現商業硬體一樣的高性能高可用的功能?有什麼好的負載均衡可伸張可擴展的方案嗎?答案是肯定的!有!我們利用LVS+Keepalived基於完整開源軟體的架構可以為你提供一個負載均衡及高可用的伺服器。
一。LVS+Keepalived 介紹
LVS
LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟體項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);
八種調度演算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
Keepalvied
Keepalived在這裡主要用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現
二. 網站負載均衡拓樸圖
IP信息列表:
名稱 IP 1. LVS-DR-Master 61.164.122.6
2. LVS-DR-BACKUP 61.164.122.7
3. LVS-DR-VIP 61.164.122.8
4. WEB1-Realserver 61.164.122.9
5. WEB2-Realserver 61.164.122.10
6. GateWay 61.164.122.1 三. 安裝LVS和Keepalvied軟體包
1. 下載相關軟體包 1. #mkdir /usr/local/src/lvs
2. #cd /usr/local/src/lvs
3. #wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
4. #wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz2. 安裝LVS和Keepalived 1. #lsmod |grep ip_vs
2. #uname -r
3. 2.6.18-53.el5PAE
4. #ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/ /usr/src/linux
5.
6. #tar zxvf ipvsadm-1.24.tar.gz
7. #cd ipvsadm-1.24
8. #make && make install
9. #find / -name ipvsadm # 查看ipvsadm的位置
10.
11. #tar zxvf keepalived-1.1.15.tar.gz
12. #cd keepalived-1.1.15
13. #./configure && make && make install
14. #find / -name keepalived # 查看keepalived位置
15.
16. #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
17. #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
18. #mkdir /etc/keepalived
19. #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
20. #cp /usr/local/sbin/keepalived /usr/sbin/
21. #service keepalived start|stop #做成系統啟動服務方便管理.四. 配置LVS實現負載均衡
1. LVS-DR,配置LVS腳本實現負載均衡# #vi /usr/local/sbin/lvs-dr.sh
# #!/bin/bash
# # description: start LVS of DirectorServer
# #Written by :NetSeek http://www.linuxtone.org
#
# GW=61.164.122.1
# # website director vip.
# SNS_VIP=61.164.122.8
# SNS_RIP1=61.164.122.9
# SNS_RIP2=61.164.122.10
#
# ./etc/rc.d/init.d/functions
#
# logger $0 called with $1
#
# case "$1" in
#
# start)
# # set squid vip
# /sbin/ipvsadm --set 30 5 60
# /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255
# broadcast $SNS_VIP up
# /sbin/route add -host $SNS_VIP dev eth0:0
# /sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3
# /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1
# /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1
# touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
#
# ;;
# stop)
# /sbin/ipvsadm -C
# /sbin/ipvsadm -Z
# ifconfig eth0:0 down
# ifconfig eth0:1 down
# route del $SNS_VIP
# route del $SS_VIP
# rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
# echo "ipvsadm stoped"
# ;;
#
# status)
#
# if [ ! -e /var/lock/subsys/ipvsadm ];then
# echo "ipvsadm stoped"
# exit 1
# else
# echo "ipvsadm OK"
# fi
# ;;
#
# *)
# echo "Usage: $0 {start|stop|status}"
# exit 1
# esac
#
# exit 02. 配置Realserver腳本.# #vi /usr/local/sbin/realserver.sh
# #!/bin/bash
# # description: Config realserver lo and apply noarp
# #Written by :NetSeek http://www.linuxtone.org
#
# SNS_VIP=61.164.122.8
#
# . /etc/rc.d/init.d/functions
#
# case "$1" in
# start)
# ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
# /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或者採用secondary ip address方式配置
# vi /etc/sysctl.conf# net.ipv4.conf.lo.arp_ignore = 1
# net.ipv4.conf.lo.arp_announce = 2
# net.ipv4.conf.all.arp_ignore = 1
# net.ipv4.conf.all.arp_announce = 2
#
# #sysctl –p
# #ip addr add 61.164.122.8/32 dev lo
# #ip add list 查看是否綁定3. 啟動lvs-dr腳本和realserver啟本,在DR上可以查看LVS當前狀態: #watch ipvsadm –ln五.利用Keepalvied實現負載均衡和和高可用性
1.配置在主負載均衡伺服器上配置keepalived.conf
#vi /etc/keepalived/keepalived.conf# ! Configuration File for keepalived
#
# global_defs {
# notification_email {
# cnseek@gmail.com
# # failover@firewall.loc
# # sysadmin@firewall.loc
# }
# notification_email_from lvs@gmail.com]sns-lvs@gmail.com
# smtp_server 127.0.0.1
# # smtp_connect_timeout 30
# router_id LVS_DEVEL
# }
#
# # 20081013 written by :netseek
# # VIP1
# vrrp_instance VI_1 {
# state MASTER #備份伺服器上將MASTER改為BACKUP
# interface eth0
# virtual_router_id 51
# priority 100 # 備份服務上將100改為99
# advert_int 1
# authentication {
# auth_type PASS
# auth_pass 1111
# }
# virtual_ipaddress {
# 61.164.122.8
# #(如果有多個VIP,繼續換行填寫.)
# }
# }
#
# virtual_server 61.164.122.8 80 {
# delay_loop 6 #(每隔10秒查詢realserver狀態)
# lb_algo wrr #(lvs 演算法)
# lb_kind DR #(Direct Route)
# persistence_timeout 60 #(同一IP的連接60秒內被分配到同一台realserver)
# protocol TCP #(用TCP協議檢查realserver狀態)
#
# real_server 61.164.122.9 80 {
# weight 3 #(權重)
# TCP_CHECK {
# connect_timeout 10 #(10秒無響應超時)
# nb_get_retry 3
# delay_before_retry 3
# connect_port 80
# }
# }
# real_server 61.164.122.10 80 {
# weight 3
# TCP_CHECK {
# connect_timeout 10
# nb_get_retry 3
# delay_before_retry 3
# connect_port 80
# }
# }
# }2. BACKUP伺服器同上配置,先安裝lvs再按裝keepalived,仍后配置/etc/keepalived/keepalived.conf,只需將紅色標示的部分改一下即可.
3. vi /etc/rc.local
#/usr/local/sbin/lvs-dr.sh 將lvs-dr.sh這個腳本註釋掉。步
#/usr/local/sbin/lvs-dr.sh stop 停止lvs-dr腳本
#/etc/init.d/keepalived start 啟動keepalived 服務,keepalived就能利用keepalived.conf 配
置文件,實現負載均衡和高可用.
4. 查看lvs服務是否正常
#watch ipvsadm –ln
1. IP Virtual Server version 1.2.1 (size=4096)
2. Prot LocalAddress:Port Scheduler Flags
3. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
4. TCP 61.164.122.8:80 wrr persistent 60
5. -> 61.164.122.10:80 Route 3 0 0
6. -> 61.164.122.9:80 Route 3 0 0#tail –f /var/log/message 監聽日誌,查看狀態,測試LVS負載均衡及高可用性是否有效。
5.停Master伺服器的keepalived服務,查看BAKCUP伺服器是否能正常接管服務。
四.相關參考
1.LVS 基礎知識匯總
LVS的演算法介紹 http://www.linuxtone.org/viewthread.php?tid=69
學習LVS的三種轉發模式 http://www.linuxtone.org/viewthread.php?tid=77
LVS中的IP負載均衡技術 http://www.linuxtone.org/viewthread.php?tid=68
更多的請到http://www.linuxtone.org 負載均衡版查看
Keepalived 相關參考資料。
http://www.keepalived.org/documentation.html
提供DOC文檔下載: http://www.linuxtone.org/thread-1077-1-1.html
[ 本帖最後由 gyl4802959 於 2009-1-12 09:22 編輯 ]
《解決方案》
:wink:
《解決方案》
《解決方案》
好貼
頂一個~!
《解決方案》
回復 #1 gyl4802959 的帖子
應用起來是很實用的
不過有一些也是這個項目不能提供的
對於一些需要session的服務,一般還需要應用級別的方式進行配合實現
keepalived是配合lvs實現高可用的方式之一
[ 本帖最後由 kns1024wh 於 2008-11-14 20:11 編輯 ]
《解決方案》
回復 #5 kns1024wh 的帖子
多謝……
:emn10: :emn10: