l LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。 html
l 目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR); linux
十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。 web
l Keepalived在這裏主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現 算法
l 在DR 模式的集羣中,LVS 負載調度器做爲羣集的訪問入口,但不做爲網關使用,服務池中全部節點都各自接入Internet, 發送給客戶機的web響應數據包不須要通過lvs負載調度器。 vim
系統環境(配置好yum源): bash
[root@host1 ~]# cat /etc/redhat-release 服務器
CentOS release 6.2 (Final) 網絡
[root@host1 ~]# uname -a 負載均衡
Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux dom
經過部署Apache應用構建Web服務器測試效果,經過部屬iSCSI作爲存儲服務器。
實驗目標:
實現Web服務器的備份和冗餘,其中任意借點出現故障都會自動切
換,保證應用正常運行。
[root@host1 ~]# modprobe ip_vs
[root@host1 ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@host1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.100
NETMASK=255.255.255.0
[root@host1 ~]# /etc/init.d/network restart
[root@host1 ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:46:D9:DE
inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
[root@host1 ~]# vim /etc/sysctl.conf #避免網絡內的ARP解析出現異常,應該關閉Linux內核的重定向參數響應
#在最後添加
net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 |
[root@host1 ~]# sysctl -p
[root@host1 ~]# yum -y install ipvsadm #ipvsadm是負載調度器上使用LVS羣集管理工具,經過調用ip_vs模塊來添加、刪除服務器節點,以及查看羣集的運行狀態
[root@host1 ~]# ipvsadm -v
ipvsadm v1.25 2008/5/15 (compiled with popt and IPVS v1.2.1)
[root@host1 ~]# mkdir /etc/sysconfig/ipvsadm
[root@host1 ~]# /etc/init.d/ipvsadm restart
[root@host1 ~]# chkconfig ipvsadm on
[root@host1 ~]# yum -y install gcc kernel-devel openssl-devel popt-devel #安裝支持庫
[root@host1 ~]# tar -zxf keepalived-1.2.2.tar.gz
[root@host1 ~]# cd keepalived-1.2.2
[root@host1 ~]# vi keepalived/libipvs-2.6/ip_vs.h
將#include <sys/types.h>放到#include <linux/types.h>的上面
[root@host1 keepalived-1.2.2]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-i686/
[root@host1 keepalived-1.2.2]# make
[root@host1 keepalived-1.2.2]# make install
[root@host1 keepalived-1.2.2]# chkconfig --add keepalived
[root@host1 keepalived-1.2.2]# chkconfig keepalived on
[root@host1 keepalived-1.2.2]# cd /etc/keepalived/
[root@host1 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@host1 keepalived]# vim keepalived.conf #文件裏面全部內容
! Configuration File for keepalived
global_defs { router_id LVS_MASTER #從調度器上改成router_id LVS_SLAVE }
vrrp_instance VI_1 { state MASTER #從調度器上改成state SLAVE interface eth0 virtual_router_id 51 priority 100 #從調度器上改成priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.100 } }
virtual_server 192.168.10.100 80 { delay_loop 6 lb_algo rr lb_kind DR nat_make 255.255.255.0 persistence_timeout 50 protocol TCP
real_server 192.168.10.3 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 } }
real_server 192.168.10.4 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 } } }
|
配置負載分配策略
# /etc/init.d/ipvsadm stop
# ipvsadm –A –t 192.168.10.100:80 –s rr
# ipvsadm –a –t 192.168.10.100:80 –r 192.168.10.3 –g –w 1
# ipvsadm –a –t 192.168.10.100:80 –r 192.168.10.4 –g –w 1
# /etc/init.d/ipvsadm save
# chkconfig ipvsadm on
ipvsadm
從調度器上同上全部配置,先安裝相關軟件包,在安裝keepalived,最後配置/etc/keepalived.conf,只需將註釋的地方修改便可
(1)分別在2臺RealServer(節點)上面編寫腳本
[root@host3 ~]# vim /etc/init.d/realserver.sh
#!/bin/bash VIP=192.168.10.100 startrs() { echo "start LVS of REALServer" /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $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 } stoprs() { /sbin/ifconfig lo:0 down echo "close LVS Directorserver" 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 } # ============ Main =========== case $1 in "start") startrs;; "stop") stoprs;; "*") echo "Usage $0 {start|stop}" exit 1 esac
|
[root@host3 ~]# chmod +x /etc/init.d/realserver.sh
[root@host3 ~]#/etc/init.d/realserver.sh start
(2)在2臺RealServer(節點)中分別配置HTTP並啓動realserver.sh
[root@host3 ~]# yum -y install httpd
[root@host3 ~]# cd /var/www/html/
[root@host3 html]# echo "192.168.10.3" > index.html
[root@host3 html]# cat index.html
192.168.10.3
[root@host4 html]# cat index.html #兩臺節點的配置除了網頁不同(爲了更明顯的看到測試效果),其餘都同樣
192.168.10.4
[root@host3 ~]# /etc/init.d/realserver.sh start
[root@host3 ~]# echo "/etc/init.d/realserver.sh start" >> /etc/rc.local
[root@host3 html]# /etc/init.d/httpd start
[root@host3 html]# chkconfig httpd on
(3)給2臺節點添加一條路由記錄,將訪問VIP的數據限制在本地以免通訊紊亂
[root@host4 ~]# route add -host 192.168.10.100 dev lo:0
[root@host4 ~]# echo "/sbin/route add -host 192.168.10.100 dev lo:0" >> /etc/rc.local
另外一臺的配置過程同樣,過程略
在兩臺調度器上分別啓動Keepalived
[root@host1 ~]# /etc/init.d/keepalived restart
[root@host1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.100:80 rr persistent 50
-> 192.168.10.3:80 Route 1 0 0
-> 192.168.10.4:80 Route 1 0 0
使用客戶機訪問<http://192.168.10.100>,使主調度器掛掉看是否可以訪問
使用客戶機訪問<http://192.168.10.100>,使一個節點掛掉看是否可以訪問