RHEL5配置LVS(DR)负载均衡的方法:
准备工作:
1、安装3台RHEL5服务器,也可以是VMware虚拟机。
2、在所有服务器上执行rpm -qa |grep ipvsadm。如果返回结果为空,请从光盘中找到ipvsadm-软件
包进行安装。
3、准备4个IP地址。下例中的IP为:192.168.2.1 192.168.2.6 192.168.2.7 192.168.2.8
用如下环境来说明:
Server A: LVS负载均衡服务器 (物理IP: 192.168.2.6 浮动IP: 192.168.2.1)
Server B: SSH Server (192.168.2.7)
Server C: SSH Server (192.168.2.8)
对外的服务IP地址:192.168.2.1
目标是:用户访问192.168.2.1的时候,请求就会以轮循的方式自动分配到Server B或者Server C上。
为了达到目标, 我们需要分别对三台Server进行配置。
Server A
首先, 需要打开IP转发并且抑制arp的一些功能。修改/etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
然后, 执行: sysctl -p
接下来,将对外的IP绑定到Serve A上:
ifconfig eth0:0 192.168.2.1 netmask 255.255.255.255
再添加路由:
route add -host 192.168.2.1 dev eth0:0
注册SSH服务,并指定负载均衡方式为round robin:
ipvsadm -A -t 192.168.2.1:22 -s rr
把Server B和Server C的存在告诉Server A:
ipvsadm -a -t 192.168.2.1:22 -r 192.168.2.7 -g
ipvsadm -a -t 192.168.2.1:22 -r 192.168.2.8 -g
Server B & Server C
首先, 和Server A一样来配置/etc/sysctl.conf。 注意, Server B和Server C不需要打开IP_FORWARD:
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
然后, 执行:sysctl -p
接下来, 绑定浮动IP,即服务IP到回环地址:
ifconfig lo:0 192.168.2.1 netmask 255.255.255.255
route add -host 192.168.2.1 dev lo:0
如此以来, 对于192.168.2.1:22的访问就会按照“rr“的算法路由至B或者C上。
其他的负载均衡算法可以参照ipvsadm的man.
好了。现在用ssh客户端来测试吧。
问题: 有时候会出现调度全部被发送到同一台服务器的情况,如192.168.2.7,可以用以下办法解决:
在测试客户端上执行:
arp -a
检查浮动IP对应的MAC地址是否是Server A的MAC地址。只有该MAC是ServerA的MAC,ServerA才能正常调度。
arp -d
可以清空当前arp表。
再次测试。
阅读(994) | 评论(0) | 转发(0) |