一、NAT模型实验:

1、安装ipvsadm

通常ipvs在linux内核中会有支持,可以查看内核配置文件检查是否支持。

[root@localhost ~]# grep -i ipvs /boot/config-2.6.32-573.el6.x86_64 

# IPVS transport protocol load balancing support

# IPVS scheduler

# IPVS application helper


检查linux是否安装了ipvsadm。

[root@localhost ~]# rpm -ql ipvsadm

/etc/rc.d/init.d/ipvsadm

/etc/sysconfig/ipvsadm-config

/sbin/ipvsadm

/sbin/ipvsadm-restore

/sbin/ipvsadm-save

/usr/share/doc/ipvsadm-1.26

/usr/share/doc/ipvsadm-1.26/README

/usr/share/man/man8/ipvsadm-restore.8.gz

/usr/share/man/man8/ipvsadm-save.8.gz

/usr/share/man/man8/ipvsadm.8.gz


安装ipvsadm工具包

[root@localhost ~]# yum install ipvsadm

已加载插件:fastestmirror

设置安装进程

Loading mirror speeds from cached hostfile

 * base: mirrors.tuna.tsinghua.edu.cn

 * extras: mirrors.btte.net

 * updates: mirrors.tuna.tsinghua.edu.cn

包 ipvsadm-1.26-4.el6.x86_64 已安装并且是最新版本


2、常用命令讲解

ipvsadm -A|E -t|u|f service-address [ -s scheduler] [-p [timeout]] [-o] [-M netmask]

-A:创建一个负载均衡的方法,指明规则、模型。

-E:编辑负载均衡的方法。

-t|u|f:指定服务器工作在哪个协议上。工作在网络层

service-address:指定vip:port

-s:指定调度方法。rr、wrr、ldlc、


-D:删除一个负载均衡方法。

ipvsadm -a|e -[tuf] service-address -r real-serveraddress -[gim] [-w weight] [-x upper] [-y lower]

-a|e:添加、编辑一个负载均衡方法,实际就是添加rip。

指定lvs模型类型:

-g:DR模型、默认

-i:tun模型

-m:nat模型


查看ipvsadm工作状态

主参数:-L 查看ipvsadm状态

辅助参数:—stats -n

3、保存配置文件

service ipvsadm save

默认存储位置:/etc/sysconfig/ipvsadm

手动指定保存位置:ipvsadm -S >/root/ipvsadm.conf

[root@localhost ~]# ipvsadm -S >/root/ipvsadm.conf

[root@localhost ~]# more ipvsadm.conf 

-A -t 10.40.0.230:http -s wrr


手动恢复保存的配置文件:ipvsadm -r

[root@localhost ~]# ipvsadm -R

[root@localhost ~]# service ipvsadm status

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.40.0.230:80 wrr



4、实例配置nat负载均衡模型

将DR负载均衡器设置为可以实现转发功能:echo “1” /proc/sys/net/ipv4/ip_forward

关闭防火墙相关选项。

创建负载均衡的工作方式及查看状态。

[root@localhost ~]# ipvsadm -A -t 10.40.0.230:80 -s wrr

[root@localhost ~]# service ipvsadm status

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.40.0.230:80 wrr


添加RIP主机到负载均衡LVS中。

[root@localhost ~]# ipvsadm -a -t 10.40.0.230:80 -r 192.168.1.10 -m 

[root@localhost ~]# ipvsadm -a -t 10.40.0.230:80 -r 192.168.1.20 -m 


查看ipvsadm当然工作状态。

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

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.40.0.230:80 wrr

  -> 192.168.1.10:80              Masq    1      0          0         

  -> 192.168.1.20:80              Masq    1      0          0         



lvs配置很简单,应用中注意各个网卡的设置,特别是路由设置,建议检查一下,通常使用虚拟机时这些问题注意的比较多。


二、DR模型实验


1、禁止realserver上的VIP直接和前端路由进行通信的三种方案:

1、修改路由,使用静态arp,arp绑定

2、在realserver上使用arptables,禁止响应对vip的广播请求。

3、在realserver上修改其内核参数,并将vip配置在与rip不同的接口上,通常是lo。

arp_ignore:用来定义arp响应限制级别
                0:响应任意本地接口的请求
                1:如果目的ip地址是本地进入的接口,就响应,非直连接口不响应。

     arp_announce:定义arp通告级别
     0:通告任何针对本地地址的请求,任意端口都通告。
     1:尽量不通告目标接口不是此接口的请求,比如eth0接口不会通告针对本地eth1接口的请求。
     2:使用最合适的本地接口进行通告。绝对不响应非本接口请求,比2严格。


2、强制realserver使用vip作为源地址发送响应报文,通常使用一条路由在进行强制。


3、网络规划

3.1RIP/DIP/VIP在同一个网络中,网关可以指向同一个路由,配置最简单。

我的实验是在虚拟机上完成的,具体虚拟机配置如下:

director server

eth0:10.40.0.58 桥接模式

[root@localhost ~]# ifconfig eth0:1 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up

[root@localhost ~]# route add -host 10.40.0.51 dev eth0:1

[root@localhost ~]# ipvsadm -A -t 10.40.0.51:80 -s wlc

[root@localhost ~]# ipvsadm -a -t 10.40.0.51:80 -r 10.40.0.54:80 -g -w 1

[root@localhost ~]# ipvsadm -a -t 10.40.0.51:80 -r 10.40.0.55:80 -g -w 1

[root@localhost ~]# ipvsadm -a -t 10.40.0.51:80 -r 10.40.0.56:80 -g -w 1

[root@localhost ~]# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.40.0.51:http wlc

  -> 10.40.0.54:http            Route   1      0          0         

  -> 10.40.0.55:http            Route   2      0          0         

  -> 10.40.0.56:http            Route   2      0          0         


Realserver1:

eth0:10.40.0.54 桥接模式

Realserver2:

eth0:10.40.0.55 桥接模式

Realserver3:

eth0:10.40.0.56 桥接模式

具体配置如下:

[[email protected]~]$ifconfig eth0 10.40.0.54/24

[[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 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up

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


[[email protected]~]$ifconfig eth0 10.40.0.55/24

[[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 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up

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

[[email protected]~]$ifconfig eth0 10.40.0.56/24

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

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

[root@ 10.40.0.56~]$ 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 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up

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

3.2RIP同VIP不在同一个网段,在需要另外指定添加一个路由器用于和rip相连,并指定网关为此路由器,然后此路由在自由选择出口方法

我的实验是在虚拟机上完成的,具体虚拟机配置如下:

director server

eth0:10.40.0.58 桥接模式  有线网卡

eth1:192.168.1.10 桥接模式   wifi网卡

具体配置如下:

1、配置vip、dip(dip就是eth1的ip地址了),关闭防火墙,开启ip_forward转发

[root@localhost ~]# ifconfig eth0:1 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up

[root@localhost ~]# route add -host 10.40.0.51 dev eth0:1

[root@localhost ~]# ipvsadm -A -t 10.40.0.51:80 -s wlc

[root@localhost ~]# ipvsadm -a -t 10.40.0.51:80 -r 10.40.0.54:80 -g -w 1

[root@localhost ~]# ipvsadm -a -t 10.40.0.51:80 -r 10.40.0.55:80 -g -w 1

[root@localhost ~]# ipvsadm -a -t 10.40.0.51:80 -r 10.40.0.56:80 -g -w 1

[root@localhost ~]# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.40.0.51:http wlc

  -> 192.168.1.11:http            Route   1      0          0         

  -> 192.168.1.12:http            Route   2      0          0         

Realserver1:

eth0:10.40.0.54 桥接模式   wifi网卡

Realserver2:

eth0:10.40.0.55 桥接模式   wifi网卡

Realserver3:

eth0:10.40.0.56 桥接模式   wifi网卡

[[email protected]~]$ifconfig eth0 192.168.1.11/24

[[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

[root@localhost ~]# ifconfig lo:0 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up

[root@localhost ~]# route add -host 10.40.0.51 dev lo:0

[[email protected]~]$route add default gw 192.168.1.1


[[email protected]~]$ifconfig eth0 192.168.1.12/24

[[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

[root@localhost ~]# ifconfig lo:0 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up

[root@localhost ~]# route add -host 10.40.0.51 dev lo:0

[[email protected]~]$route add default gw 192.168.1.1