一、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/ipvsadm.conf
[root@localhost ~]# ipvsadm -R </root/ipvsadm.conf
[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 桥接模式
具体配置如下:
[root@10.40.0.54~]$ifconfig eth0 10.40.0.54/24
[root@10.40.0.54~]$ echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@10.40.0.54~]$ echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@10.40.0.54~]$ echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@10.40.0.54~]$ echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@10.40.0.54 ~]# ifconfig lo:0 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up
[root@10.40.0.54 ~]# route add -host 10.40.0.51 dev lo:0
[root@10.40.0.55~]$ifconfig eth0 10.40.0.55/24
[root@10.40.0.55~]$ echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@10.40.0.55~]$ echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@10.40.0.55~]$ echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@10.40.0.55~]$ echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@10.40.0.55 ~]# ifconfig lo:0 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up
[root@10.40.0.55~]# route add -host 10.40.0.51 dev lo:0
[root@10.40.0.56~]$ifconfig eth0 10.40.0.56/24
[root@10.40.0.56~]$ echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@10.40.0.56~]$ 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
[root@10.40.0.56~]$ echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@10.40.0.56~]# ifconfig lo:0 10.40.0.51 broadcast 10.40.0.51 netmask 255.255.255.255 up
[root@10.40.0.56~]# 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网卡
[root@192.168.1.11~]$ifconfig eth0 192.168.1.11/24
[root@192.168.1.11~]$ echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@192.168.1.11~]$ echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@192.168.1.11~]$ echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@192.168.1.11~]$ 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
[root@192.168.1.11~]$route add default gw 192.168.1.1
[root@192.168.1.11~]$ifconfig eth0 192.168.1.12/24
[root@192.168.1.11~]$ echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@192.168.1.11~]$ echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@192.168.1.11~]$ echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@192.168.1.11~]$ 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
[root@192.168.1.11~]$route add default gw 192.168.1.1