LVS基于VMware详细教程-包你能看懂
文章目录LVS介绍环境准备LVS配置及测试ipvsadm 安装及使用LVS介绍环境准备准备三台虚拟机192.168.90.10LVS服务器配置VIP为192.168.90.20192.168.90.11web 应用1192.168.90.12web应用2web 应用提供一个接口地址可返回请求详细信息如下LVS配置及测试ipvsadm 安装及使用安装LVS已经集成到了linux内核模块中,LVS环境
LVS介绍
LVS:Linux Virtual Server,负载调度器,由章文嵩博士主导的开源负载均衡项目, 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现。它具有良好的可靠性,可拓展性和可操作性。从而以低廉的成本实现最优的性能。
LVS负载均衡模式
负载均衡技术有很多实现方案,有基于DNS域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的是IP负载均衡技术。
LVS 的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。
IPVS负载均衡机制有三种,分别是NAT、TUN和DR
NAT模式
NAT模式通过将请求报文中的目标IP地址与目标端口修改,来实现报文的传送具体原理如下
- 当用户请求到达Director Server,此时请求的数据报文会先到内核空间PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
- IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP
- POSTROUTING链通过负载均衡算法选择一个后端的服务器,并将数据包发送给Real Server
- Real Server收到数据包,比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
- Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
特点
RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;
请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;
支持端口映射;
RS可以使用任意OS;
RS的RIP和Director的DIP必须在同一IP网络;
缺陷:对Director Server压力会比较大,请求和响应都需经过director server,director往往会成为系统的性能瓶颈
DR模式
DR模式通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出来处理i请求的RS的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
- 用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
- IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
- 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
- RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
- 响应报文最终送达至客户端
特点
必须确保前端路由器将目标IP为VIP的请求报文发往Director:
1)在前端网关做静态绑定;
2)在RS上使用arptables,
3)在RS上修改内核参数以限制arp通告及应答级别;修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。
RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;
RS跟Director要在同一个物理网络;
请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;
缺陷:
RS和DS必须在同一机房中,因为它是由二层进行转发的根据MAC地址来进行匹配。
TUNEL模式
该模式在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)
- 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
- IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
- POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输),此时源IP为DIP,目标IP为RIP
- RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
- 响应报文最终送达至客户端
这种该模式需要RS做些工作
特点
DIP, VIP, RIP可以是公网地址
RS的网关一般不能指向DIP
请求报文要经由Director,但响应不经由Director
不支持端口映射
RS的OS须支持隧道功能
调度算法
调度算法决定了如何在集群节点之间分布工作负荷,当director调度器收到来自客户端访问VIP的集群服务的入栈请求时,director调度器必须决定那个集群节点应该处理请求。
Director调度器用的调度方法分类:
固定调度算法:rr,wrr,dh,sh…
动态调度算法:wlc,lc,lblc,lblcr
算法名称 说明
rr 轮询调度(Round-Robin),将请求一次分配给不同的RS,也就是均摊,适用于处理真是服务器性能相差不大的情况
wrr 加权轮询调度(Weighted Round-Robin),根据不同RS的权值分配任务,权值较高的RS将优先获取任务,分配的连接数比权值低的RS更多,相同权值的RS获得相同数目的连接数
dh 目的哈希调度(Destination Hashing),以目的地址为关键词查找一个静态hash表来获得需要的RS
sh 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。
wlc 加权最小连接数调度(weighted leastconnection),会根据连接数和权值的不比值来算,最小比值的真实服务器将会获取下一个链接。
lc 最小连接数调度(Least-Connection),IPVS表存储了所有的活动的连接。把新的连接请求发送到当前连接数最小的RS。
lblc 基于地址的最小连接数调度(locality-Based Least-Connection),将来自同一目的地址的请求分配给同一台RS(此服务器当前还未满负荷),若此服务器当前已经满负荷,则之后的链接将分配给当前连接数最小的RS,并下一次优先考虑此台服务器。
lblcr 基于地址带重复最小连接数调度(Locality-Based Least-Connection with Replication),每个目的地址对应一个RS子集,对于次地址请求,为他分配子集中连接数最小的RS,如果服务器中所有子集均已满负荷,则从集群中选择一个连接数较小的服务器,将他加入到此子集中并分配链接;若一定时间内,违背做任何修改,则子集中负载最大的节点将会从子集中删除。
SED 最短期望的延迟(shortest expected delay scheduling SED),基于wlc算法。动态的wlc算法:若ABC三台服务器的权重分别为1,2,3,此时的连接数也是1,2,3。那么基于wlc算法的话,此时新来一个链接会随机给ABC服务器其中的一台;而SED则是动态的算出最小的比值,即A:(1+1)/1; B:(1+2)/2; C:(1+3)/3,此时可以算出C服务器的比值最小,将会将新的连接交给服务器C。
NQ 最小队列调度(Never Queue Scheduling NQ),即按照目前所有服务器的连接数来比较,最小的连接数将会分配下一个链接
算法选择建议
一般的网络服务,如http,mail,mysql等常用的LVS调度算法为
基本轮询调度rr
加权最小连接调度wlc
加权轮询调度wrr
基于地址的最小连接lblc和基于地址带重复最小连接数调度lblcr主要适用于web cache和DB cache
管理工具使用说明
LVS已经集成到了linux内核模块中,LVS环境又分为内核层和用户层,内核层负责内核算法的实现,用户层需要安装ipsadm工具,通过命令将工作模式与实现算法传递给内核。主流的linux发行版默认集成了ipvs,因此只需要安装一个管理工具ipvsadm即可。
ipvsadm 核心功能:集群服务管理:增、删、改 ;集群服务的RS管理:增、删、改; lvs状态查看
安装
如果提示命令不存在则,执行如下命令安装
[root@localhost ~]# ipvsadm
-bash: ipvsadm: command not found
[root@localhost ~]# yum install ipvsadm -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.bfsu.edu.cn
* extras: mirrors.bfsu.edu.cn
* updates: mirrors.bfsu.edu.cn
ipvsadm定义规则格式
# 服务管理
ipvsadm -A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask]
-A: 表示添加一个新的集群服务
-E: 编辑一个集群服务
-t: 表示tcp协议
-u: 表示udp协议
-f: 表示firewall-Mark,防火墙标记
service-address: 集群服务的IP地址,即VIP
-s 指定调度算法
-p 持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
-M 定义掩码
ipvsadm -D -t|u|f service-address 删除一个集群服务
ipvsadm -C 清空所有的规则
ipvsadm -R 重新载入规则
ipvsadm -S [-n] 保存规则
ipvsadm -a|e -t|u|f service-address -r server-address
# realsever管理
ipvsadm -a|e -t|u|f service-address -r server-address
[-g|i|m] [-w weight]
-a 添加一个新的realserver规则
-e 编辑realserver规则
-g 表示定义为LVS-DR模型
-i 表示定义为LVS-TUN模型
-m 表示定义为LVS-NAT模型
-w 定义权重,后面跟具体的权值
# 配置查看
ipvsadm -L|l [options]
常用选项[options]如下:
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-c: 显示当前的ipvs连接状况
# 清除所有
ipvsadm -C
# 清除清除计数
ipvsadm -Z
# 保存规则
--手动保存
ipvsadm -S|--save > /etc/sysconfig/ipvsadm
ipvsadm -R < /etc/sysconfig/ipvsadm
--修改配置文件
# Unload modules on restart and stop
# Value: yes|no, default: yes
# This option has to be 'yes' to get to a sane state for a ipvs
# restart or stop. Only set to 'no' if there are problems unloading ipvs
# modules.
IPVS_MODULES_UNLOAD="yes"
# Save current ipvs rules on stop.
# Value: yes|no, default: no
# Saves all ipvs rules to /etc/sysconfig/ipvsadm if ipvsadm gets stopped
# (e.g. on system shutdown).
# 若ipvsadm服务停止,所有的规则将会保存在/etc/sysconfig/ipvsadm文件内
IPVS_SAVE_ON_STOP="yes"
# Save current ipvs rules on restart.
# Value: yes|no, default: no
# Saves all ipvs rules to /etc/sysconfig/ipvsadm if ipvsadm gets
# restarted.
# 重启时保存当前规则
IPVS_SAVE_ON_RESTART="yes"
# Numeric status output
# Value: yes|no, default: yes
# Print IP addresses and port numbers in numeric format in the status output.
IPVS_STATUS_NUMERIC="yes"
此时重启服务,然后设置的规则将会在重启,停止服务时保存,且在正常开启服务时加载。
LVS配置及实战
NAT模式
环境准备
准备三台Vmware虚拟机
192.168.47.15 LVS服务器 配置VIP为 10.238.105.223
192.168.90.11 web 应用1
192.168.90.12 web应用2
网络配置说明
1、三台虚拟机默认网卡采用 NAT 网络模式, 配置固定IP分别为 192.168.90.15 192.168.90.11 192.168.90.12
2、LVS服务器 增加一个网卡设置为桥接模式。桥接模式自动分配IP10.238.105.223 该ip和Vmware宿主机可以互相访问
3、需要特别指出的是 两台web应用的网关必须指定为 LVS服务器的Ip 192.168.90.15 ,否则测试过过程中会发现只有请求包没有相应包。
LVS虚拟机Vmware网卡设置如下
应用服务器网络卡配置详情如下:
---LVS服务器网络配置
TYPE=Ethernet
PROXY_METHOD=none
ot@localhost network-scripts]# vi ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.47.15
NETMASK=255.255.255.0
GATEWAY=192.168.47.1
#DNS=192.168.47.2
DNS1=8.8.8.4
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b2ce2b85-ee42-4a7a-b3f6-e8690d8201bc
DEVICE=ens33
ONBOOT=yes
----web 应用服务器网络配置
[root@host11 network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.47.11
NETMASK=255.255.255.0
GATEWAY=192.168.47.15
#DNS=192.168.47.1
#DNS1=10.238.113.254
DNS1=8.8.8.8
DNS2=8.8.8.4
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b2ce2b85-ee42-4a7a-b3f6-e8690d8201bc
DEVICE=ens33
ONBOOT=yes
web服务
这里使用过一个tomcat 提供 https(443端口) 和 http(80端口) 服务,web 应用提供一个接口地址可返回请求详细信息如下,启动两台应用服务器上的服务并做访问测试如下
通过配置工具 ipvsadm 配置负载及规则,配置完成后通过命令可以看到 服务详情
ipvsadm -A -t 10.238.105.223:80 -s rr
ipvsadm -a -t 10.238.105.223:80 -r 192.168.47.11 -m
ipvsadm -a -t 10.238.105.223:80 -r 192.168.47.12 -m
[root@bogon network-scripts]# ipvsadm -Ln --stats --查看负载详情
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 10.238.105.223:80 13 79 70 9713 13125
-> 192.168.47.11:80 6 38 34 4377 6081
-> 192.168.47.12:80 7 41 36 5336 7044
访问测试
浏览器访问 http://10.238.105.223/testWeb/getCIPInfo 可以负载到后端的 web服务,并且可以看到由于NAT模式在转发的过程中只是修改了目标IP 因此,后端web服务看到的请求者ip 就是宿主机 (请求发起者)的IP地址,这点和Nginx/haproxy不同
多次刷新 发现请求都负载到了 后端的 12服务器上,负载策略我们明明设置的rr 随机啊?
[root@bogon network-scripts]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 10.238.105.223:80 3 44 42 11354 17484
-> 192.168.47.11:80 1 4 3 172 132
-> 192.168.47.12:80 2 40 39 11182 17352
通过多次请求访问并观察负载状态 可以看到确实会随机请求后方的服务,只不过不是十分均衡
[root@bogon network-scripts]# watch -n 1 ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 10.238.105.223:80 31 654 493 164899 187569
-> 192.168.47.11:80 15 169 108 33126 40355
-> 192.168.47.12:80 16 485 385 131773 147214
上述实战测试过程中 VIP使用的是 桥接网卡的IP 测试成功,那么不使用桥接网卡是否可以成功呢?后续进行测试验证。
DR模式
虚拟机准备
准备三台Vmware虚拟机
192.168.47.15 DirectServer LVS服务器 配置VIP为 192.168.47.100
192.168.90.11 RealServer1 web 应用1
192.168.90.12 RealServer2 web应用2
网络配置:三台虚拟机网络模式都配置为NAT模式,DS server 为一个网卡配置两个IP,默认固定IP为 192.168.47.15,网关指向NAT网关,然后 通过命令添加 192.168.47.100 ,具体见配置详情
ipvs安装
yum install ipvsadm -y
配置DS服务器
配置的具体命令如下
[root@bogon ~]# nmcli conn show
NAME UUID TYPE DEVICE
Wired connection 1 d1d93c8e-28eb-3e15-8f8e-f228b9b08953 ethernet ens37 --因为我这里配置了另外一张网卡,所以这里两条记录,默认是没有这条记录的,
ens33 b2ce2b85-ee42-4a7a-b3f6-e8690d8201bc ethernet ens33
[root@bogon ~]# nmcli conn mod ens33 +ipv4.addr 192.168.47.100/24 ---为网卡 ens33 添加 第二个IP 192.168.47.100
[root@bogon ~]# systemctl restart network --添加完重启网络服务
--配置LVS服务通过VIP 的80 端口 负载到RS服务器
[root@bogon ~]# ipvsadm -A -t 192.168.47.100:80 -s rr
[root@bogon ~]# ipvsadm -a -t 192.168.47.100:80 -r 192.168.47.11 -g
[root@bogon ~]# ipvsadm -a -t 192.168.47.100:80 -r 192.168.47.12 -g
[root@bogon ~]# 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.47.100:80 rr
-> 192.168.47.11:80 Route 1 1 0
-> 192.168.47.12:80 Route 1 1 0
配置RS服务器
分别在两台RS服务器上进行配置。
RealServer1 服务器
绑定VIP到回环网卡
[root@host11 network-scripts]# cd /etc/sysconfig/network-scripts/
[root@host11 network-scripts]# cp ifcfg-lo ifcfg-lo:10 --复制一个lo网卡配置
[root@host11 network-scripts]# vi ifcfg-lo:10 --编辑复制出来的lo:10配置信息
[root@host11 network-scripts]# cat ifcfg-lo:10
DEVICE=lo:10 --名字修改为和文件名 ifcfg- 后的部分保持一致
IPADDR=192.168.47.100 --修改IP地址为 VIP
NETMASK=255.255.255.255 --掩码修改为 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
RS1关闭arp响应
[root@host11 network-scripts]# vi /etc/sysctl.conf --修改系统配置
[root@host11 network-scripts]# cat /etc/sysctl.conf --增加如下内容
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@host11 network-scripts]# sysctl -p --使配置生效
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
上述两项配置arp_ignore arp_announce 保证了该方案的可行性,两项配置的具体含义如下
arp_ignore 规定了计算机如何对待收到的arp请求,取值如下:
arp请求包中查询mac地址的目标IP,我们称之为arp目标IP
1:当本机收到arp请求包时,只要本机所有的网卡/网络接口中任何一个网卡上有这个目标ip ,那么就应答这个请求包。
2:当本机收到arp请求包时,只有当收到请求包的网卡/网络接口上,有这个IP时,才相应这个请求包。
3:当本机收到arp请求包时,如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4-7:保留未使用
8:不回应所有的arp查询请求
这样 当用户机器查询VIP mac地址时,因为VIP配置在 lo 网络接口上,所以不会回应。(网上大部分教程一般都没有解释清楚这个)
arp_announce 的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址,
比如系统准备通过网卡发送一个数据包a ,这时数据包a的源IP和目的IP一般都是知道的,而根据目的IP查询路由表,发送网卡也是确定的,故源MAC地址也是知道的,这时就差确定目的MAC地址了。而想要获取目的IP对应的目的MAC地址,就需要发送arp请求。arp请求的目的IP自然就是想要获取其MAC地址的IP,而arp请求的源IP是什么呢? 一般是数据包a的源IP地址,但是不是一定的,arp请求的源IP是可以选择的,控制这个地址如何选择就是arp_announce的作用。
常用的取值有0,1,2。
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。随便选一个,一般是数据包的源IP。LVS DR模式下 也就是 VIP,如果使用了这个 那么arp 响应包 就会到LVS服务器 而到不了 RS
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。 就是尽量使用数据发送网卡所在子网的ip,使用这个大概率 会使用数据发送网卡上的正确IP,但不是一定
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。 必须使用数据发送网卡上最合适的地址来发送arp 请求。 这种配置就选择最合适的来发送,就是最大概率是对的。 保证RS能知道 客户端机器的mac
配置完重启网络服务
systemctl restart network
RS2的配置同RS1 完全一致
访问测试
通过宿主机的浏览器 访问 VIP 的80 端口,可以负载到后端的web服务如下:
通过 ipvsadm -Ln --stats 查看后端服务器的流量分布,可以看到两条服务器都有被负载到,也可以为web服务分别添加各自标识的页面,来区分RS服务。
[root@bogon ~]# watch -n 1 ipvsadm -Ln --stats
Every 1.0s: ipvsadm -Ln --stats Tue Apr 19 02:06:03 2022
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.47.100:80 31 1976 0 279503 0
-> 192.168.47.11:80 15 257 0 64976 0
-> 192.168.47.12:80 16 1719 0 214527 0
LVS高可用配置
lvs高可用配置见 高可用配置
如果对你有帮助请帮忙点个赞,好人一生平安 (●’◡’●)
更多推荐
所有评论(0)