Centos 6.2高性能负载均衡的实现
LVS的安装配置
减轻服务器的压力,是每个公司都想实现的,方法有很多种,可以用软件实现,也可以用硬件实现,可对于一些中小型企业来说,承受不起硬件负载均衡带来的负担,所以就选择了用软件,本文介绍了用LVS+Keepalived来搭建一个实现高性能高可用负载均衡的环境。
一.LVS+Keepalived介绍
1.LVS
LVS是LinuxVirtualServer的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);
八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
2.Keepalvied
Keepalived在这里主要用作RealServer的健康状态检查LoadBalance主机和
BackUP主机之间failover的实现
二.网站负载均衡拓朴图
IP信息表
LVS-DR-MASTER192.168.2.117
LVS-DR-BACKUP192.168.0.36
LVS-DR-VIP192.168.2.121
WEB1-Realserver192.168.2.116
WEB2-Realserver192.168.2.119
GateWay192.168.0.1
LVS-DR-VIP指的是虚拟IP地址,还可以叫做LVS集群的服务IP,在DR、TUN模式中,数据包是直接返回给用户的,所以,在DirectorServer上以及集群的每个节点上都需要设置这个地址。此IP在RealServer上一般绑定在回环地址上.
各个RealServer可以是在同一个网段内,也可以是相互独立的网段,还可以是分布在internet上的多个服务器.
三.安装LVS和Keepalvied软件包
LVS安装:yum–yinstallipvsadm
Keepalived安装:wgethttp://www.keepalived.org/software/keepalived-1.1.15.tar.gz
#tarzxvfkeepalived-1.1.15.tar.gz
#cdkeepalived-1.1.15
#./configure&&make&&makeinstall
#find/-namekeepalived#查看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/
#servicekeepalivedstart|stop#做成系统启动服务方便管理.
四.配置LVS实现负载均衡
一、LVS-DR-MASTERS设置:
[root@localhost~]#ifconfigeth0:0192.168.2.121broadcast192.168.2.121netmask255.255.255.255up
此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟IP是192.168.2.121,也就是上面我们规划的IP地址,然后指定广播地址也为192.168.2.121,需要特别注意的是,这里的子网掩码为255.255.255.255。
然后给设备eth0:0指定一条路由,执行如下指令:
[root@localhost~]#routeadd-host192.168.2.121deveth0:0
然后用ipvsadm来配置LVS
[root@localhost~]#ipvsadm-A-t192.168.2.121:80-srr-p600
表示在内核的虚拟服务器列表中添加一条192.168.2.121的虚拟服务器记录,并且指定此虚拟服务器的服务端口为80,然后指定此虚拟服务器的调度策略为轮询调度,并且在每个realserver上的持续服务时间为600秒,即10分钟
[root@localhost~]#ipvsadm-a-t192.168.2.121:80-r192.168.2.116:80–g
[root@localhost~]#ipvsadm-a-t192.168.2.121:80-r192.168.2.119:80–g
以上两条设置表示在虚拟服务器192.168.2.121中添加两条新的RealServer记录,两个RealServer的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
#websitedirectorvip.
SNS_VIP=192.168.2.121
SNS_RIP1=192.168.2.119
SNS_RIP2=192.168.2.116
logger$0calledwith$1
case"$1"in
start)
#setsquidvip
/sbin/ipvsadm--set30560
/sbin/ifconfigeth0:0$SNS_VIPbroadcast$SNS_VIPnetmask255.255.255.255up
/sbin/routeadd-host$SNS_VIPdeveth0:0
/sbin/ipvsadm-A-t$SNS_VIP:80-swrr-p3
/sbin/ipvsadm-a-t$SNS_VIP:80-r$SNS_RIP1:80-g-w1
/sbin/ipvsadm-a-t$SNS_VIP:80-r$SNS_RIP2:80-g-w1
touch/var/lock/subsys/ipvsadm>/dev/null2>&1
;;
stop)
/sbin/ipvsadm-C
/sbin/ipvsadm-Z
ifconfigeth0:0down
ifconfigeth0:1down
routedel$SNS_VIP
routedel$SS_VIP
rm-rf/var/lock/subsys/ipvsadm>/dev/null2>&1
echo"ipvsadmstoped"
;;
status)
if[!-e/var/lock/subsys/ipvsadm];then
echo"ipvsadmstoped"
exit1
else
echo"ipvsadmOK"
fi
;;
*)
echo"Usage:$0{start|stop|status}"
exit1
esac
exit0
可以用以上脚本来启动和关闭LVS,只需要./lvs-dr.shstart就可以开启LVS了
二、Realserver的设置
[root@localhost~]#ifconfiglo:0192.168.2.121netmask255.255.255.255broadcast192.168.2.121
在本地回环接口上绑定了一个虚拟设备lo:0设置一个IP为192.168.2.121掩码为255.255.255.255
[root@localhost~]#routeadd-host192.168.2.121devlo: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)地址,是DirectorServer和所有的Realserver共享的,如果有ARP请求VIP地址时,DirectorServer与所有Realserver都做应答的话,就出现问题了,因此,需要禁止Realserver响应ARP请求。
2台WEB1-Realserver都做此配置
以上操作可以用如下脚本来操作:
Vim/usr/local/sbin/realserver.sh
!#/bin/bash
SNS_VIP=192.168.2.121
case"$1"in
start)
ifconfiglo:0$SNS_VIPnetmask255.255.255.255broadcast$SNS_VIP
/sbin/routeadd-host$SNS_VIPdevlo: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/null2>&1
echo"RealServerStartOK"
;;
stop)
ifconfiglo:0down
routedel$SNS_VIP>/dev/null2>&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"RealServerStoped"
;;
*)
echo"Usage:$0{start|stop}"
exit1
esac
exit0
可以用以上脚本来启动和关闭lo:0回环接口上绑定的虚拟设备,只需要./realserverstart
五.利用Keepalvied实现负载均衡和和高可用性
1.配置在主负载均衡服务器上配置keepalived.conf
#vi/etc/keepalived/keepalived.conf
!ConfigurationFileforkeepalived
global_defs{
notification_email{
#[email protected]//报警的邮箱
}
#[email protected]//发送报警邮件的邮箱地址
#smtp_server192.168.200.1//提供邮件服务的服务器的IP
#smtp_connect_timeout30//邮件服务器连接超时的时间
#router_idLVS_DEVEL//邮件的标记
}
vrrp_instanceVI_1{
stateMASTER//#备份服务器上将MASTER改为BACKUP
interfaceeth0
virtual_router_id51
priority100//备份服务上将100改为99
advert_int1
authentication{
auth_typePASS//加密方式
auth_pass1111//密码,MASTER和BACKUP必须一致
}
virtual_ipaddress{
192.168.2.121//#(如果有多个VIP,继续换行填写.)
}
}
virtual_server192.168.2.12180{//虚拟服务器IP和端口
delay_loop6//#(每隔6秒查询realserver状态)
lb_algowrr//#(lvs算法)
lb_kindDR//#(DirectRoute)模式
nat_mask255.255.255.255//子网掩码
persistence_timeout50//#(同一IP的连接60秒内被分配到同一台realserver)
protocolTCP//#(用TCP协议检查realserver状态)
real_server192.168.2.11680{//虚拟服务器下面的realserver的IP和端口
weight1//#(权重),越大被分配到的几率越大
TCP_CHECK{
connect_timeout10//#(10秒无响应超时)
nb_get_retry3//尝试3次
delay_before_retry3//每次间隔3秒
connect_port80//连接端口
}
}
real_server192.168.2.11980{
weight1
TCP_CHECK{
connect_timeout10
nb_get_retry3
delay_before_retry3
connect_port80
}
}
}
2.BACKUP服务器同上配置,先安装lvs再按装keepalived,然后配置
/etc/keepalived/keepalived.conf,只需将红色标示的部分改一下即可.
现在,在Master和backup上都运行脚本./lvs-dr.shatsrt
在Master和backup上启动keepalived。
在realserver都运行脚本./realserver.shstart
然后用ipvsadm–ln来查看集群中的服务器
[root@localhostsbin]#ipvsadm-ln
IPVirtualServerversion1.2.1(size=4096)
ProtLocalAddress:PortSchedulerFlags
->RemoteAddress:PortForwardWeightActiveConnInActConn
TCP192.168.2.121:80wrrpersistent3
->192.168.2.116:80Route100
->192.168.2.119:80Route100
这样,当用户访问192.168.2.121的80端口的时候,就会被随机分配到realserver其中的一台上面,当realserver其中一台宕机的话,LVS会自动把宕机的机器提出服务器群集,当这台宕机的服务器恢复正常的时候,LVS会自动把它加入服务器群集中。
如果LVS-MASTER宕机的话,,LVS-BACKUP就会自动接管LVS-MASTER上运行的服务,当LVS-MASTER恢复正常的时候,LVS-BACKUP就会把运行的服务交给LVS-MASTER来运行。