第十三周《简述Linux集群类型 ...》下

2018-11-14  本文已影响0人  N32_Diamond

一、简述Linux集群类型、系统扩展方式及调度方法

1.概念

Linux cluster,Linux集群系统是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。一个集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群,用户是不会意识到集群系统底层的节点的。在他们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。
Linux 集群系统的优点在于:
(1)高扩展性,管理员可自行增加或删除集群系统中的节点。
(2)高可用性,当集群中某一个节点失效时,其负责的任务可以传递给其他节点,因此能够有效防止单点失效。
(3)高性能,负载均衡的集群系统能够同时接入更多的用户。
(4)高性价比,可以使用廉价的硬件构造出高性能的系统。

2. Linux Cluster类型

(1)LB:Load Balancing,负载均衡;
提供和节点个数成正比的负载能力,这种集群很适合提供大访问量的Web服务。负载均衡集群往往也具有一定的高可用性特点。Turbolinux Cluster Server、Linux Virtual Server都属于负载均衡集群。主流架构Nginx+Keepalived(利于动静分离)、LVS+Keepalived。

(2)HA:High Availiablity,高可用集群;

(0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%
一般高可用集群的标准有如下几种:
99%:表示 一年不在线时间不超过87小时
99.9% :表示一年不在线时间不超过8.7小时
99.99%: 表示一年不在线时间不超过1小时
99.999% :表示一年不在线时间不超过3-5分钟

(3)HP:High Performance,高性能集群;
HPCC高性能计算集群也称为DAS(数据分析超级计算机)

(4)分布式系统集群:
分布式存储:分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,在元数据服务器做索引,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。

分布式计算:分布式计算是一种计算方法,和集中式计算是相对的。随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。

3. 系统扩展类型

常见的系统扩展类型有:

4. 负载均衡集群实现:

4.1、硬件设备实现负载均衡:

4.2、软件实现负载均衡:

4.3、基于工作的协议层次划分:
(1)传输层调度器(通用):(DPORT)

(2)应用层调度器(专用):(自定义的请求模型分类)
proxy server:

4.4、集群的站点指标:

4.5、集群的会话保持问题:
为了对访问用户的追踪

5.Lvs集群调度算法

常见的lvs集群的调度算法分为静态调度算法和动态调度算法。
5.1、 静态调度算法:根据算法本身进行调度;
rr:roundrobin,轮询,调度器将外部请求轮流分配到集群中的节点中。
wrr:Weighted RR,加权轮询,调度器根据事先设置的权重来分配外部请求到集群中的节点。
sh:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的真实服务器Ip,从而实现会话绑定;
dh:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的真实服务器IP,典型使用场景是正向代理缓存场景中的负载均衡;

5.2、动态算法:
前端的调度器会根据后端真实服务器的实际连接情况来分配请求

(1)、LC:最少连接(Least Connections)

调度器通过“最少连接”调度算法动态的将网络请求调度到已经建立连接最少的服务器上,如果集群的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以更好地均衡负载

(2)、WCL:加权最小连接(Weighted Least Connections)

在集群系统中的服务器性能差异较大的情况下,调度器采用加权最小连接的调度算法来优化负载均衡,具有较高权值的服务器将承受较大比例的活动负载连接,

(3)、SED:最短延迟调度(Shortest Expected Delay)

在WCL的基础上改进,Overhead=(ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的接受下次请求,+1的目的是为为了考虑加权的时候,非活动连接过多的缺陷,当权限过大的时候,会导致空闲服务器一直处于无连接的状态

(4)、NQ:永不排队/最少列队调度(NEVER Queue Scheduling)

无需列队,如果有台realserver的连接数=0直接就分配过去,不需要进行sed运算,保证不会有一个主机很空闲,在SED的基础上不论+几,第二次一定给下一个,不考虑非活动连接,才会用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而http的处于保持状态就需要考虑非活动连接给服务器的压力

(5)、LBLC:基于局部性的最少连接(localibty-Based Least Connections)

基于局部性的最少连接调度算法是针对目标IP地址的负载均衡,目前主要运行在Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用而且没有超载,将请求发送到该服务器,若i服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用最少连接的原则选出一个可用的服务器,将请求发送到该服务器

(6)、LBLCR:带复制性的基于局部性最少连接(Local-Based Least Connections With Replication)

带复制性的基于局部性最少连接调度算法也是针对目标IP地址的负载均衡,目前主要用在Cache集群系统。它和LBLC算法不同的是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP到一台服务器的映射,该算法根据一请求的目标IP地址找出该目标IP地址对应的服务器组,按照最小连接原则服务器组中选一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载,则按照最小连接原则从这个集群中选出一台服务器,将该服务器加到服务组中,将请求发送到该服务器,同时当该组服务器有一段时间没有被修改,将最忙的服务器从服务组删除,以降低复制的程度。

二、简述lvs四种集群有点及使用场景

1、lvs集群的类型:

  1. lvs-dr: lvs-dr

    Direct Routing,直接路由;
    通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
    Director和各RS都得配置使用VIP;
    <1> 确保前段路由器将目标ip为VIP的请求报文发往Director,有以下三种方式:
    在前端网关做静态绑定
    在RS上使用arptables;
    在RS上修改内核参数以限制arp通告及应答级别;
    <2> RS的RIP可以使用私网地址,也可以使用公网地址;RIP和DIP在同一个ip网络;RIP的网关不能只想DIP,以确保响应报文不会经由Director;
    <3> RS跟Director要在同一个物理网络;
    <4> 请求报文要经由Director,但响应报文不能经由Director,而是由RS直接发往Client;
    <5> 不支持端口映射

  1. lvs-tun: lvs-tun

    转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP);
    <1> DIP VIP RIP 都应该是公网地址;
    <2> RS的网关不能,也不可能指向DIP;
    <3> 请求报文要经由Director,但响应不能经由Director;
    <4> 不支持端口映射
    <5> RS的OS得支持隧道功能;

  1. lvs-fullnat: lvs-fullnat

    通过同时修改请求报文的源IP地址和目标IP地址进行转发
    CIP< - - > DIP
    VIP< - - > RIP
    <1> VIP是公网地址,RIP和DIP是私网地址,且通常不在同一个IP网络;因此,RIP的网关一般不会指向DIP
    <2> RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但是Director还要将其发往Client;
    <3> 请求和响应报文都经由Director;
    <4> 支持端口映射;

  1. 总结:

三、描述LVS-NAT、LVS-DR的工作原理并实现配置

1. LVS的基本工作原理 lvs

(1)当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
(2)PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
(3)IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
(4)POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

2. LVS的组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

3. LVS相关术语

(1)DS:Director Server。指的是前端负载均衡器节点。
(2)RS:Real Server。后端真实的工作服务器。
(3)VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
(4)DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
(5)RIP:Real Server IP,后端服务器的IP地址。
(6)CIP:Client IP,访问客户端的IP地址。

4. ipvsadm的用法

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
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 [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]

其中相关命令选项的解释为:

常用选项 解释
-A,--add-service 添加一个虚拟服务,即添加一个需要被负载均衡的虚拟地址。
-E,--edit-service 修改一个虚拟服务;
-D,--delete-service 删除一个虚拟服务;
-C,--clear 清楚所有虚拟服务;
-R,--restore 从标准输入中获取ipvsadm规则进行恢复;
-S,--save 从标准输出中输出ipvsadm规则,能将规则保存到指定文件,在以后通过-R恢复。
-a,--add-server 为虚拟服务添加一个real server;
-e,--edit-server 修改real server的配置;
-d,--delete-server 删除real server;
-L,-l,--list 列出ipvsadm配置的所有虚拟服务,可结合-c显示连接表;
-Z,--zero 将虚拟服务的相关数据记录清零;

以下参数可跟在命令选项后使用:

参数 解释
-t,--tcp-service service-address 指定虚拟服务为tcp服务,service-address是host[:port]的形式,端口为0时表示任意端口,但需要加上-p选项才能使用;
-u,--udp-service service-address 指定虚拟服务的udp服务;
-f,--fwmark-service integer 指定firewall mark标记的不同的地址和端口的虚拟地址整合为一个虚拟服务。firewall mark可以通过iptables命令指定;
-s,--scheduler scheduling-method 指定调度算法,调度算法包括:rr,wrr,lc,wlc,lbcl,lblcr,dh,sh,sed,nq;
-p,--persistent [timeout] 设置持久连接,这个模式可以使得来自同一个Ip的多个请求被送往同一个RS中;
-r,--real-server server-address 为虚拟服务指定数据可以转发到的真实服务器的地址,可添加端口号,若没指定端口号,则调用虚拟地址的端口号;
-g,--gatewaying dr模式,指定lvs的工作模式,此模式为默认模式;
-i,--ipip 使用tun模式;
-m,--masquerading 使用NAT模式;
-w,--weight weight 设置权重,范围为0-65535,0表示该RS不会受到新的连接;
-x, --u-threshold uthreshold 设置一个服务器可以维持的连接上限。0~65535。设置为0表示没有上限。
-y, --l-threshold lthreshold 设置一个服务器的连接下限。当服务器的连接数低于此值的时候服务器才可以重新接收连接。如果此值未设置,则当服务器的连接数连续三次低于uthreshold时服务器才可以接收到新的连接。

以下参数可用是显示服务的状态信息:

参数 解释
-c, --connection 列出当前的IPVS连接。
--timeout 列出超时
--stats 状态信息
--rate 传输速率
--thresholds 列出阈值
--persistent-conn 坚持连接
--sor 把列表排序。
--nosort 不排序
-n, --numeric 不对ip地址进行dns查询
--exact 单位
5. lvs-nat工作原理及配置实现 lvs-nat

(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

LVS-NAT模型的特性
实验配置:
相关IP 地址
CIP 192.168.0.129
VIP 192.168.0.100
DIP 192.168.32.132
RIP1 192.168.32.129
RIP2 192.168.32.128
#把主机192.168.32.132配置成Director,先检查看内核是否支持lvs
[root@localhost ~]# grep -i "ipvs" -C 10 /boot/config-3.10.0-514.el7.x86_64
#在192.168.32.132上在添加一块网卡,配置仅主机模式并配置ip
[root@localhost ~]# ifconfig ens37 192.168.0.100/24
#开启核心转发功能
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
#在RS1和RS2两台主机上先安装httpd、telnet-server两个服务以便后面测试
[root@rs1 ~]# yum install httpd telnet-server -y
[root@rs2 ~]# yum install httpd telnet-server -y
#分别给R1和R2配置两个不同的测试页
[root@rs1 ~]# vim /var/www/html/index.html
<h1>rs1,192.168.32.129</h1>
[root@rs2 ~]# vim /var/www/html/index.html 
<h1>rs2,192.168.32.128</h1>
#配置RS1和RS2的网关指向192.168.32.132
[root@rs1 ~]# route add default gw 192.168.32.132
[root@rs2 ~]# route add default gw 192.168.32.132
#至此网络配置完成,下面配置lvs规则定义集群
[root@localhost ~]# yum install ipvsadm
[root@localhost ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.32.128 -m
[root@localhost ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.32.129 -m
[root@localhost ~]# 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.100:80 rr
  -> 192.168.32.128:80            Masq    1      0          0         
  -> 192.168.32.129:80            Masq    1      0          0         
#使用192.168.0.129的主机访问测试:
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
#加权轮询测试
[root@localhost ~]# ipvsadm -E -t 192.168.0.100:80 -s wrr
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.128 -m -w 2
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.129 -m -w 3
[root@localhost ~]# 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.100:80 wrr
  -> 192.168.32.128:80            Masq    2      0          0         
  -> 192.168.32.129:80            Masq    3      0          0         
#访问测试
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
#假如后端的RS2挂了,lvs还会继续调度,因此需要手动删除或者修改权重为0
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
curl: (7) couldn't connect to host
<h1>rs1,192.168.32.129</h1>
#修改权重为0
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.128 -m -w 0
[root@localhost ~]# 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.100:80 wrr
  -> 192.168.32.128:80            Masq    0      0          4         
  -> 192.168.32.129:80            Masq    3      0          12        
测试:
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.0.100;done
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs1,192.168.32.129</h1>
#假如RS1,RS2都挂了,可以把director当做一个服务,把RS1,RS2权重改为0
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.129 -m -w 0
[root@localhost ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.32.128 -m -w 0
[root@localhost ~]# ipvsadm -a -t 192.168.0.100:80 -r 127.0.0.1 -g
[root@localhost ~]# vim /var/www/html/index.html
<h1>sorry</h1>
[root@localhost ~]# 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.100:80 wrr
  -> 127.0.0.1:80                 Route   1      0          0         
  -> 192.168.32.128:80            Masq    0      0          0         
  -> 192.168.32.129:80            Masq    0      0          0         
测试:
[root@wujunjie6 ~]# for i in {1..5};do curl http://192.168.0.100;done
<h1>sorry</h1>
<h1>sorry</h1>
<h1>sorry</h1>
<h1>sorry</h1>
<h1>sorry</h1>
6.lvs-dr工作原理及配置实现 lvs-dr

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

LVS-DR模型的特性
特点1的解决方案:
配置实验:
相关IP 地址
CIP 192.168.32.200
VIP 192.168.32.99
DIP 192.168.32.132
RIP1 192.168.32.129
RIP2 192.168.32.128
#通过脚本修改内核参数以现在RS的ARP通告和应答级别
[root@rs1 ~]# vim setparam.sh
#!/bin/bash
case $1 in
        start)
                echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
                echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
                echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
                ;;
        stop)
                echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
                echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
                echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
                ;;
        *)
                echo "Usage $(basename $0) start|stop"
                exit 1
                ;;
Esac
#分别在RS1和RS2上运行此脚本
[root@rs1 ~]# bash -x setparam.sh start
[root@rs2 ~]# bash -x setparam.sh start
#在rs1和rs2上配置VIP
[root@rs1 ~]# ifconfig lo:0 192.168.32.99 netmask 255.255.255.255 broadcast 192.168.32.99 up
[root@rs2 ~]# ifconfig lo:0 192.168.32.99 netmask 255.255.255.255 broadcast 192.168.32.99 up
#添加路由条目由哪个设备进来就由哪个设备出去
[root@rs2 ~]# route add -host 192.168.32.99 dev lo:0
[root@rs1 ~]# route add -host 192.168.32.99 dev lo:0
#配置Director的VIP
[root@localhost ~]# ifconfig ens33:0 192.168.32.99 netmask 255.255.255.255 broadcast 192.168.32.99 up
#在Director上安装ipvs并定义集群
[root@localhost ~]# ipvsadm -A -t 192.168.32.99:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.32.99:80 -r 192.168.32.128 -g
[root@localhost ~]# ipvsadm -a -t 192.168.32.99:80 -r 192.168.32.129 -g
[root@localhost ~]# 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.32.99:80 rr
  -> 192.168.32.128:80            Route   1      0          0         
  -> 192.168.32.129:80            Route   1      0          0       
在client主机上测试:
[root@wujunjie6 ~]# for i in {1..10};do curl http://192.168.32.99;done
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
<h1>rs1,192.168.32.129</h1>
<h1>rs2,192.168.32.128</h1>
上一篇 下一篇

猜你喜欢

热点阅读