LVS负载均衡(二) NAT和DR的应用配置

LVS负载均衡(二) NAT和DR的应用配置

                                                           

上一篇我们较为全面认识LVS,下面我们将分别配置NAT和DR的应用。

1、NAT方式配置

这种方式需要Director和各Real Server在同一IP网络内(172.16.100.*),具体配置如下:

Director:eht0—VIP:192.168.0.146        eth1—DIP:172.16.100.1

Real Server1(RS1): eth0--RIP: 172.16.100.2    netmask:172.16.100.1

Real Server2(RS2): eth0--RIP: 172.16.100.3    netmask:172.16.100.1

1-1、Director配置

1-1-1、配置双网卡

添加两网卡适配器:类型为NAT和HOST ONLY;

如在/etc/sysconfig/network-sprict/下没有ifcfg-eth1,复制ifcfg-eth0;

在两个文件中分别配置IP等信息;

最后执行service network restart,重启网络服务,使配置信息生效;

最终配置如下:

LVS负载均衡(二) NAT和DR的应用配置

需要注意的是:

A、如在虚拟机上操作,先关机再添加网卡适配器,

B、NAT网卡作为外网访问,HOST ONLY网卡对内转发给各Real Server,所以这里NAT网卡VIP可以直接使用本地局域网IP(VIP)--192.168.0.146(需要配上路由网关),HOST ONLY网卡IP为自定义的内网IP(DIP)--172.16.100.1,且不用配置网关,该IP会作为内网中各Real Server的网关(下面详见);

1-1-2、安装ipvsadm

配置好yum源,执行yum install ipvsadm。

1-1-3、配置Director负载均衡规则

service iptables stop

ipvsadm -A -t 192.168.0.146:80 -s wrr

ipvsadm -a -t 192.168.0.146:80 -r 172.16.100.2 -m -w 1

ipvsadm -a -t 192.168.0.146:80 -r 172.16.100.3 -m -w 3

查看:ipvsadm -L -n

LVS负载均衡(二) NAT和DR的应用配置

1-2、配置两台Real Server

1-2-1、安装配置httpd

注意这里比下面的配置ip先操作,这时候可以把网卡配置成NAT联网安装;

1-2-2、配置ip

Real Server1的IP(RIP)为172.16.100.2,网关指向Director的HOST ONLY网卡172.16.100.1;

Real Server2的IP为172.16.100.3,网关指向Director的HOST ONLY网卡172.16.100.1;

注意:

这里得把网卡类型改回HOST ONLY;

1-3、测试

设置好后,Director与两台Real Server能相互ping通;

LVS负载均衡(二) NAT和DR的应用配置

用另一台虚拟机当作Client,用ab访问测试:

ab –n 1000 –c 100 http://192.168.0.146/index.html

ab –n 10000 –c 100 http://192.168.0.146/index.html

       两次测试,分别测试WRR与RR调度策略(RR测试的时候不小心连到另一个路由器,使得ip改变),可以看到WRR时,连接数基本上是符合RS1:RS2=1:3的权重调度,而RR时,连接数为1:1,下图为两次测试数据:

LVS负载均衡(二) NAT和DR的应用配置

LVS负载均衡(二) NAT和DR的应用配置

注意:

        如果iptables配置有过滤等规则,可以先关掉iptables;

配置director打开网卡间的转发功能,echo '1' >/proc/sys/net/ipv4/ ip_forward

 

2、DR方式配置

这种方式需要Director和各Real Server在同一物理LAN内,操作中各虚拟机网卡使用桥接的方式即可,具体配置如下:

Director:eht0—DIP:192.168.1.101        eth0:0—VIP:192.168.1.100

        Real Server1: eth0--RIP: 192.168.1.102        lo:0—VIP:192.168.1.100

Real Server2: eth0--RIP: 192.168.1.103        lo:0--VIP:192.168.1.100

值得注意,Real Server上的一个网卡配置RIP/VIP,eth0--RIP,lo:0—VIP,这里有两个问题:

2-1、Real Server上的VIP对外不可见

      即对网络内的VIP的ARP请求,Real Server不响应,只有Director响应,这样Client的请求就能首先路由到Director,再由Director转发到Real Server;

      达到上面的目的可以有多种方法,如配置VIP: MAC(DVIP)、使用arptables工具等,这里用到了设置内核参数arp_ignore和arp_announce的方法(all为全局设置):

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

2-1-1、arp_ignore

定义接收到ARP请求时的响应级别;

       arp_ignore=1 表示Real Server的eth0接收到网络上发来对VIP的ARP广播包,Real Server的将会丢弃,而不会因为lo:0配置有VIP去响应MAC地址;因为如果做出应答,根据ARP协议,相当于通告网络上其它的请求主机,VIP对应的MAC地址是Real Server的Mac地址,而不是Director的MAC地址,这样客户端请求就会绕过Director,直接与后端的Real Server通信。

2-1-2、arp_announce

定义将自己地址向外通告时的通告级别;

       arp_announce=2 官方表述为使用最适当的本地地址,其实就是Real Server发送ARP请求报的时候将哪个IP作为源地址,我们需要的是eth0上的RIP作为源地址;如果将lo:0上的VIP作为源地址,对方就会将VIP与Real Server的MAC地址映射起来,同样的客户端请求就会绕过director,直接与后端的Real Server通信。

2-2、Real Server直接返回Client

     Director转发client的请求到Real Server后,Real Server通过eth0--RIP接收处理,而响应回去的源地址需要为VIP,即通过lo:0--VIP接口返回,而不是RIP接口;

     可以在Real Server上添加一个特征的路由条目来实现,使得目标host为VIP的数据,都经由dev的指定eht0:0/lo:0接口进去:

route add -host 192.168.1.100 dev lo:0

注意:假如VIP与RIP不在同一网段(RIP为私有网络IP),Real Server转发Client的需要经由另外一个私有网关接口出去;

2-3、Director配置

   [[email protected] ~]# ifconfig eth0 192.168.1.101

   [[email protected] ~]# ifconfig eth0:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up    //配置成专用网络,并且只有eth0:0一台主机

[[email protected] ~]# route add -host 192.168.1.100 dev eth0:0

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

     Ipvs规则配置:

[[email protected] ~]# iptables -F

   [[email protected] ~]# iptables -Z

[[email protected] ~]# ipvsadm -C

[[email protected] ~]# ipvsadm -A -t 192.168.1.100:80 -s wrr

   [[email protected] ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102 -g -w 1

   [[email protected] ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103 -g -w 3

[[email protected] ~]# ipvsadm -L -n

LVS负载均衡(二) NAT和DR的应用配置

LVS负载均衡(二) NAT和DR的应用配置

2-4、Real Server1配置

[[email protected] ~]# ifconfig eth0 192.168.1.102

[[email protected] ~]# ifconfig lo down

[[email protected] ~]# ifconfig lo up

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[[email protected] ~]# ifconfig lo:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up    //配置成专用网络,并且只有lo:0一台主机

[[email protected] ~]# route add -host 192.168.1.100 dev lo:0

[[email protected] ~]# ifconfig

2-5、Real Server2配置

[[email protected] ~]# ifconfig eth0 192.168.1.103

[[email protected] ~]# ifconfig lo up

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[[email protected] ~]# ifconfig lo:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up        //配置成专用网络,并且只有lo:0一台主机

[[email protected] ~]# route add -host 192.168.1.100 dev lo:0

[[email protected] ~]# ifconfig

LVS负载均衡(二) NAT和DR的应用配置

2-6、测试

配置好后,可以相互ping通信,Director经过ping RS1和RS2后,可以看到arp表如下:

LVS负载均衡(二) NAT和DR的应用配置

用另一台虚拟机当作Client,用ab访问测试:

ab –n 1000 –c 10 http://192.168.0.146/index.html

可以看到两台Real Server接收到的连接数是根据我们设置的wrr策略1:3权重来调度的:

LVS负载均衡(二) NAT和DR的应用配置

 

下一篇将会尝试解决LVS后端服务健康状态检查……