搭建 LVS-DR 模式
服务器与 IP 约定
首先需要有一个LVS,LVS需要有两个IP,分别是:DIP(Direct IP)和VIP (Virtual IP);DIP就是内网IP,用于与内网上游服务器通信使用;VIP是虚拟IP,用于客户端交互使用。 然后上游服务器Nginx,Nginx服务器需要配置两个IP,分别是:RIP(Real Server IP)和VIP (Virtual IP); RIP也是内网IP,VIP也是虚拟IP,用户的请求处理完毕,通过VIP返回给客户端;Nginx服务器的VIP要和LVS的虚拟IP保持一致。
开始搭建 LVS
配置虚拟IP
第一步,首先要关闭服务器网络配置管理器,如果不关闭,可能会引起接口网络的冲突,因为是在本地使用虚拟机的关系。
# 关闭网络配置管理器
systemctl stop NetworkManager
systemctl disable NetworkManager
同样 Nginx 服务器也需要关闭网络配置管理器。
第二步,构建LVS的IP。
# 进入网卡配置文件目录
cd /etc/sysconfig/network-script/
# 拷贝一份网卡配置文件,起一个别名
cp ifcfg-ens33 ifcfg-ens33:1
然后配置ifcfg-ens33:1文件, 配置如下:
BOOTPROTO=static
# 与网卡名称要保持统一
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.1.150
NETMASK=255.255.255.0
配置好网卡后,重启网卡:
service network restart
ip addr # 查看IP地址是否生效
到这里,虚拟IP就配置好了。
配置集群管理工具
虚拟IP配置好了以后,接下来就需要配置集群管理工具。
ipvs 是lvs自带的工具,ipvsadm需要安装。
安装ipvsadm:
yum install ipvsadm
接下来执行如下命令查看集群列表
ipvsadm -Ln
阿里云云服务器不支持虚拟IP配置,需要购买他们的负载均衡服务,腾讯云服务器支持配置虚拟IP,但是要额外的去购买的,因为是建立在网卡之上的,需要使用成本的,腾讯云支持虚拟IP的最大数量是10个。
配置RIS节点的IP
LVS服务器配置好以后,接下来去配置RIS节点服务器的IP,也就是Nginx所在的服务器。 首先也需要配置一个虚拟IP,这个IP用于返回数据报文。 首先进入到网卡配置文件所在的目录:
# 进入网卡配置文件目录
cd /etc/sysconfig/network-script/
在这个目录下,有一个 ifcfg-lo 配置文件,这个是服务器本地环回接口,我们要构建一个虚拟IP,这个IP不能被用户访问到,只是在返回报文时使用。 复制一份 ifcfg-lo 配置文件为:ifcfg-lo:1。
cp ifcfg-lo ifcfg-lo:1
修改成如下配置:
# BOOTPROTO=static
# 与网卡名称要保持统一
DEVICE=lo:1
ONBOOT=yes
IPADDR=192.168.1.150
NETMASK=255.255.255.255
NETWORK=127.0.0.1
BROADCAST=127.255.255.255
NAME=loopback
RS服务器配置ARP
arp-ignore: ARP 响应级别(处理请求)
- 0: 只要本机配置了ip,就能响应请求(在lvs是不适用的)
- 1: 请求的目标地址到达对应的网络接口,才会响应请求(这个才是需要的)
配置LVS时,RS服务器需要配置一个环回地址,这个地址不能处理请求,所以要将 arp-ihnore配置成 1,请求哪个ip,哪个IP才会处理请求。
arp-announce:ARP通告行为(返回响应)
- 0: 本机上任何网络接口都向外通告,所有的网卡都能接受到通告(在lvs是不适用的)
- 1: 尽可能避免本网卡与不匹配的目标进行通告(在lvs是不适用的,要一定,不能尽可能)
- 2: 只在本网卡通告(这个才是需要的)
RS 服务器的环回IP是用来响应客户端请求的,所以不能使用其他IP来返回,必须使用环回地址返回,因为客户端请求的是VIP,所以接收请求也必须使用RS服务器上和VIP相同的环回IP才能使客户端识别。
配置RS服务器APR
# 打开配置文件
vim /etc/sysctl.conf
# 配置如下内容:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
# 保存后,刷新一下网卡
sysctl -p
all:表示所有网卡 default:表示默认网卡 lo:环回网卡
RS 服务器配置路由
# 临时配置路由,开机回失效,需要添加到开机启动配置文件内
route add -host 192.168.1.150 dev lo:1
# 永久添加, 执行如下命令
echo "route add -host 192.168.1.150 dev lo:1" >> /etc/rc.local
通过192.168.1.150这个地址去接收请求,然后交给lo:1这个网卡去处理 使用 route -n 查看路由
使用ipvsadm配置集群规则
配置LVS服务以及节点
# 添加服务
ipvsadm -A -t 192.168.1.150:80 -s rr
# 查看配置列表
ipvsadm -Ln
添加一个服务,-A 添加一个服务,-t tcp,添加服务地址,-s 负载均衡算法,rr 轮询,轮询是负载均衡里用的比较多的算法。
# 构建服务
ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g
配置服务,-a 添加一个服务节点,-t 服务地址,表示为哪个服务地址添加节点,-r real server 的意思,写RS服务器的IP地址, -g 表示是DR模式。
验证DR模式
# 查看LVS运行状态
ipvsadm -Ln
DR 模式是LVS只负责接收请求,返回请求交给RS,通过上面的命令,查看InPkts有数据,而OutPkts为0,说明DR模式生效了。