在Linux环境下,我们可以使用LVS来作为Web服务的负载均衡。由于LVS基于IP协议,所以LVS又被叫做ipvs。
在本文中,LVS服务运行与IP地址为172.16.24.139的服务器,两台Web服务器的IP地址分别为172.16.24.134、172.16.24.136。
假设你的Linux服务器中已经安装好了ipvsadm和keepalived。
如果没有安装,可以通过yum源来进行安装。
# yum install ipvsadm keepalived
下面直接说ipvsadm和keepalived的配置。
1、LVS + keepalived 的配置
由于keepalived与ipvsadm的深度整合,可以由keepalived来对ipvsadm的虚IP以及实体服务器IP进行托管。所以我们这里在安装好ipvsadm和keepalived之后,只需要修改keepalived的配置,并且启动keepalived服务,即可实现对ipvsadm的配置与管理。
修改keepalived的配置文件
# vim /etc/keepalived/keepalived.conf
配置文件内容如下:
global_defs {
router_id LVS_DEVEL
}
vrrp_instance LVS_WEB {
state MASTER # 注意:如果Keepalived的备机,这里是SLAVE
interface eth0
virtual_router_id 51
priority 100 # 注意:这里是主备的权重,备一般权重低于主
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.24.140 # 虚IP
}
}
# 定义虚拟服务器
virtual_server 172.16.24.140 80 {
delay_loop 3
lb_algo rr # 负载均衡算法
lb_kind DR # LVS工作模式
persistence_timeout 0 # 会话保存时长(秒),0表示不使用stickyness会话
protocol TCP
# 定义实体服务器
real_server 172.16.24.134 80 {
weight 1 # 权重
HTTP_GET {
url {
path /testurl/test.jsp # 验证实体服务器状态地址
digest 640205b7b0fc66c1ea91c463fac6334d # 验证地址内容的md5摘要
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
# 定义实体服务器
real_server 172.16.24.136 80 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
修改系统网络设置:
# vim /etc/sysctl.conf
在文件中修改下面内容:
net.ipv4.ip_forward = 1
以上命令逐一执行完毕,并且无系统报错后,设置keepalived开机自启动,并立即启动keepalived服务:
# chkconfig keepalived on
# service keepalived start
可以通过ipvsadm命令来查看负载均衡器的配置。
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.24.140:http rr
-> 172.16.24.134:http Route 1 0 0
-> 172.16.24.136:http Route 1 0 0
如看到上面信息,说明负载均衡器配置成功。
2、实体服务器配置
假设在你的实体服务器中,已经安装并且配置好了Web服务。
两台实体Web服务器的配置如下,分别在两台Web服务器上依次执行下面的命令:
# ifconfig lo:0 172.16.24.140 netmask 255.255.255.255 broadcast 172.16.24.140
# route add default gw 172.16.24.140
# 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
上面是临时修改配置的方法,如果需要做永久性修改的话,按照下面的说明来。
添加一个虚拟IP地址:
# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
向文件中写入下面内容:
DEVICE=lo:0
IPADDR=172.16.24.140
NETMASK=255.255.255.255
BROADCAST=172.16.24.140
ONBOOT=yes
NAME=loopbackvip
修改系统网络设置:
# vim /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
OK,你可以reboot你的实体服务器了。
3、配置完成,看效果
打开浏览器,在浏览器中输入虚拟IP地址(172.16.24.140),有可能分别看到两台Web服务器上的内容哦~~
另外,基于这种模式做负载均衡必须要求负载均衡服务器有双网卡,一个对内网,另一个对外网,并且还需要和后面的真实服务器是在同一个局域内。