轻轻松松带你进行-负载均衡LVS实战(文章后)

8. LVS部署命令介绍

8.1 LVS软件相关信息
bash 复制代码
1.程序包:ipvsadm
2.Unit File: ipvsadm.service
3.主程序:/usr/sbin/ipvsadm
4.规则保存工具:/usr/sbin/ipvsadm-save
5.规则重载工具:/usr/sbin/ipvsadm-restore
6.配置文件:/etc/sysconfig/ipvsadm-config
7.ipvs调度规则文件:/etc/sysconfig/ipvsadm
8.2 ipvsadm命令
bash 复制代码
# 安装
yum install -y ipvsadm
8.2.1 核心功能
  • 集群服务管理:增、删、改
  • 集群服务的RS管理:增、删、改
  • 查看命令参数
bash 复制代码
管理集群服务 ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址;VIP) \
[-s scheduler(调度算法)] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags] 

ipvsadm -D -t|u|f service-address 删除
ipvsadm --C 清空
ipvsadm --R 重载
ipvsadm -S [-n] 保存

管理集群中的real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](权重)

ipvsadm -d -t|u|f service-address -r server-address 删除RS

ipvsadm -L|l [options] 查看RS

ipvsadm -Z [-t|u|f service-address] 清楚计数器
8.2.2 参数解释
参数 功能
-A --add-service 添加一条新的虚拟服务
-E --edit-service 编辑虚拟服务
-D --delete-service 删除虚拟服务
-C --clear 清除所有的虚拟服务规则
-R --restore 恢复虚拟服务规则
-a --add-server 在一个虚拟服务中添加一个新的真实服务器
-e --edit-server 编辑某个真实服务器
-d --delete-server 删除某个真实服务器
-L | -l --list 显示内核中的虚拟服务规则
-n --numeric 以数字形式显示IP端口
-c --connection 显示ipvs中目前存在的连接,也可以用于分析调度情况
-Z --zero 将转发消息的统计清零
-p --persistent 配置持久化时间
--set tcp tcpfin udp 配置三个超时时间(tcp/tcpfin/udp)
-t | -u TCP/UDP协议的虚拟服务
-g | -m | -i LVS模式为:DR | NAT | TUN
-w 配置真实服务器的权重
-s 配置负载均衡算法,如:rr, wrr, lc等
--timeout 显示配置的tcp/tcpfin/udp超时时间
--stats 显示历史转发消息统计(累加值)
--rate 显示转发速率信息(瞬时值)
8.3 LVS集群中的增删改
8.3.1 管理集群服务中的增删改
bash 复制代码
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A 	# 添加
-E 	# 修改
-t 	# tcp服务
-u 	# udp服务
-s 	# 指定调度算法,默认为WLC
-p 	# 设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-f 	# firewall mask 火墙标记,是一个数字

# 增加 
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr 
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000 

# 修改 
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000 

# 删除 
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80 
[root@DR-server ~]# ipvsadm -D -f 66
8.3.2 管理集群中RealServer的增删改
bash 复制代码
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]

-a 	# 添加realserver 
-e 	# 更改realserver 
-t 	# tcp协议 
-u 	# udp协议 
-f 	# 火墙 标签 
-r 	# realserver地址 
-g 	# 直连路由模式 
-i 	# ipip隧道模式 
-m 	# nat模式 
-w 	# 设定权重 
-Z 	# 清空计数器 
-C 	# 清空lvs策略 
-L 	# 查看lvs策略 
-n 	# 不做解析 
--rate # 输出速率信息
bash 复制代码
# 添加 
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m 
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2 

# 更改 
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1 
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1 

# 删除 
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
bash 复制代码
[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate

[root@DR-server ~]# ipvsadm -C 
[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80 
[root@DR-server ~]# ipvsadm -Ln --rate 
  • pvs规则:/proc/net/ip_vs
  • ipvs连接:/proc/net/ip_vs_conn
bash 复制代码
# 保存
# 1.第一种方法
[root@lvs ~]# ipvsadm-save  > /etc/sysconfig/ipvsadm-config				# 此过程很慢;想要快点可以去/etc/hosts做dns解析

# 2.第二种方法
# 相当于 lvs:http <==> 172.25.254.100:80
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm-config
bash 复制代码
# 恢复策略如下图(也可在NAT部署实战查看详细):

10. 防火墙标签解决轮询错误

10.1 轮询规则中可能会遇到的错误

以http和https为例,

当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,

这样我们就出现了一个轮询错乱的问题,

当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

10.1.1 问题呈现
bash 复制代码
# 在RS1与RS2中安装,mod_ssl加密模块并重启apache
yum install -y mod_ssl
systemctl restart httpd

# 在lvs中设置调度
[root@LVS ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@LVS ~]# ipvsadm -A -t 192.168.0.200:443 -s rr

[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g

[root@LVS ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g

[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   1      0          0
TCP  192.168.0.200:443 rr
  -> 192.168.0.10:443             Route   1      0          0
  -> 192.168.0.20:443             Route   1      0          0

# 测试发现:当访问vip时两次都调度到了
[root@CLIENT~]# curl http://192.168.0.220;curl -k https://192.168.0.220
RS1 server - 192.168.0.10
RS1 server - 192.168.0.10
10.2 防火墙标记--解决轮询调度问题

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记,

-set-mark value

其中:value 可为0xffff格式;

表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服务:可将多个不同的应用使用同一个集群服务进行调度。

10.2.1 实现方法
bash 复制代码
# 在LVS主机打标记
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports 
$portl,$port2,..-j MARK --set-mark NUMBER

# 在LVS主机基于标记定义集群服务
ipvsadm -A -f NUMBER [options]
bash 复制代码
# 示例
# 在lvs调度器中设定端口标签,认为80与443是一个整体
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666

# 清空之后再设定调度规则
[root@LVS ~]# ipvsadm -C
[root@LVS ~]# ipvsadm -A -f 6666 -s rr
[root@LVS ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g
[root@LVS ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g

[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   2      0          0
TCP  192.168.0.200:443 rr
  -> 192.168.0.10:443             Route   1      0          0
  -> 192.168.0.20:443             Route   1      0          0
FWM  6666 rr
  -> 192.168.0.10:0               Route   1      0          0
  -> 192.168.0.20:0               Route   1      0          0

# 测试
[root@Client ~]# curl http://192.168.0.200;curl -k https://192.168.0.200
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
[root@Client ~]# curl http://192.168.0.200;curl -k https://192.168.0.200
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
[root@Client ~]# curl http://192.168.0.200;curl -k https://192.168.0.200
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
[root@Client ~]# curl http://192.168.0.200;curl -k https://192.168.0.200
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10

# 查看
[root@LVS ~]# iptables -t mangle -nL

参数 说明
-t mangle 指定操作 mangle 表(用于修改数据包头信息,如标记 MARK)。
-A PREROUTING 将规则追加(-A)到 PREROUTING 链(数据包进入网卡后,路由判断前处理)。
-d $vip 匹配目标 IP 地址$vip 是变量,需替换为实际 IP,如 192.168.1.100)。
-p $proto 匹配协议类型$proto 是变量,如 tcpudpicmp)。
-m multiport 启用 multiport 扩展模块(支持多端口匹配)。
--dports $port1,$port2,... 匹配目标端口列表 (逗号分隔,如 80,443)。
-j MARK 使用 MARK 目标动作(对数据包打标记)。
--set-mark NUMBER 设置具体的标记值NUMBER 是整数,如 100,用于后续路由/QoS)。

11. LVS实战案例

11.1 部署NAT模式集群案例
11.1.1 架构图如下
11.1.2 部署过程如下
1. 实验环境
主机 IP VIP 网关 角色
lvs 192.168.0.100 172.25.254.100 172.25.254.2 调度器VS
webserver-01 192.168.0.10 NULL 192.168.0.100 真实服务器RS
webserver-02 192.168.0.20 NULL 192.168.0.100 真实服务器RS
Client 172.25.254.200 NULL 172.25.254.2 客户端

bash 复制代码
1.LVS使用vmset.sh之后记得将第二张网卡(仅主机)的网关与DNS删除即可
	NAT:172.25.254.100	
	仅主机:192.168.0.100
2.两台webserver需要提前将网卡调整至仅主机模式,如下图所示:
	s-01:192.168.0.10	# 网关:192.168.0.100	为LVS仅主机的IP
	s-02:192.168.0.20	# 网关:192.168.0.100	为LVS仅主机的IP
3.客户端client使用vmset.sh之后即可
	NAT:172.25.254.200
	
systemctl disable --now firewalld		# 四台主机都执行!
2. 配置命令

(1)LVS中打开内核路由功能

bash 复制代码
# 查询一下连接状态
[root@LVS ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

# 写入参数并查看
[root@LVS ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@LVS ~]# tail -1 /etc/sysctl.conf
net.ipv4.ip_forward = 1

# 启用
[root@LVS ~]# sysctl -p
net.ipv4.ip_forward = 1

(2)两台server主机进行测试,并在lvs里面进行必要的测试

bash 复制代码
dnf install -y httpd

echo xxxxxx > /var/www/html/index.html		# 测试时xxxx的内容最好不一样可以看得更直观一点!
											# 在真实生产环境中,两台server配置必须一模一样!
systemctl enable --now httpd

# 完成之后可以在LVS里面进行检测;
[root@lvs ~]# curl 192.168.0.10

[root@lvs ~]# curl 192.168.0.20

# 如果出现'No route to host'问题,建议关闭火墙或者增添必要火墙命令

(3)在lvs中安装lvs软件--ipvsadm

bash 复制代码
[root@lvs ~]# dnf install -y ipvsadm

(4)添加调度策略、并查看

bash 复制代码
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80  -s  rr
					# -A:添加策略
					# -t:tcp协议
					# 172.25.254.100:80 集群地址:端口
					# -s rr  	-s:调度算法	  rr:轮询算法

[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80  -r 192.168.0.10:80 -m
					# -a:新添一台RS
					# -t:tcp协议
					# 172.25.254.100:80 集群地址:端口
					# -r:RS地址(端口)
					# -m:LVS模式为NAT模式
					
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80  -r 192.168.0.20:80 -m

[root@lvs ~]# ipvsadm -Ln		# 显示规则及端口
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0
  -> 192.168.0.20:80              Masq    1      0          0

(5)客户端测试

bash 复制代码
[root@client ~]# hostname -I
172.25.254.200
[root@client ~]# for i in {1..10}; do curl 172.25.254.100; done
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20

(6)进行策略保存

bash 复制代码
# 1.第一种方法
[root@lvs ~]# ipvsadm-save  > /etc/sysconfig/ipvsadm-config				# 此过程很慢;想要快点可以去/etc/hosts做dns解析

[root@lvs ~]# more /etc/sysconfig/ipvsadm-config
-A -t lvs:http -s rr
-a -t lvs:http -r 192.168.0.10:http -m -w 1
-a -t lvs:http -r 192.168.0.20:http -m -w 1

# 2.第二种方法
# 相当于 lvs:http <==> 172.25.254.100:80
[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm-config

可选--(7)命令测试:删除所有规则并重载规则、并客户端测试

bash 复制代码
[root@lvs ~]# ipvsadm -C		# 清空规则
[root@lvs ~]# ipvsadm -Ln

# 重新加载规则(前提:进行过保存...)
[root@lvs ~]# ipvsadm -R  <  /etc/sysconfig/ipvsadm-config
[root@lvs ~]# ipvsadm -Ln

# 在客户端中再次进行测试
[root@client ~]# for i in {1..20}; do curl 172.25.254.100; done

可选--(8)将ipvsadm.service调为开机自启

bash 复制代码
systemctl enable --now ipvsadm.service

可选--(9)算法测试:轮询算法-->权重调用算法

bash 复制代码
[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1

[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.254.100:80 -s wrr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1

# 客户端测试
[root@client ~]# for i in {1..30}; do curl 172.25.254.100; done
11.2 部署DR模式集群案例
11.2.1 架构图如下
11.2.2 部署过程如下
1. 实验环境
主机 网络适配器 (NAT/仅主机/双网卡) IP、VIP GateWay 角色
CLIENT NAT NAT:172.25.254.200 172.25.254.100 客户端
ROUTER 双网卡 NAT:172.25.254.100 仅主机:192.168.0.100 null 路由器
LVS 仅主机 仅主机: lo:VIP:192.168.0.200 DIP:192.168.0.50 192.168.0.100 负载调度器
WEBSERVER-01 仅主机 仅主机: lo:VIP:192.168.0.200 DIP:192.168.0.10 192.168.0.100 真实服务器-01
WEBSERVER-02 仅主机 仅主机: lo:VIP:192.168.0.200 DIP:192.168.0.20 192.168.0.100 真实服务器-02

bash 复制代码
cat /etc/NetworkManager/system-connections/网卡名.nmconnection

# 查看一下网卡配置
# 提示:如果是使用的vmset.sh配置的信息,记得要修改仅主机网卡的网关及相关信息
# 仅主机模式下,三台主机(LVS+WS-01+WS-02)的网关都为路由器(ROUTER)仅主机模式下的IP地址

# 可以使用 route -n 查看路由表
bash 复制代码
[root@WEBSERVER-01 ~]# route -n
[root@WEBSERVER-02 ~]# route -n

# 由此可知,两台主机的网关都在路由器的内网接口上!
bash 复制代码
# 测试一下路由器与客户端是否可以ping通全网(如下图所示):
# 客户端:
[root@CLIENT ~]# hostname -I
172.25.254.200
[root@CLIENT ~]# ping -c1 172.25.254.100
[root@CLIENT ~]# ping -c1 192.168.0.50
[root@CLIENT ~]# ping -c1 192.168.0.10
[root@CLIENT ~]# ping -c1 192.168.0.20

# 路由器:
[root@ROUTER ~]# hostname -I
172.25.254.100 192.168.0.100
[root@ROUTER ~]# ping -c1  172.25.254.200
[root@ROUTER ~]# ping -c1  192.168.0.50
[root@ROUTER ~]# ping -c1  192.168.0.10
[root@ROUTER ~]# ping -c1  192.168.0.20
bash 复制代码
# 关闭SELinux及火墙
# 由于母盘已将SELinux关闭,此处不考虑;只考虑火墙
# 为每一台主机(除过Router双网卡主机)进行火墙关闭!

# 其余主机
systemctl disable --now firewalld

# 双网卡主机Router
[root@Router ~]# systemctl enable --now firewalld

# 永久启用地址伪装(--permanet使永久参数;此命令需要重载生效!!!)
[root@Router ~]# firewall-cmd --add-masquerade --permanent
success
# 重载
[root@Router ~]# firewall-cmd --reload
success
  • ROUTER 主机打开内核路由功能
bash 复制代码
[root@ROUTER ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0

[root@ROUTER ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

[root@ROUTER ~]# sysctl -p
net.ipv4.ip_forward = 1
2. 解决vip响应配置部署步骤

(1)在LVS与WEBSERVER中设定lo:VIP

bash 复制代码
# 仅主机模式下设置的(推荐):

# 在LVS中可以将eth0网卡作为vip的承载设备(不用新设置lo网卡)
1.LVS设置:
[root@LVS ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.0.50/24,192.168.0.100
address2=192.168.0.200/24
method=manual

[root@LVS ~]# nmcli c reload
[root@LVS ~]# nmcli c up eth0

2.RS-1与RS-2设置:
# RS-1的
[root@RS-1 ~]# cd /etc/NetworkManager/system-connections/
[root@RS-1 system-connections]# cp -p eth0.nmconnection lo.nmconnection

# 将以下配置写入lo
[root@RS-1 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
address1=127.0.0.1/8,
address2=192.168.0.200/32,
method=manual

[root@RS-1 system-connections]# nmcli c reload
[root@RS-1 system-connections]# nmcli c up lo

[root@RS-1 ~]# ip a
    inet 192.168.0.200/32 scope global lo

# RS-2的
[root@RS-2 ~]# cd /etc/NetworkManager/system-connections/
[root@RS-2 system-connections]# cp -p eth0.nmconnection lo.nmconnection

[root@RS-2 system-connections]# vim lo.nmconnection

[root@RS-2 system-connections]# nmcli c reload
[root@RS-2 system-connections]# nmcli c up lo

[root@RS-2 system-connections]# ip a
    inet 192.168.0.200/32 scope global lo



# 要是lo的vip不生效,使用以下命令查看一下是否lo被启用(出现此情况,会出现3张网卡,将系统的lo删除即可,使用 nmcli c delete 系统自带lo设备的uuid)
# 查看一下
[root@ceshi ~]# nmcli c show
NAME  UUID                                  TYPE      DEVICE
eth0  7ba00b1d-8cdd-30da-91ad-bb83ed4f7474  ethernet  eth0
lo    b2baf1f3-48fa-398c-a8e1-e2e1f6a15e21  loopback  lo
lo    b2baf1f3-48fa-398c-a8e1-e2e1f6a15e21  loopback  lo
# 删除系统自带的lo网卡
[root@ceshi ~]# nmcli c delete b2baf1f3-48fa-398c-a8e1-e2e1f6a15e21
# 重载
[root@ceshi ~]# nmcli c reload
# 重启
[root@ceshi ~]# nmcli c up lo



# 桥接模式下设置的:
[root@LVS ~]# ip addr add dev lo 192.168.0.200/32
[root@WEBSERVER-01 ~]# ip addr add dev lo 192.168.0.200/32
[root@WEBSERVER-02 ~]# ip addr add dev lo 192.168.0.200/32

(2)在WEBSERVER-01与WEBSERVER-02中解决响应问题(可以写入配置文件)

bash 复制代码
# arp广播的作用:获取MAC地址

# server-01:
# 全局限制arp响应(防止arp冲突 --> all.arp_ignore = 1 )
# 全局限制arp宣告(确保服务器不将VIP宣告到外部网络 --> all.arp_announce = 2 ;2-->只响应本机;1-->响应外部网络)
# 隔离环回接口接应(lo.arp_ignore = 1)
# 隔离环回接口宣告(lo.arp_announce = 2)
[root@WEBSERVER-01 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@WEBSERVER-01 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@WEBSERVER-01 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@WEBSERVER-01 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@WEBSERVER-01 ~]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 1

[root@WEBSERVER-01 ~]# sysctl -a | grep arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 2

[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf

[root@WEBSERVER-01 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2


# server-02:
# 全局限制arp响应(防止arp冲突 --> all.arp_ignore = 1 )
# 全局限制arp宣告(确保服务器不将VIP宣告到外部网络 --> all.arp_announce = 2 )
# 隔离环回接口接应(lo.arp_ignore = 1)
# 隔离环回接口宣告(lo.arp_announce = 2)
[root@WEBSERVER-02 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@WEBSERVER-02 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@WEBSERVER-02 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@WEBSERVER-02 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@WEBSERVER-02 ~]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 1

[root@WEBSERVER-02 ~]# sysctl -a | grep arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 2

[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf

[root@WEBSERVER-02 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

(3)在LVS中配置策略、保存/还原

bash 复制代码
# 先下载命令
[root@LVS ~]# dnf  install -y ipvsadm

# 配置策略
[root@LVS ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
# 进行查看
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   2      0          0

# 进行策略保存
[root@LVS ~]# ipvsadm-save > /etc/sysconfig/ipvsadm-config

# 后期开机后如果被清空ipvsadm -C
# 策略还原
[root@LVS ~]# ipvsadm-R < /etc/sysconfig/ipvsadm-config
3. 测试
bash 复制代码
# 两台RS主机下载httpd进行测试
# RS-01:
[root@WEBSERVER-01 ~]# yum install -y httpd
[root@WEBSERVER-01 ~]# systemctl enable --now httpd
[root@WEBSERVER-01 ~]# echo "this is WEBSERVER-01: `hostname -I`" > /var/www/html/index.html

# RS-02:
[root@WEBSERVER-02 ~]# yum install -y httpd
[root@WEBSERVER-02 ~]# systemctl enable --now httpd
[root@WEBSERVER-02 ~]# echo "this is WEBSERVER-02: `hostname -I`" > /var/www/html/index.html

# 此时在客户端中进行测试!
[root@Client ~]# for i in {1..20}; do curl 192.168.0.200; done
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
this RS-2: 192.168.0.20
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
this RS-2: 192.168.0.20
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
this RS-2: 192.168.0.20
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
this RS-2: 192.168.0.20
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
this RS-2: 192.168.0.20
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
this RS-2: 192.168.0.20
this RS-2: 192.168.0.20
this RS-1: 192.168.0.10
相关推荐
GUET_一路向前20 分钟前
【git】在Linux系统下clone指定分支
linux·运维·git
云和数据.ChenGuang43 分钟前
运维技术教程之Jenkins上的known_hosts文件
运维·servlet·jenkins·自动化监控·运维技术教程
云心雨禅1 小时前
Ubuntu GRUB菜单密码重置教程
linux·运维·ubuntu
Lum11042 小时前
MER-Factory:多模态情感识别与推理数据集自动化工厂API参考
运维·自动化
Bella的成长园地3 小时前
linux 系统依赖包查询命令汇总
linux·运维·服务器
hweiyu003 小时前
Linux 命令:uname
linux·运维·服务器
Lum11044 小时前
MER-Factory:多模态情感识别与推理数据集自动化工厂工具介绍
运维·人工智能·深度学习·计算机视觉·语言模型·自然语言处理·自动化
互联网搬砖老肖5 小时前
运维打铁: Shell 脚本自动化任务编写与优化
运维·自动化·ruby
阿竹.5 小时前
Linux运维新手的修炼手扎之第19天
linux·运维·服务器
江东大都督周总5 小时前
springboot项目部署到K8S
运维·k8s