轻轻松松带你进行-负载均衡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
相关推荐
七夜zippoe2 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6484 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满4 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠4 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥4 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9034 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技5 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀6 小时前
Linux环境变量
linux·运维·服务器
zzzsde6 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º7 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann