LVS负载均衡
文章目录
公司中先部署http服务然后把网站内容改成不一样的,然后配置调度器,测试调度器是不是能访问到不同的内容,如果无误没问题再把网页的内容改成应该放的东西
负载均衡集群实现的方式:
软件实现方式:
-
lvs 四层负载 传输层(协议-端口号)
-
haproxy 七层负载 osi模型第7层
-
Nginx 七层负载 osi模型第7层
###硬件实现方式: F5
集群的分类:
- 负载均衡 提升效率
- 高可用 保障关键性业务的可靠性(调度器)
- 高性能 可学计算,天气预报
LVS介绍
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
lvs三种工作模式
1、基于NAT的LVS模式负载均衡
NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。VS/NAT工作模式拓扑结构如图2所示,LVS负载调度器可以使用两块网卡配置不同的IP地址,eth0设置为私钥IP与内部网络通过交换设备相互连接,eth1设备为外网IP与外部网络联通。
第一步,用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。
第二步,用户将请求发送至124.126.147.168,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.0.1~192.168.0.3),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。
第三步,真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。
Client IP:CIP(客户端IP)
Director Virutal IP:VIP面向客户端(调度器虚拟IP)
Director IP:DIP面向服务器(调度器IP)
Real Server IP:RIP(真实服务器IP)
###LVS-NAT模式特点:
- RS和DIP应该使用私网地址,且RS的网关要指向DIP
- 请求和响应报文都要经由director转发,所以配置时需要将director的转发功能开启,极高负载的场景中,director可能会成为系统性能瓶颈
- 支持端口映射
- RS可以使用任意OS(任意系统)
- RS的RIP和Director的DIP必须在同一IP网络
2、基于TUN的LVS负载均衡
lvs的默认模式
在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。
LVS-TUN模式特点:
- RIP,DIP,VIP必须是公网地址
- RS的网关不能指向DIP
- 请求报文必须经由director调度,但响应报文必须不能经由director
- 不支持端口映射
- RS的OS(系统)必须支持隧道功能
3、基于DR的LVS负载均衡
在LVS(TUN)模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与LVS(TUN)类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见。
LVS-DR模式特点:
保证前端路由器将目标IP为VIP的请求报文发送给director,解决方案有以下三种
- 静态绑定(存在于理想状态中,难以实现)
- arptables(使用防火墙,降低效率,很难实现)
- 修改RS主机内核的2个参数: (最为常用的方式)
RS(服务端)主机内核2个参数:
arp_announce:是否接收并记录别人的通告以及是否通告自己的mac地址给别人 ;arp_announce有三个可选值,0,1,2
- 0(default,默认值为0):通告自己所拥有的所有地址
- 1:尽量不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,但是是尽量不通告,有可能还是会通告的
- 2:总是不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,绝对不会通告
arp_ignore:是否响应arp请求 ;arp_ignore有9个可选值,0,1,2,3,4,5,6,7,8
- 0(default,默认值为0):回应任何网络接口上对任何本地IP地址的arp查询请求
- 1:请求报文从哪个接口进入的且请求的目标地址就是此接口配置的地址才予以响应,否则不响应
- 2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
- 3:不回应该网络接口的arp请求,而只对设置的唯一和连接地址做出回应
- 4-7:保留未使用
- 8:不回应所有(本地地址)的arp查询
LVS负载均衡调度算法
根据前面的介绍,我们了解了LVS的三种工作模式,但不管实际环境中采用的是哪种模式,调度算法进行调度的策略与算法都是LVS的核心技术,LVS在内核中主要实现了一下十种调度算法。
1.轮询调度 RR
轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。
2.加权轮询调度 WRR
加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)
ipvsadm的用法
管理集群服务:
//管理集群服务(调度器DR)
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] //新增或编辑
ipvsadm -D -t|u|f service-address //删除
常见的service-address:
tcp:-t ip:port
udp:-u ip:port
fwm:-f mark
-s scheduler:默认为wlc
-p [timeout]:定义持久连接,timeout不指定时默认为300秒
//管理集群服务中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
server-address:ip[:port]
lvs-type:
-g:gateway,dr模式
-i:ipip,tun模式
-m:masquerade,nat模式
-w:设定权重,可为0到正无穷数值,设为0时不会被调度,默认为1
权重值越大则表示性能越好,被调度的资源也会更多
//清空和查看:
ipvsadm -C 清空
ipvsadm -L|l [options] 查看
options:
-n:numeric,基于数字格式显示地址和端口
-c:connection,显示当前ipvs连接
--stats:统计数据
--rate:输出速率信息
--exact:显示精确值,不做单位换算
//保存和重载:
ipvsadm -R 重载
ipvsadm -S [-n] 保存
NAT部署http服务负载均衡
- 环境:
主机 | IP地址 |
---|---|
(调度器) VIP | 192.168.200.5 192.168.196.130 |
RS1(服务器1) | 192.168.200.6 |
RS2(服务器2) | 192.168.200.7 |
//关闭防火墙和selinux
[root@lvs ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@lvs ~]# getenforce
Disabled
[root@RS1 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@RS1 ~]# getenforce
Disabled
[root@RS2 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@RS2 ~]# getenforce
Disabled
//添加网卡 模式一个为NAT一个为仅主机模式 修改匹配文件
[root@lvs network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:a3:5b:7b brd ff:ff:ff:ff:ff:ff
inet 192.168.200.5/24 brd 192.168.200.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea3:5b7b/64 scope link
valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:a3:5b:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.196.130/24 brd 192.168.196.255 scope global dynamic noprefixroute ens224
valid_lft 1679sec preferred_lft 1679sec
inet6 fe80::445:38b3:54da:f371/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@lvs network-scripts]# cat ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.200.5
GATEWAY=192.168.200.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@lvs network-scripts]# cat ifcfg-ens224
TYPE=Ethernet
BOOTPROTO=static
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=192.168.196.130
NETMASK=255.255.255.0
[root@lvs network-scripts]# ping www.baidu.com
PING www.baidu.com (36.152.44.95) 56(84) bytes of data.
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=1 ttl=128 time=22.7 ms
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=2 ttl=128 time=22.3 ms
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=3 ttl=128 time=22.4 ms
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=4 ttl=128 time=25.3 ms
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=5 ttl=128 time=24.5 ms
//配置RS网卡
[root@RS1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.200.6
GATEWAY=192.168.200.5 //网关指向DIP
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@RS2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.200.7
GATEWAY=192.168.200.5
NETMASK=255.255.255.0
DNS1=114.114.114.114
//RS1和RS2配置apache页面
[root@RS1 ~]# yum -y install httpd
//配置页面
[root@RS1 ~]# cd /var/www/html/
[root@RS1 html]# ls
[root@RS1 html]# echo 'test rs1' > index.html
//修改配置文件
[root@RS1 html]# vi /etc/httpd/conf/httpd.conf
ServerName www.example.com:80
[root@RS1 html]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# cd /var/www/html/
[root@RS2 html]# ls
[root@RS2 html]# echo 'test rs2' > index.html
[root@RS2 html]# vi /etc/httpd/conf/httpd.conf
ServerName www.example.com:80
[root@RS2 html]# systemctl enable --now httpd
//开启DR的ip转发功能
[root@lvs ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 //添加规则,开启转发功能
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
//在DR上添加并保存规则
[root@lvs ~]# ipvsadm -A -t 192.168.196.130:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.196.130:80 -r 192.168.200.6:80 -m
[root@lvs ~]# ipvsadm -a -t 192.168.196.130:80 -r 192.168.200.7: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 192.168.196.130:80 rr
-> 192.168.200.6:80 Masq 1 0 0
-> 192.168.200.7:80 Masq 1 0 0
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.196.130:80 -s rr
-a -t 192.168.196.130:80 -r 192.168.200.6:80 -m -w 1
-a -t 192.168.196.130:80 -r 192.168.200.7:80 -m -w 1
[root@lvs ~]# curl http://192.168.196.130
test rs1
[root@lvs ~]# curl http://192.168.196.130
test rs2
DR部署http服务负载均衡
- 环境:
主机 | IP地址 |
---|---|
调度器 VIP | 192.168.200.5 192.168.200.100 |
RS1(服务器1) | 192.168.200.6 |
RS2(服务器2) | 192.168.200.7 |
在调度器上配置VIP和DIP
[root@lvs ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR0=192.168.200.5
GATEWAY=192.168.200.2
NETMASK0=255.255.255.0
IPADDR1=192.168.200.100
NETMASK1=255.255.255.0
//在R1和R2上配置RIP
[root@RS1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.200.6
GATEWAY=192.168.200.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@RS2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.200.7
GATEWAY=192.168.200.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
//在RS1和RS2上关闭arp包的通告和响应
[root@RS1 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS2 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
//在RS1和RS2上配置VIP
[root@RS1 ~]# ifconfig lo:0 192.168.200.100/32 broadcast 192.168.200.100 up
[root@RS1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.200.100/0 brd 192.168.200.100 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:56:ea:54 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.6/24 brd 192.168.200.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe56:ea54/64 scope link
valid_lft forever preferred_lft forever
[root@RS1 ~]# yum -y install net-tools
[root@RS1 ~]# route add -host 192.168.200.100 dev lo
[root@RS1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.200.2 0.0.0.0 UG 100 0 0 ens160
192.168.200.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.200.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@RS2 ~]# ifconfig lo:0 192.168.200.100/32 broadcast 192.168.200.100 up
[root@RS2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.200.100/0 brd 192.168.200.100 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:e4:ee:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.200.7/24 brd 192.168.200.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fee4:ee5c/64 scope link
valid_lft forever preferred_lft forever
[root@RS2 ~]# yum -y install net-tools
[root@RS2~]# route add -host 192.168.200.100 dev lo
[root@RS2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.200.2 0.0.0.0 UG 100 0 0 ens160
192.168.200.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.200.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@lvs~]# route add -host 192.168.200.100 dev ens33:0
//添加规则并且保存
[root@lvs ~]# yum -y install ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.200.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.200.100:80 -r 192.168.200.6:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.200.100:80 -r 192.168.200.7:80 -g
[root@lvs ~]# ipvsadm -Ln
[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.200.100:80 rr
-> 192.168.200.6:80 Route 1 0 0
-> 192.168.200.7:80 Route 1 1 0
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# systemctl enable ipvsadm
[root@lvs ~]# echo "ipvsadm -R < /etc/sysconfig/ipvsadm" >>/etc/rc.d/rc.local