一、NAT模式
1、工作原理:调度器上双网卡,一个ip为内网ip和节点一个网段,一个ip为VIP,为外网ip,和客户机一个网段,在调度器上设置调度策略,通过客户端访问调度器,调度器修改请求的源和目的地址后发送给要调度的服务器,服务器处理完请求之后,返回数据到调度器(服务器的默认路由是调度器),调度器修改源和目的地址,通过调度器返回数据到客户端
缺点:请求和响应的数据包都必须经过vs,而且需要修改源ip和目的ip,vs的处理能有限,形成瓶颈。
2、lvs调度器:
1)、网络配置:
Lvs调度器:两个网卡,一个内网,和web1,web2处于同一个网段
2)、策略配置
yum install ipvsadm
ipvsadm -A -t 172.25.2.101:80 -s rr
ipvsadm -a -t 172.25.2.101:80 -r 172.25.1.102:80 -m -w 1
ipvsadm -a -t 172.25.2.101:80 -r 172.25.1.103:80 -m -w 1
-A 添加vip
-t 指定vip
-s 指定调度策略
-a 添加策略
-r 指定真实服务器ip
-m 是指nat模式
-w 权重
3、服务器
Web1:172.25.1.102
Web2:172.25.1.103
4、测试:
客户机:172.25.2.100
二、DR工作模式
1、工作原理:
在vs和rs上都设置有同一个vip,vs和rs都有两个ip地址,除了vip之外的ip,他们是统一个网段的能够相互通信,在vs上设置轮询策略,在rs设置上丢掉访问vip的请求的策略,那么在client访问vip的时候,就只能唯一经过vs的vip,也就是只能通过vs请求资源,因为他们处于同一个网段,所以使用MAC地址进行通信,在vs上边修改请求的源MAC和目的MAC,不改变源cip和目的ip(vip),所以rs处理完请求后,所以rs直接通过网关直接返回数据包(源vip,目的cip)给客户端,不经过vs。
注意:调度器要有所有服务器的的解析,并且每个主机的两个ip都在同一个网卡上
server1:调度器 IP:172.25.1.101
VIP:172.25.1.200
server2:服务器 IP:172.25.1.102
VIP:172.25.1.200
server3:服务器 IP:172.25.1.103
VIP:172.25.1.200
测试机:172.25.1.1
3、 配置:
server1:
yum install ipvsadm
systemctl start ipvsadm
touch /etc/sysconfig/ipvsadm
ipvsadm -nL
ipvsadm -C
ipvsadm -A -t 172.25.1.200:80 -s rr
ipvsadm -a -t 172.25.1.200:80 -r 172.25.1.102:80 -g
ipvsadm -a -t 172.25.1.200:80 -r 172.25.1.103:80 -g
systemctl restart ipvsadm
server2:
systemctl start htttpd
yum install arptables_js
arptables -nL
arptables -A INPUT -d 172.25.1.200 -j DROP
arptables -A OUTPUT -s 172.25.1.200 -j mangle --mangle-ip-s 172.25.1.102
arptables-save > /etc/sysconfig/arptables 保存策略
server3:
systemctl start httpd
yum install arptables_js
arptables -nL
arptables -A INPUT -d 172.25.1.200 -j DROP
arptables -A OUTPUT -s 172.25.1.200 -j mangle --mangle-ip-s 172.25.1.103
arptables-save > /etc/sysconfig/arptables
4、测试:
curl 172.25.1.200
arp -d 172.25.1.200 清理缓存
三、TUN工作模式
1、工作原理:
比起NAT技术,由于请求和响应都需要通过VS进行地址的改写,那么当客户端的请求越来越多的时候,VS的处理能力就会成为一个瓶颈。为了解决这个问题,VS通过IP隧道,将客户端的请求(源(cip),目的(vip))通过IP隧道(此过程是对请求数据包进行封装,在原来请求数据的基础上添加头部(包括新的源(vip)和目的rip)),发送给真实的服务器,服务器打开封装(封装里边cip,vip不变),处理请求,处理完成后,直接通过网关直接返回响应给客户端,不经过vs。
原理图:
2、实验环境
注意:调度器要有所有服务器的的解析,server1,server2,server3的vip在tunl0(隧道虚拟网卡)上边
lsmod 查看是否有ipip模块
modprobe ipip 下载隧道模块
ipaddr addr add 172.25.1.200/24 dev tunl0 添加vip
ip link set up tunl0 激活tunl0
server1:调度器 IP:172.25.1.101
VIP:172.25.1.200
server2:服务器 IP:172.25.1.102
VIP:172.25.1.200
server3:服务器 IP:172.25.1.103
VIP:172.25.1.200
测试机:172.25.1.1
3、配置:
server1:
ipvsadm -C
ipvsadm -A -t 172.25.1.200:80 -s rr
ipvsadm -a -t 172.25.1.200:80 -r 172.25.1.102 -i
ipvsadm -a -t 172.25.1.200:80 -r 172.25.1.103 -i
cat /etc/sysconfig/ipvsadm
server2:
yum install arptables_js
arptables -nL
arptables -A INPUT -d 172.25.1.200 -j DROP
arptables -A OUTPUT -s 172.25.1.200 -j mangle --mangle-ip-s 172.25.1.102
arptables-save > /etc/sysconfig/arptables 保存策略
sysctl -a | grep rp_filter
sysctl -w 将为1的设置为0,让响应可以从服务器的eth0网卡出
sysctl -p 重新读取配置
server3:
yum install arptables_js
arptables -nL
arptables -A INPUT -d 172.25.1.200 -j DROP
arptables -A OUTPUT -s 172.25.1.200 -j mangle --mangle-ip-s 172.25.1.103
arptables-save > /etc/sysconfig/arptables 保存策略
sysctl -a | grep rp_filter
sysctl -w ... 将为1的设置为0,让响应可以从服务器的eth0网卡出去
sysctl -p 重新读取配置
4、测试:
curl 172.25.1.200
看轮询是否正常即可