LVS-DR模式搭建
Linux Virtual Server - Direct Rounting Mode
前置准备
lvs节点 192.168.61.151 虚拟ip 192.168.61.150 安装ipvsadm(yum install -y ipvsadm
)
real server 节点1 192.168.61.130 安装nginx,修改首页
real server 节点2 192.168.61.131 安装nginx,修改首页
配置lvs节点(151)的虚拟ip=150
关闭网络管理器systemctl stop NetworkManager
systemctl disable NetworkManager
复制一份你的当前网卡,取别名cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:1
vim /etc/sysconfig/network-scripts/ifcfg-ens33:1
配置如下
BOOTPROTO="static" #静态IP
DEVICE="ens33:1" #网卡名
ONBOOT="yes" #配置开机启动
IPADDR="192.168.61.150" #配置虚拟ip
NETMASK="255.255.255.0" #配置子网掩码
保存后重启网络systemctl restart network
查询ip,确认虚拟ip生效ip addr
安装集群管理工具 ipvsadmyum install -y ipvsadm
验证安装ipvsadm -ln
命令解释
- -l list the table
- -n numeric output of addresses and ports
可以看到,当前没有暴露任何的进程和端口,后续会进行配置
配置lvs节点(150)的集群规则
添加lvs集群服务器,配置规则为轮询
ipvsadm --add-service --tcp-service 192.168.61.150:80 --scheduler rr
查询配置是否生效ipvsadm -ln
显示虚拟服务器1台,负载均衡算法为轮询
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.61.150:80 rr
为虚拟服务器192.168.61.150:80 添加真实服务器节点,配置dr模式
ipvsadm --add-server --tcp-service 192.168.61.150:80 --real-server 192.168.61.130:80 --gatewaying
ipvsadm --add-server --tcp-service 192.168.61.150:80 --real-server 192.168.61.131:80 --gatewaying
查询配置是否生效ipvsadm -ln
可以看到虚拟服务器的节点配置都成功了
将配置保存到规则库中,否则重启将失效ipvsadm --save
配置Real servers节点(130,131)的回环ip
复制一份lo网卡(回环地址网卡),取别名cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:1
vim /etc/sysconfig/network-scripts/ifcfg-lo:1
配置如下
DEVICE=lo:1
IPADDR=192.168.61.150
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
broadcast=127.255.255.255
ONBOOT=yes
NAME=loopback
重新加载回环地址ifup lo
或者 systemctl restart network
查询配置是否生效ip addr
第二台真实服务器也做同样的配置
配置Real servers节点(130,131)的ARP响应级别
打开arp配置文件vim /etc/sysctl.conf
添加如下配置
# configration for lvs
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
ARP(Address Resolution Protocol,地址解析协议) 配置解释
arp-ignore 级别 筛选请求
- 0:只要本机配置了ip,就能响应请求
- 1:请求的目标地址到达对应的网络接口,才会响应请求
arp-annouce 级别 通告行为
- 0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
- 1:尽可能避免本网卡与不匹配的目标进行通告
- 2:只在本网卡通告(回环)
重载arp配置sysctl -p
增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理route add -host 192.168.61.150 dev lo:1
永久添加该配置
echo "route add -host 192.168.61.150 dev lo:1" >> /etc/rc.local
tail -n 1 /etc/rc.local
source /etc/rc.local
查询配置是否生效
route -n
第二台真实服务器也做同样的配置
验证连接及dr模式下的其他机制
如果防火墙有开启的话,需要开放80/tcp端口firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
或者直接关闭防火墙systemctl stop firewalld
浏览器输入虚拟ip 192.168.61.150 ,测试访问
可以看到访问到了130服务器
通过 ipvsadm -lnc
可以查看到当前的tcp连接
如图是多次刷新的结果,由于是本地虚拟机,所以是通过虚拟机网关访问的
由于lvs负载均衡的持久化默认配置,无法直观的查看到我们配置的轮询负载的变化,可以通过修改持久化机制来观察lvs负载均衡。
持久化机制
–persistent integer
同一个客户端访问的真实服务器将在一定时间内保持不变,默认300(单位:s)
配置持久化链接规则5s,注意修改将覆盖之前的配置,因此需要把之前的分发机制轮询也写上ipvsadm --edit-service --tcp-service 192.168.61.150:80 --scheduler rr --persistent 10
查询配置是否生效ipvsadm -ln
–set integer integer integer
设置tcp tcpfin udp链接的超时时间,该配置是一个全局的配置, 单位s, 0表示无意义,就是使用当前的配置。
- 默认配置
- tcp 900s
- tcpfin 120s
- udp 300s
设置tcp链接超时时间为10sipvsadm --set 10 0 0
查看配置是否生效ipvsadm -l --timeout
查询链接情况 c 表示当前连接ipvsadm -lnc
间隔五秒后刷新,可以看到配置真实服务器的变化
其他问题
! 关于ipvsadm的重启
重启可以使用命令 systemctl restart ipvsadm
但是重启关于虚拟服务器的配置需要重新进行。
注:重启如出现如下错误
因为有的ipvsadm的配置文件名称为 ipvsadm-config 可以复制一份重命名为 ipvsadmcp /etc/sysconfig/ipvsadm-config /etc/sysconfig/ipvsadm
或者ipvsadm -S /etc/sysconfig/ipvsadm
又或者修改ipvsadm.service文件cat /usr/lib/systemd/system/ipvsadm.service
可以看到命令指向的配置文件地址是 /etc/sysconfig/ipvsadm 将其改为 /etc/sysconfig/ipvsadm-config 即可