LVS的DR模型
或许你可以先看看最下面的关于ipvsadm命令介绍 (0 。0)~
关于LVS:LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。这就要说起一个技术大牛章文嵩博士了,章博士从98年发起到现在已经是一个很成熟了的项目了。使用LVS的目的是想实现一个高可用的linux集群,让它具有可扩展性和可操作性,让廉价的成本发挥最优的性能。IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR,下面来试一试DR模型的负载均衡。
LVS的NAT,DR和TNU模型简介:Virtual Server via Direct Routing
要求:DR这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。
用直接路由技术实现虚拟服务器。LVS的模型还有一种是NAT工作模式,NAT大意为地址转换的意思,一般用来把公网IP转换为私网IP,但是DR模型不涉及转换地址的问题。
在DR模型中VS(虚拟服务器)和RS(real server真实的服务器)使用同一个IP来对外服务,但RS对IP的ARP保持静默,而VS接收所有的请求且全部分发给RS,在DR模型中VS只负责接收请求RS处理请求,且回应报文不经过VS这也是大大减轻了VS的负担。
1.用户请求先到达VS的时候先进入PREROUTING链,此时报文源IP为客户端IP,目标为自己的IP。
2.PREROUTING链检查发现目标为自己的IP之后发给INPUT链。
3.IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址。
4.由亍DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那举此时数据包将会发至Real Server。
5.RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成后,将响应报文通过lo接口传送给eth0网卡然后吐外发出。 此时的源IP地址为VIP,目标IP为CIP
6.响应报文到达客户端。
DR的特点:
1、保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
2、RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过亏联网对RIP迕行直接访问
3、RS跟Director Server必项在同一个物理网络中
4、所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
5、不支持地址转换,也不支持端口映射
6、RS可以是大多数常见的操作系统
7、RS的网关绝丌允许指吐DIP(因为我们丌允许他经过director)
8、RS上的lo接口配置VIP的IP地址
下面准备了三台机器实验,两个为RS一个为VS。
在VS的上的配置:
ifconfig eth0:0 192.168.200.100 broadcast 192.168.200.100 netmask 255.255.255.255 up #本身192.168.200.100这个地址是不存在的,绑定到了eth0上
route add -host 192.168.200.100 dev eth0:0
ipvsadm -A -t 192.168.200.100:80 -s rr #添加一条虚拟主机的记录
ipvsadm -a -t 192.168.200.100:80 -r 192.168.200.78:80 -g -w 1
ipvsadm -a -t 192.168.200.100:80 -r 192.168.200.79:80 -g -w 1 #添加两条真实主机的的记录(IP78和79为真实主机的IP)
好了现在该添加RS的命令了:
ifconfig lo:0 192.168.200.100 broadcast 192.168.200.100 netmask 255.255.255.255 up #设置lo网卡IP
route add -host 192.168.200.100 lo:0 #接收IP
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
#1 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
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
#关闭arp应答
1: 仅在请求的目标IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
2 :必须避免将接口信息向非本网络进行通告
两台RS都是同样的配置,配置完我在两台RS的nginx服务下写了个index.html的简单文件内容为echo centos78 > index.html 和echo centos78 > index.html来区别。
访问相同的IP出现了不同的页面(专门让内容不一样好区分),说明实验成功了。
关于ipvsadm命令:
这个命令需要另外安装!!!!
-A --add-service在服务器列表中新添加一条新的虚拟服务器记录
-t 表示为tcp服务
-u 表示为udp服务
-s --scheduler 使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh |
sed | nq 默认调度算法是 wlc
ipvsadm -A -t 192.168.1.2:80 -s wlc
-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service 说明虚拟服务器提供tcp服务
-u --udp-service 说明虚拟服务器提供udp服务
-r --real-server 真实服务器地址
-m --masquerading 指定LVS工作模式为NAT模式
-w --weight 真实服务器的权值
-g --gatewaying 指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip 指定LVS的工作模式为隧道模式
-p 会话保持时间,定义流量呗转到同一个realserver的会话存留时间
-E –edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D –delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C –clear 清除内核虚拟服务器表中的所有记录。
-R –restore 恢复虚拟服务器规则
-S –save 保存虚拟服务器规则,输出为-R 选项可读的格式
-e –edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d –delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list 显示内核虚拟服务器表
-Z –zero 虚拟服务表计数器清零(清空当前的连接数量等)
转载于:https://blog.51cto.com/13154101/1979118