本文共 3332 字,大约阅读时间需要 11 分钟。
简单流程
client -> vs -> Rs ->client
详细流程
client——>DS——>prerounting——>input——>ip不变,转换mac地址(源MAC->DS MAC,目的MAC->RS MAC)——>postrounting->RS——>lo——>eth0——>client
首先过来的是PREROUTING->INPUT(流向内部)—如果做转发的化PREROUTING->FORWARD-POSTROUTING(转发)-----出去时OUTPUT->POSTROUTING(流向外部)
工作过程:
当一个client发送一个WEB请求到VIP,LVS调度器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在hash表中记录该次连接,然后将client的请求包发给选择的Real-server,最后选择的Real-server把应答包直接传给client;当client继续发包过来时,LVS根据更才记录的hash表的信息,将属于此次连接的请求直接发到刚才选择的Real-server上;当连接中止或者超时,hash表中的记录将被删除。
注意事项:
DR模式下调度器和服务器组都必须在物理上有一个网卡通过不分段的局域网相连,即通过交换机或者高速的HUB相连,中间没有隔有路由器。
VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文。 所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。细节:
1> LVS和Real-server必须在相同的网段:(相同的广播域内)
DR模式在转发client的包时,只修改了包目的MAC地址为选定的Real-server的mac地址,所以如果LVS和Real-server在不通的广播域内,那么Real-server就没办法接收到转发的包2> LVS不需要开启路由转发:
LVS的DR模式不需要开启路由转发功能,就可以正常的工作,出于安全考虑,如果不需要转发功能,最好关闭。3> ARP问题:
通常,DR模式需要在Real-server上配置VIP,4>.ipvs是工作于内核空间,主要用于使用户定义的策略生效。 ipvsadm是工作于用户空间,是lvs的管理工具,编辑调度策略的,用什么算法。
5>.源ip是客户端的ip(cip),目的ip是虚拟ip(vip)
6>.来源:将源mac地址转换成cip的mac地址 目的:将vip的mac地址转换server的mac地址
7>.整个过程只是通过ip接收请求的,真正改变的是mac地址
8>.调度器和后端服务器必须在同一网段
企业六里面要额外配置yum源,因为package不包含,企业六是用脚本去保存调度策略
企业七不用,在重启服务后,自动保存策略。第一步:
实验环境:
主机 | ip | 服务 |
---|---|---|
nodel1 | 172.25.15.1 | ipvsadm调度器 |
nodel2 | 172.25.15.2 | RealServer1 apache服务 |
nodel3 | 172.25.15.3 | RealServer2 apache服务 |
物理机 | 172.25.15.250 | 用来测试 |
第二步:
在nodel2和nodel3上面安装httpd服务,并编写默认发布文件
nodel3
下载ipvsadm并编写策略,启动服务
yum install ipvsadm -yipvsadm -A -t 172.25.15.100:80 -s rripvsadm -a -t 172.25.15.100:80 -r 172.25.15.2:80 -gipvsadm -a -t 172.25.15.100:80 -r 172.25.15.3:80 -gcat /etc/sysconfig/ipvsadm systemctl start ipvsadm.service
注意:
-A:增加一台虚拟设备 -a:增加真实服务器的操作 -t:tcp服务地址 -s:调度算法(调度算法分别有10种,为rr/wrr/lc/wlc/lblc/lblcr/dh/sh/sed/nq -r:对应的真实ip -g:rh(路由) rr:调度算法,轮循第四步:
显示调度次数(-l列出当前的策略,-n不解析)
ipvsadm -lipvsadm -ln
第五步:
给nodel1,nodel2和nodel3添加VIP地址(172.25.15.100)
ip addr add 172.25.15.100/24 dev eth0
之所以在server2和server3中设置172.25.15.100是因为调度器中的报头是172.25.15.100,其目的是用来接收来自虚拟机的数据包,不能接收外部请求的
注意:
也可以在nodel1ip addr add 172.25.15.100/24 dev eth0nodel2和nodel3ip addr add 172.25.15.100/32 dev eth0之所以将子网掩码设置成32,是因为请求从调度器过来时,不对外提供服务的,只提供内部通信
以上情况,nodel1,2,3都有可能被访问到
如果绑定的MAC地址是nodel1,则在nodel2,3轮询
如果绑定的MAC地址是nodel2或nodel3的,那么我们会发现,在测试端根本不会形成轮叫,而是直接去了MAC绑定的后端服务器 (显然这样在企业中是不允许的)
第六步:
在物理机测试:访问172.25.15.100,会发现其一直返回的是nodel3中的测试页
查看物理机绑定的MAC地址后,会发现其MAC地址是nodel3的MAC地址,无法进行轮循
arp -an | grep 100 查看绑定的MAC地址
删除绑定的MAC地址并重新访问,此时会在nodel2和3的测试页轮循,发现此时的MAC地址是nodel1的MAC地址
arp -d 172.25.15.100 删除现有绑定MAC地址
发现此时的MAC地址是nodel1的MAC地址
但如果MAC地址仍然无法成功绑定成功呢?
这个时候我们就需要以下的解决办法。
要解决这样不合理的情况,解决的方法只有一直绑定sever1的MAC地址,所以我门要配置server2和server3的arp路由策略
第一步:
在两台主机上都做
yum install -y arptables_jf
#当网内广播需要172.25.15.100这个ip时,它将丢弃网内的所有请求arptables -A INPUT -d 172.25.15.100 -j DROP#当它自身需要在网内发包时,伪装为自己原本的ip172.25.66.2arptables -A OUTPUT -s 172.25.15.100 -j mangle --mangle-ip-s 172.25.15.2 #查看策略,此时没有arptables -nLcat /etc/sysconfig/arptables#保存策略arptables-save > /etc/sysconfig/arptablescat /etc/sysconfig/arptables
注意:nodel3要伪装成nodel3的ip
arptables -A OUTPUT -s 172.25.15.100 -j mangle --mangle-ip-s 172.25.15.3
第二步:
systemctl start arptables.servicesystemctl status arptables.service
第三步:
删除原来绑定的MAC地址,访问172.25.15.100,会发现成功出现了轮循,且数据经过调度器
转载地址:http://nojvb.baihongyu.com/