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

[root@www ~]# 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      

[root@www ~]# ipvsadm -C      //清空规则

[root@www ~]# ipvsadm -ln      //确认是否清空

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@www ~]# iptables -t nat -F    //清空iptables的nat规则

5、master和slave把网卡所对应的网关(GATEWAY)改回来

vim /etc/sysconfig/network-scripts/ifcfg-ens33

[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

[root@master ~]# systemctl restart network

[root@slave ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

[root@slave ~]# 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

[root@www ~]# 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服务器上进行测试:

[root@dengserver2 ~]# curl 192.168.0.133

this is master server

[root@dengserver2 ~]# curl 192.168.0.133

this is slave server

[root@dengserver2 ~]# curl 192.168.0.133

this is master server

[root@dengserver2 ~]# curl 192.168.0.133

this is slave server

[root@dengserver2 ~]# curl 192.168.0.133

this is master server

[root@dengserver2 ~]# curl 192.168.0.133

this is slave server