Centos 6.2高性能负载均衡的实现
IP信息表
LVS-DR-MASTER??? 192.168.2.117
LVS-DR-BACKUP??? 192.168.0.36
LVS-DR-VIP???????? 192.168.2.121
WEB1-Realserver???? 192.168.2.116
WEB2-Realserver???? 192.168.2.119
GateWay??????????? 192.168.0.1
LVS-DR-VIP指的是虚拟IP地址,还可以叫做LVS集群的服务IP,在DR、TUN模式中,数据包是直接返回给用户的,所以,在Director Server上以及集群的每个节点上都需要设置这个地址。此IP在Real Server上一般绑定在回环地址上.
各个Real Server可以是在同一个网段内,也可以是相互独立的网段,还可以是分布在internet上的多个服务器.
三.?? 安装LVS 和Keepalvied 软件包
LVS安装:yum –y install ipvsadm
Keepalived安装:wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
#tar zxvf keepalived-1.1.15.tar.gz?
#cd keepalived-1.1.15?
#./configure?? && make && make install?
#find / -name keepalived???? # 查看keepalived 位置?
?#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/?
?#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/?
#mkdir /etc/keepalived?
#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/?
?#cp /usr/local/sbin/keepalived /usr/sbin/?
?#service keepalived start|stop?????? #做成系统启动服务方便管理.
四.? 配置LVS 实现负载均衡
一、LVS-DR-MASTERS设置:
[root@localhost ~]#ifconfig eth0:0 192.168.2.121 broadcast 192.168.2.121 netmask 255.255.255.255 up
此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟IP是192.168.2.121,也就是上面我们规划的IP地址,然后指定广播地址也为192.168.2.121,需要特别注意的是,这里的子网掩码为255.255.255.255。
然后给设备eth0:0指定一条路由,执行如下指令:
[root@localhost ~]#route add -host 192.168.2.121 dev eth0:0????
然后用ipvsadm来配置LVS
[root@localhost ~]# ipvsadm -A -t 192.168.2.121:80 -s rr -p 600
表示在内核的虚拟服务器列表中添加一条192.168.2.121的虚拟服务器记录,并且指定此虚拟服务器的服务端口为80,然后指定此虚拟服务器的调度策略为轮询调度,并且在每个real server上的持续服务时间为600秒,即10分钟
[root@localhost ~]# ipvsadm -a -t 192.168.2.121:80 -r 192.168.2.116:80 –g
[root@localhost ~]# ipvsadm -a -t 192.168.2.121:80 -r 192.168.2.119:80 –g
以上两条设置表示在虚拟服务器192.168.2.121中添加两条新的Real Server记录,两个Real Server的IP分别为192.168.2.116和192.168.2.119,参数“-g”指定了虚拟服务器的工作模式为直接路由模式,即DR模式。
然后开启数据转发功能 并且立即生效
[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward
[root@localhost ~]#sysctrl –p???
以上的操作可以用脚本来实现
Vim /usr/local/sbin/lvs-dr.sh
#!/bin/bash
GW=192.168.0.1
# website director vip.
SNS_VIP=192.168.2.121
SNS_RIP1=192.168.2.119
SNS_RIP2=192.168.2.116
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 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 0
可以用以上脚本来启动和关闭LVS,只需要./ lvs-dr.sh start就可以开启LVS了
二、Realserver的设置
[root@localhost ~]#ifconfig lo:0 192.168.2.121 netmask 255.255.255.255 broadcast 192.168.2.121
在本地回环接口上绑定了一个虚拟设备lo:0 设置一个IP为192.168.2.121 掩码为255.255.255.255?
[root@localhost ~]#route add -host 192.168.2.121 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
以上是忽略arp请求,立即生效。
由于虚拟ip,也就是上面的LVS-DR-VIP(192.168.2.121)地址,是Director Server和所有的Real server共享的,如果有ARP请求VIP地址时,Director Server与所有Real server都做应答的话,就出现问题了,因此,需要禁止Real server响应ARP请求。
2台WEB1-Realserver都做此配置
以上操作可以用如下脚本来操作:
Vim /usr/local/sbin/realserver.sh
!#/bin/bash
SNS_VIP=192.168.2.121
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
可以用以上脚本来启动和关闭lo:0回环接口上绑定的虚拟设备,只需要./realserver? start
五.利用Keepalvied 实现负载均衡和和高可用性?
1.配置在主负载均衡服务器上配置keepalived.conf?
#vi /etc/keepalived/keepalived.conf?
! Configuration File for keepalived
global_defs {
?? notification_email {
#???? acassen@firewall.loc????????????????? //报警的邮箱????
?? }
#?? notification_email_from Alexandre.Cassen@firewall.loc?????????? //发送报警邮件的邮箱地址
#?? smtp_server 192.168.200.1???????????????????? //提供邮件服务的服务器的IP
#?? smtp_connect_timeout 30????????????????????? //邮件服务器连接超时的时间
#?? router_id LVS_DEVEL??????????????????????? //邮件的标记
}
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????????? //密码,MASTER 和BACKUP必须一致
??? }
??? virtual_ipaddress {
??????? 192.168.2.121?????????? // #(如果有多个VIP,继续换行填写.)
??? }
}
virtual_server 192.168.2.121 80 {???????? //虚拟服务器IP和端口
??? delay_loop 6???????????????????? // #(每隔6 秒查询realserver 状态)
??? lb_algo wrr????????????????????? // #(lvs 算法)
??? lb_kind DR????????????????????? // #(Direct Route)模式
??? nat_mask 255.255.255.255????????? //子网掩码
??? persistence_timeout 50????? // #( 同一IP 的连接60 秒内被分配到同一台realserver)
??? protocol TCP??????????????? // #(用TCP 协议检查realserver 状态)
??? real_server 192.168.2.116 80 {???? //虚拟服务器下面的realserver的IP和端口
??????? weight 1????????????????? //#(权重),越大被分配到的几率越大
??????? TCP_CHECK {
??????? connect_timeout 10????????? // #(10 秒无响应超时)
??????? nb_get_retry 3????????????? //尝试3次
??????? delay_before_retry 3???????? //每次间隔3秒
??????? connect_port 80???????????? //连接端口
??????????????? }
???? }
??? real_server 192.168.2.119 80 {
??????? weight 1
??????? TCP_CHECK {
??????? connect_timeout 10
??????? nb_get_retry 3
??????? delay_before_retry 3
??????? connect_port 80
??????????????? }
???? }
}
2.?? BACKUP服 务 器 同 上 配 置 ,先 安 装 lvs再 按 装? keepalived,? 然 后 配 置?
/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可.
现在,在Master和backup上都运行脚本./lvs-dr.sh atsrt
在Master和backup上启动keepalived。
在realserver都运行脚本./realserver.sh start
然后用ipvsadm –ln来查看集群中的服务器
[root@localhost sbin]# 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.2.121:80 wrr persistent 3
? -> 192.168.2.116:80???????????? Route?? 1????? 0????????? 0?????????
? -> 192.168.2.119:80???????????? Route?? 1????? 0????????? 0??????
这样,当用户访问192.168.2.121的80端口的时候,就会被随机分配到realserver其中的一台上面,当realserver其中一台宕机的话,LVS会自动把宕机的机器提出服务器群集,当这台宕机的服务器恢复正常的时候,LVS会自动把它加入服务器群集中。
如果LVS-MASTER宕机的话,,LVS- BACKUP就会自动接管LVS-MASTER上运行的服务,当LVS-MASTER恢复正常的时候,LVS- BACKUP就会把运行的服务交给LVS-MASTER来运行。