lvs-nat模型的实验和原理剖析
首先单词:masquerade 表示化妆 伪装的意思 ...nat的意思
实验机:
vm1 vm2 vm3 三台虚拟机
vm1 拥有双网卡,一个连接外网 一个host-only 连接内网,部署好LVS--NAT环境的网络结构图
vm2 和vm3 都是host-only在内网中
实验物理结构图:
实验图及地址分布说明:
clinet的IP为 CIP:此实验为 192.168.0.101
vm1 的VIP为192.168.0.10
vm1 的DIP为192.168.100.10
vm2的是一台RS1机器,IP地址为 192.168.100.7 网关一定要是 192.168.100.10,指向DIP
vm3的是一台RS2机器,IP地址为 192.168.100.7 网关一定要是 192.168.100.10,指向DIP
完成NAT模型集群的配置:
第一步配置DR
第一:配置Direcory机器作为一台可以调度RS1和RS2组成的集群服务机器:
第二:完成ipvsadm命令管理配置ipvs
查看内核支持ipvs功能
[root@DR ~]# cat /boot/config-2.6.32-358.el6.x86_64 | grep -i "vs"
安装ipvsadm
yum install ipvsadm
第三:ipvsadm命令完成
1 实现管理集群服务:ipvsadm -A -t 192.168.0.10:80 -s rr
2 实现管理集群realserver:
ipvsadm -a -t 192.168.0.10:80 -r 192.168.100.7 -m
ipvsadm -a -t 192.168.0.10:80 -r 192.168.100.9 -m
第二步
配置RS1 和RS2以RS1为例
第一:网络的正确性
route add default gw 192.168.100.10 如果不是请用此命令修改网关或者setup进行网络设置
第二: 准备一个web服务器:(如httpd)并准备一个测试页面
结果测试:
因为是调度器的实现方法是RR轮询的
改变调度方法为:wrr 进行测试(当然你也可以用clinet的浏览器进行测试,但注意关闭防火墙和360等)
# ipvsadm -E -t 192.168.0.10:80 -s wrr
# ipvsadm -e -t 192.168.0.10:80 -r 192.168.100.7 -m -w 3
查看配置是否正确:
[root@DR ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.10:http wrr
-> 192.168.100.7:http Masq 3 0 0
-> 192.168.100.9:http Masq 1 0 0
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.10:http wrr
-> 192.168.100.7:http Masq 3 0 0
-> 192.168.100.9:http Masq 1 0 0
现在导致的结果是: RS1:RS2的值为3:1 由rww中weight设置的结果
测试结果:
测试完结果后对配置进行保存
vim /etc/sysconfig/ipvsadm-config
修改:默认重启不保存配置到 /etc/sysconfig/ipvsadm
# ipvsadm-save
# /etc/init.d/ipvsadm restart
查看以保存的配置
# cat /etc/sysconfig/ipvsadm
原理分析
分析原理:
NAT方式的LVS原理:是和nat方式原理一样,通过一对多的方式实现,修改三层地址源地址和目的地址的方式就行转发数据包正确的设备
从图中画的四个过程成可以分别对SIP DIP进行图解,容易理解
我使用一个完整的IP数据包进行分析器过程如图:
过程1
client--->VIP
SIP=CIP 192.168.0.101 DIP=VIP 192.168.0.10
过程2:由于数据包经过Directory 调度器,在内核层次ipvs会控制数据包,由于符合定义的规则
且方式为nat方式,所以改变数据包的三层地址
Directory-->RS1
SIP=CIP 192.168.0.101 DIP=RIP 192.168.100.7
到达RS1服务器上面,发现是自己要接受的,所以返回数据
过程3:RS1-->Directory
SIP=RIP 192.168.100.7 DIP=CIP 192.168.0.101
经过 Directory
过程四 :Directory--> Clinet
SIP=DIP 192.168.0.10 DIP=CIP 192.168.0.101
附上捉包tcpdump结果:
过程1
ipvsadm命令的使用 附件:
附上ipvsadm的命令用法:
ipvsadm 的用法介绍
man ipvsadm
功能
1 管理集群服务
添加 -A -t|u|f service-address [-s scheduler]
-t : TCP 协议的集群
service-address 表示的IP:port
-u : UDP 协议的集群
service-address 表示的IP:port
-f:FWM防火墙标记
service-address 表示的Mark Number
-s : 调度器的方法,默认是wlc
修改 -E
删除 -D -t|u|f service-address
# ipvsadm -A -t 172.16.100.1:80 -s rr
2 管理集群服务的realserver
添加realserver -a -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
service-address: 前面已经定义的某集群服务
-r 指定realserver的RIP,在NAT模型中,可使用IP:PORT 实现端口映射
[-g|i|m] 表示LVS类型
-g :DR (默认方式)
-i :TUN
-m: NAT
-w 指定无服务器的权重
修改 -e
删除 -d -t|u|f service-address -r server-address
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
3 查看
-L|-l|--list
-n 数字格式,不反解IP和port
--stats 显示统计信息
--rate: 速率
--timeout 显示当前ipvs当中tcp upd tcpfin协议的超时时间长度(这是默认的)
--daemon 显示进程状况和多播端口的
--sort 对列出进行排序
-c 显示ipvs连接状况的
-C: 清空ipvs规则,删除所有集群服务
4 保存规则
-s
# ipvsadm -S > /path/to/file
载入此前第一的规则
# ipvsadm -R < /path/to/file