LVS的DR模式
原理部分请看作者博文
https://blog.csdn.net/zhaoliang_Guo/article/details/96862679
准备工作
准备三个rhel7.3虚拟机,设置ip和hostname如下,并搭建好yum源
IP | hostname |
---|---|
172.25.254.1 | server1 |
172.25.254.2 | server2 |
172.25.254.3 | server3 |
DR模式的搭建
1.把server1当作DS,现在server1上下载ipvsadm并配置
yum install ipvsadm -y
下载好后需要建下面这个文件,否则无法启动ipvsadm
touch /etc/sysconfig/ipvsadm
然后重新启动ipvsadm
systemctl start ipvsadm
配置ipvsadm的配置文件
vim /etc/sysconfig/ipvsadm-config
14 # Save current ipvs rules on restart.
15 # Value: yes|no, default: no
16 # Saves all ipvs rules to /etc/sysconfig/ipvsadm if ipvsadm gets
17 # restarted.
18 IPVS_SAVE_ON_RESTART="yes"
19
把18行的no改为yes,目的是让我们重新启动ipvsadm的时候,把写的策略保存进去
编写策略
[root@server1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr 此ip是vip(虚拟ip)
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -g
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g
[root@server1 ~]# cat /etc/sysconfig/ipvsadm
[root@server1 ~]# systemctl restart ipvsadm.service
[root@server1 ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 172.25.254.2:80 -g -w 1
-a -t 172.25.254.100:80 -r 172.25.254.3:80 -g -w 1
此时我们还需要添加vip,
ip addr add 172.25.254.100/24 dev eth0
在server2端
-
1.添加vip ###是为了回包
ip addr add 172.25.254.100/24 dev eth0
http在之前已经做过,把它启动
[root@server2 ~]# cat /var/www/html/index.html server2 www.gzl.com [root@server2 ~]# systemctl start httpd
在server3虚拟机
-
添加vip
[root@server3 ~]# ip addr add 172.25.254.100/24 dev eth0 [root@server3 ~]# cat /var/www/html/index.html server3 bbs.gzl.com [root@server3 ~]# systemctl start httpd
这样做好后仍然存在问题
因为DS和RS都有一个一样的ip,有可能client,直接访问到了rs,这是我们不想看到的
因为这样的话可能会受到DDOS攻击,也没有起到负载均衡的作用
所以我们的RS需要arptables来防止,如果RS上接受到访问vip的请求就拒绝掉
这样访问vip时只能有DS接受,可以通过vip转换为mac地址来调度RS
RS数据返回时,不会回包,直接返回给client,但返回时它的ip需要是vip所以需要转换一下
操作:
在server2和server3上安装arptables
yum install -y arptables.x86_64
安装好后,编写策略
[root@server2 ~]# arptables -A INPUT -d 172.25.254.100 -j DROP
[root@server2 ~]# arptables -A OUTPUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2
编写好后还需要将策略导入文件
[root@server2 ~]# arptables-save > /etc/sysconfig/arptables
[root@server2 ~]# cat /etc/sysconfig/arptables
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A INPUT -j DROP -d 172.25.13.100
-A OUTPUT -j mangle -s 172.25.0.100 --mangle-ip-s 172.25.13.2
在server3上同样操作
[root@server3 conf.d]# arptables -A INPUT -d 172.25.13.100 -j DROP
[root@server3 conf.d]# arptables -A OUTPUT -s 172.25.0.100 -j mangle --mangle-ip-s 172.25.13.3
[root@server3 conf.d]# arptables-save > /etc/sysconfig/arptables
[root@server3 conf.d]# cat /etc/sysconfig/arptables
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A INPUT -j DROP -d 172.25.13.100
-A OUTPUT -j mangle -s 172.25.0.100 --mangle-ip-s 172.25.13.3
在真实主机上测试:
curl 172.25.254.100