目录

前言

1 、 LVS 环境组网

2 、 ipvsadm 安装前准备

3 、 httpd 与 ipvsadm 下载

4 、 LVS 负载均衡配置

5 、真实 WEB 服务器配置及 arp 抑制

6 、 LVS 负载均衡测试

7 、附: arp 抑制参数

前言

本文主要讲解 centos5.x LVS DR 模式,环境搭建,理论知识请参考 LVS 中文官网

http://www.linuxvirtualserver.org/zh/index.html

该页面可能显示乱码,如果有乱码,在 IE 上右键勾上状态栏,然后在页面栏下拉选项中选择编码,有( GB2312 和 UTF-8 ),如果 UTF-8 显示乱码,则选 GB2312 。如果 GB2312 显示乱码,则选



1 、 LVS 环境组网

由于是使用的 VM 环境,自己 PC 当作客户机(即公网地址),调度器与服务器都是 VM 中虚拟机,所以客户和所有服务器之间都是物理直接相连网络 , 逻辑拓扑图如下:

2 、 ipvsadm 安装前准备

外部 IP 地址

内部 IP 地址

角色

10.0.0.30/24

192.168.1.1/24

调度器(虚拟机)

10.0.0.237/24

192.168.1.2/24

(虚拟机)

10.0.0.238/24

192.168.1.3/24

(虚拟机)

10.0.0.130/24

客户机(自己电脑)

注:实际应用中 RS1 RS2 没有外部地址,当前环境中,没有物理双网卡环境,都采用一个网卡配置多个 IP 地址。

3 、 httpd 与 ipvsadm 下载

)在各服务器上修改主机名:

hostname LVS1

hostname RS1

hostname RS2

)在 RS1 RS2 上安装 httpd 服务

yum installhttpd –y

/etc/init.d/httpd start

ps -ef|grephttpd

yum installhttpd –y

/etc/init.d/httpdstart

ps -ef|grephttpd <== 查看 httpd 服务是否起来

cat/etc/httpd/conf/httpd.conf|grep DocumentRoot   <== 查找系统站点目录路径

# DocumentRoot: The directoryout of which you will serve your

DocumentRoot"/var/www/html"

# This should be changed towhatever you set DocumentRoot to.

#    DocumentRoot/www/docs/dummy-host.example.com

[root@RS1 ~]# echo"RS1" >/var/www/html/index.html

[root@RS2 src]# echo"RS2" >/var/www/html/index.html

服务测试:

测试成功!

)下载

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

我所使用的源包下载目录

我的 LVS 环境:

cat/etc/redhat-release

CentOS release 5.8 (Final)

uname -rm

2.6.18

对内核有要求,要求内核版本在 2.6.28 及以后的版本,如果符合了系统环境,还要安装依赖包 yum install libnl*popt* -y 。

我的内核版本不满足,使用 ipvsadm-1.24 。

tar -zxfipvsadm-1.24.tar.gz

[root@LVS1 src]# ln -s /usr/src/kernels/2.6.18-348.12.1.el5-x86_64/usr/src/linux<== 编译有使用的路径为 /usr/src/linux ,可在 Makefile 中查看,如果不做链接,会编译失败

ll /usr/src/

total 16

drwxr-xr-x 2 root root 4096 May11  2011 debug

drwxr-xr-x 3 root root 4096Aug  5 03:53 kernels

lrwxrwxrwx1 root root   43 Aug  5 03:56 linux ->/usr/src/kernels/2.6.18-348.12.1.el5-x86_64 <== 要使用 ll /usr/src/ 查看,如果软链接一闪一闪的,代表链接失败

cd ipvsadm-1.24

make&&make install   <== 如果编译失败,请按上面步骤一步一步排错。

lsmod |grepip_vs     <== 查看内核模块是否有 ipvsadm

ipvsadm

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:PortScheduler Flags

 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

# 还有一种加载 ipvsadm 方法,用 modprobe ip_vs

lsmod |grepip_vs   <== 查看内核模块,有代表 ipvsadm加载进内核当中,此时 LVS 安装完毕

ip_vs                 122113  0

4 、 LVS 负载均衡配置

)配置 VIP 和

配置参考步骤 2 安装准备

ifconfig eth010.0.0.30 netmask 255.255.255.0   #VIP

ifconfigeth0:1 192.168.1.1 netmask 255.255.255.0 #DIP

)添加真实服务器

ipvsadm –C       <== 手工清空原来表内容

ipvsadm --set30 5 60   <== 设置连接超时值

ipvsadm -A -t10.0.0.30:80 -s wrr -p 20   <== -A 添加地址, -t 指定 VIP TCP 端口, -s 指定调度算法 –p 会话保持时间

<== 查看表内容,添加了一组 VIP 地址和端口

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:PortScheduler Flags

 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.0.0.30:80 wrr persistent 20

ipvsadm -a -t10.0.0.30:80 -r 192.168.1.2:80 -g -w 1   <== -a 指定真实服务器, -t lvs 上 VIP , -r 真实服务器 ip 及端口, -w 权重值 , -g 先择 DR 模式( -m 为 NAT 模式)

ipvsadm -a -t10.0.0.30:80 -r 192.168.1.3:80 -g -w 1

ipvsadm -L –n       <== 查看表内容,添加了两台负载转发的真实服务器

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:PortScheduler Flags

 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.0.0.30:80 wrr persistent 20

 -> 192.168.1.2:80               Route   1     0          0        

 -> 192.168.1.3:80               Route   1     0          0

如果添加服务器地址写错了,可用如下命令删除,即大 A 添加改为大 D 删除,小 a添加改为小 d 删除

ipvsadm –D –t10.0.0.30:80 –s wrr

ipvsadm –d –t10.0.0.30:80 –r 192.168.1.2:80

5 、真实 WEB 服务器配置及 arp 抑制

<== 此地址用来自己电脑用 CRT 软件登陆设备,同时也用来发送 arp 请求客户机 MAC (因为是直接返回页面给客户机,而当前网络是同一物理网段,必须同网段才正常)。

         inet addr:10.0.0.237  Bcast:10.0.0.255  Mask:255.255.255.0

<== 配置内部 IP地址

<== 每台真实服务器都需要配置 VIP

为什么要绑定 VIP 呢? 因为 DR 模式原理是 LVS 调度器修改 mac 地址为真实服务器地址,报文的目的 IP 还是 VIP 没修改,,网卡只会把目的 MAC 和目的 IP 都是自己的报文上送 CPU ,所以真实服务器上必须配置 VIP!

为什么使用 lo 口呢? 因为 lo 口为本地环回口,防止本地局域网 IP 地址冲突 !

<== 此地址用来自己电脑用 CRT 软件登陆设备,同时也用来发送 arp 请求客户机 MAC (因为是直接返回页面给客户机,而当前网络是同一物理网段,必须同网段才正常)。

         inet addr:10.0.0.238  Bcast:10.0.0.255  Mask:255.255.255.0

<== 配置内部 IP 地址

[root@RS2 src]# ifconfig lo10.0.0.30 netmask 255.255.255.255  

此时配置完成,只是测试时出现一个问题,再次登陆 CRT 中 10.0.0.30 地址时,登陆到 RS1 上去了,再刷新,登陆到 RS2 上去了。怎么解决呢?

通过分析,得出,访问 10.0.0.30 时,会发送 arp 请求 10.0.0.30 的 mac, 而这个网络中有 3 个 10.0.0.30 地址,此时,那谁给的 arp 回应到客户机,访问的就是谁了。如果 RS1 的 arp 回应先到,就访问的 RS1 了

解决方法:

抑制 ARP 响应

该抑制只在真实服务器上配置

[root@RS1 ~]# echo"1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@RS1 ~]# echo"2" >/proc/sys/net/ipv4/conf/lo/arp_announce

[root@RS1 ~]# echo"1" >/proc/sys/net/ipv4/conf/all/arp_ignore

[root@RS1 ~]# echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce

[root@RS2 src]# echo"1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@RS2 src]# echo"2" >/proc/sys/net/ipv4/conf/lo/arp_announce

[root@RS2 src]# echo"1" >/proc/sys/net/ipv4/conf/all/arp_ignore

[root@RS2 src]# echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce

都代表什么内容,可在最后附录中查看,也可自己网上搜索

6 、 LVS 负载均衡测试

显示的值是 RS1, 则此时该链接是分配到 192.168.1.2 上

我们使用的是 wrr 调度算法,该算法中,谁的权重值高,会优先分配给谁

查看配置,发现权重值一样

ipvsadm -L -n

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:PortScheduler Flags

Weight

TCP  10.0.0.30:80 wrr persistent 20

1    

1    

由于有会话保持功能,接下来修改权重值

删除原来配置

重新配置权重值为

[root@LVS1 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:PortScheduler Flags

Weight

TCP  10.0.0.30:80 wrr persistent 20

2    

1    

再次进行测试:

7 、附: arp 抑制参数

arp 响应限制

定义对目标地址为本地 IP 的 ARP 询问不同的应答模式

默认值 ): 回应任何网络接口上对任何本地 IP 地址的 arp 查询请求

1 - 只回答目标地址是来访网络接口本地地址的 ARP 查询请求

只回答目标 IP 地址是来访网络接口本地地址的 ARP 查询请求 , 且来访 IP 必须在该网络接口的子网段内

不回应该网络界面的 arp 请求,而只对设置的唯一和连接地址做出回应

保留未使用

不回应所有(本地地址)的 arp 查询

对网络接口上,本地 IP 地址的发出的, ARP 回应,作出相应级别的限制 : 确定不同程度的限制 , 宣布对来自本地源 IP 地址发出 Arp 请求的接口

默认 ) 在任意网络接口( eth0,eth1 , lo )上的任何本地地址

尽量避免不在该网络接口子网段的本地地址做出 arp 回应 . 当发起 ARP 请求的源IP 地址是被设置应该经由路由达到此网络接口的时候很有用 . 此时会检查来访 IP 是否为所有接口上的子网段内 ip 之一 . 如果改来访 IP 不属于各个网络接口上的子网段内 ,那么将采用级别 2 的方式来进行处理

对查询目标使用最适当的本地地址 . 在此模式下将忽略这个 IP 数据包的源地址并尝试选择与能与该地址通信的本地地址 . 首要是选择所有的网络接口的子网中外出访问子网中包含该目标 IP 地址的本地地址 . 如果没有合适的地址被发现 , 将选择当前的发送网络接口或其他的有可能接受到该 ARP 回应的网络接口来进行发送