Chinaunix首页 | 论坛 | 博客
  • 博客访问: 282685
  • 博文数量: 107
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 74
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-18 09:57
文章分类

全部博文(107)

文章存档

2023年(2)

2021年(1)

2017年(1)

2015年(4)

2014年(9)

2013年(4)

2012年(14)

2011年(49)

2010年(23)

分类: LINUX

2011-07-20 14:54:37

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表。

再次测试。

阅读(1001) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~