LVS-DR模式:
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的mac地址改为后端真实服务器的mac地址;
3.后端真实服务器得到访问报文后进行ip查看,再确认自己有vip之后进行请求处理;
4.后端真实服务器在处理完数据请求后,直接响应客户端。
LVS-DR模式的部署
1.server1作为调度器,首先配置yum源
一般的yum源配置不能获得ipvsadm的包
安装ipvsadm
yum install -y ipvsadm
2.添加外网ip地址(使客户端通过调度器访问外网)
ip addr add 172.25.61.100/24 dev eth0
3.编写调度器规则(让客户端在访问172.25.61.100时 采用轮询调度的方式访问server2和server3)
ipvsadm -A -t 172.25.61.100:80 -s rr
ipvsadm -a -t 172.25.61.100:80 -r 172.25.61.2:80 -g
ipvsadm -a -t 172.25.61.100:80 -r 172.25.61.3:80 -g
ipvsadm -l #查看规则
保存规则
4.server2和server3作为rs,做以下部署
(1)安装apache服务,撰写默认发布页
[root@server2 ~]# cat /var/www/html/index.html
<h1>LVS server2</h1>
[root@server3 ~]# cat /var/www/html/index.html
<h1>LVS server3</h1>
(2)添加网络
ip addr add 172.25.61.100/32 dev eth0
server2和server3都要添加,子网掩码设置为32是为了与server1之间内网通信,防止恶意攻击
5.测试
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server3</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
发现的确轮询,但是有一个问题
[root@foundation61 ~]# arp -an | grep 100 ##查看此时mac地址是server2还是server3的
? (172.25.61.100) at 52:54:00:d6:82:c1 [ether] on br0
[root@foundation61 ~]# arp -d 172.25.61.100 ##清楚缓存
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# arp -an | grep 100
? (172.25.61.100) at 52:54:00:68:00:ef [ether] on br0
[root@foundation61 ~]# arp -d 172.25.61.100
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server3</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
原因:因为第一次缓存的mac地址是serve2服务器的,清理了mac缓存之后,重新访问的时候缓存到了调度器的mac地址,就可以轮询了,客户端访问的时候,会随机选取服务器
6.解决办法
在server2和server3上添加火墙策略
server2
yum install arptables_jf -y ##安装
arptables -A IN -d 172.25.61.100 -j DROP
arptables -A OUT -s 172.25.61.100 -j mangle --mangle-ip-s 172.25.61.2
arptables -L #查看火墙策略
/etc/init.d/arptables _jf save ##保存火墙策略
server3
yum install arptables_jf -y
arptables -A IN -d 172.25.61.100 -j DROP
arptables -A OUT -s 172.25.61.100 -j mangle --mangle-ip-s 172.25.61.3
arptables -L #查看火墙策略
/etc/init.d/arptables _jf save ##保存火墙策略
7.在进行测试
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server3</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server3</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# arp -d 172.25.61.100
[root@foundation61 ~]# arp -d 172.25.61.100
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server3</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server2</h1>
[root@foundation61 ~]# curl 172.25.61.100
<h1>LVS server3</h1>
好了,这下访问的时候就可以访问到调度器了,不会出现随机缓存的情况了