一、爲什麼要使用負載均衡技術?
1、系統高可用性
2、系統可擴展性
3、負載均衡能力
LVS+keepalived能很好的實現以上的要求,LVS提 供負載均衡,keepalived提供健康檢查,故障轉移,提高系統的可用性!採用這樣的架構以後 很容易對現有系統進行擴展,只要在後端添加或者減少realserver,只要更改lvs的 配置文件,並能實現無縫配置變更!
二、LVS+Keepalived介紹
1、 LVS
LVS是一個開源的軟件,可以實現LINUX平臺下的簡單負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。目前有三種IP負 載均衡技術(VS/NAT、VS/TUN和VS/DR);八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
2、 keepalived
Keepalived 是運行在lvs 之上,它的主要功能是實現真實機的故障隔離及負載均衡器間的失敗 切換,提高系統的可用性
三、LVS+keepalived負載均衡架構
四、LVS+keepalived的安裝和配置
1、配置環境
System OS:CentOS release 5.4
Software:ipvsadm-1.24.tar.gz, keepalived-1.1.19.tar.gz
2、信息列表
名稱 |
IP |
LVS-Master |
192.168.5.21 |
LVS-BACKUP |
192.168.5.22 |
LVS-VIP |
192.168.5.100 |
Realserver1 |
192.168.5.31 |
Realserver2 |
192.168.5.32 |
Realserver3 |
192.168.5.33 |
3、安裝lvs
分別在backup lvs和master lvs上安裝
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux tar zxvf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 make && make install
4、安裝keepalived
分別在backup lvs和master lvs上安裝
wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz tar zxvf keepalived-1.1.19.tar.gz cd keepalived-1.1.19 ./configure --prefix=/usr/local/keepalived make make install cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ mkdir /etc/keepalived
5、配置keepadlived
LVS-Master的配置文件如下,LVS-Backup的配置文件需要按照註釋更改數值。
[root@linux ~]# cat /etc/keepalived/keepalived.conf! 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_DEVEL_MASTER #備份服務器改爲 LVS_DEVEL_BACKUP } vrrp_sync_group test { #設置vrrp組 group { loadbalance } } vrrp_instance VI_1 { state MASTER #備份服務器改爲 BACKUP interface eth2 virtual_router_id 51 priority 150 #備份服務器改爲 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.5.100 #可以爲多個VIP,各佔一行 } } virtual_server 192.168.5.100 80 { delay_loop 6 lb_algo rr #負載均衡算法 rr|wrr|lc|wlc|sh|dh|lblc lb_kind DR #可以爲 NAT|DR|TUN nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP #TCP|UDP real_server 192.168.5.31 80 { weight 100 #權重,越大就越容易被非配 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 #端口號 } } real_server 192.168.5.32 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.5.33 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } virtual_server 192.168.5.100 5060 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol UDP real_server 192.168.5.41 5060 { weight 100 MISC_CHECK { misc_path "/etc/keepalived/UDP_CHECK.sh 192.168.5.41 5060" #UDP檢測腳本 misc_timeout 10 } } real_server 192.168.5.42 5060 { weight 100 MISC_CHECK { misc_path "/etc/keepalived/UDP_CHECK.sh 192.168.5.42 5060" misc_timeout 10 } } } }
UDP_CHECK.sh的腳本文件如下
#!/bin/bash /usr/bin/nc -uz -w1 $1 $2 | grep succeeded >/dev/null exit $?
6、Realserver的配置
三臺客戶端的腳本都一樣!
cat /etc/rc.d/init.d/realserver.sh#!/bin/bash #description : Start Real Server VIP=192.168.5.100 #Virtual Server IP ./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 #注意子網掩碼 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 -arp 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 ;; stop) /sbin/ifconfig lo:0 down echo "close LVS of Real Server" 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 sysctl -p ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
7、 測試
1) 首先測試各個readserver,確定各個readserver都能正常訪問,測試realserver.sh腳本,看啓動後 能不能綁定lvs vip,停止後能不能去除綁定的vip
2) 測試lvs能否進行負載均衡轉發,利用ipvsadm命令查看,如果想只當當前的 請求轉發到哪個服務器去了,可以用ipvsadm加選項來查看,其完整形式爲:ipvsadm –lcn | grep 192.168.5.31
3) 停掉主lvs看lvs backup是否接管!
4) 更詳細信息請查看日誌,tail -f /var/log/messages