ps:做 dr 模式 之前,先把之前做过的操作清空掉
1、ipvsadm -ln 查看规则
2、ipvsadm -C 清空规则
3、ipvsadm -ln 确认
4、iptables -t nat -F: 清空iptables的nat规则
5、master和slave把网卡所对应的网关(GATEWAY)改回来
vim /etc/sysconfig/network-scripts/ifcfg-ens33
6、dr用不到ens37这个网卡(192.168.56.128)
ifdown ens37
[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.133:80 rr
-> 192.168.0.134:80 Route 1 0 4
-> 192.168.0.140:80 Route 1 0 4
[[email protected] ~]# ipvsadm -C //清空规则
[[email protected] ~]# ipvsadm -ln //确认是否清空
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[[email protected] ~]# iptables -t nat -F //清空iptables的nat规则
5、master和slave把网卡所对应的网关(GATEWAY)改回来
vim /etc/sysconfig/network-scripts/ifcfg-ens33
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[[email protected] ~]# systemctl restart network
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[[email protected] ~]# systemctl restart network
一、DR 模式 VS NAT 模式
缺点:比较浪费公网ip,每一个rs都必须要有一个独立的公网 ip
优点:用户的请求直接吐给客户端,不借助于分发器dir
实验环境:
(1)lvs_dir:192.168.0.139
(2)master:192.168.0.134
(3)slave:192.168.0.140
都看成对外的公网 ip
另外,
(a)还需要一个虚拟ip(192.168.0.133)
(b)测试机器:192.168.0.130
二、分发器 dir 设置
1、编辑脚本
vim /usr/local/sbin/lvs_dr.sh
#打开端口转发
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.0.133
dengserver1=192.168.0.134
dengserver2=192.168.0.140
ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.255 up
#增加一条路由
route add -host $vip dev ens33:0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $dengserver2:80 -g -w 1
$ipv -a -t $vip:80 -r $dengserver1:80 -g -w 1
参数说明:
-g:表示 dr 模式
-m:表示 nat 模式
2、执行脚本 sh !$
3、ipvsadm -ln 多出一个vip 192.168.0.133
[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.133:80 rr
-> 192.168.0.134:80 Route 1 0 0
-> 192.168.0.140:80 Route 1 0 0
三、真实服务器 real server 设置
1、rs1,rs2都写脚本: vim /usr/local/sbin/lvs_rs.sh
(1)配置vip,绑定的网卡不是eth0,而是在回环地址 lo 上
(2)增加路由,调整arp相关的内核参数
写入:
#!/bin/bash
vip=192.168.0.133
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#调整内核参数
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
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内核参数的意义:
百度:
(a)ARP广播会产生的问题
当客户端发起访问VIP 对应的域名的请求(curl 192.168.131.100)时,根据网络通信原理会产生ARP 广播,因为负载均衡器dir和真实的服务器rs在同一网络并且VIP设置在集群中的每个节点上,此时集群内的真实服务器会尝试回答来自客户端计算机的查找VIP的ARP广播,这就会产生问题,大家都说我是"VIP"。
(b)为了达到负载均衡的目的,必须想法办让真实服务器忽略来自客户端计算机的ARP广播请求 ——》 调整arp内核参数
问题:lvs有vip,real server也有vip,但client请求只访问lvs的vip?
——》 在所有real server上要关闭所有arp请求,导致不能响应client发出的arp请求(相当于哑巴),只有lvs可以响应,这样请求就会传到lvs的vip中,这就是为什么要禁止real server 的 arp请求和响应
##############################
2、rs1,rs2执行脚本: sh /usr/local/sbin/lvs_rs.sh
四、测试
1、浏览器访问vip :192.168.0.133 ——》 不精准(刷新无数次都是master,然后等一段时间,刷新无数次也是slave = =,所以才说不精准咯~~)
2、在另外一台linux服务器上进行测试:
[[email protected] ~]# curl 192.168.0.133
this is master server
[[email protected] ~]# curl 192.168.0.133
this is slave server
[[email protected] ~]# curl 192.168.0.133
this is master server
[[email protected] ~]# curl 192.168.0.133
this is slave server
[[email protected] ~]# curl 192.168.0.133
this is master server
[[email protected] ~]# curl 192.168.0.133
this is slave server