在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服务器上的内容哦~~
另外,基于这种模式做负载均衡必须要求负载均衡服务器有双网卡,一个对内网,另一个对外网,并且还需要和后面的真实服务器是在同一个局域内。