1. LVS负载均衡的工作模式(lvs type):
1.1 NAT模式 lvs-nat:masquerade
工作原理
客户端与真实服务器之间是由LVS转发的.
- 客户端请求用的是CIP,会转换成VIP访问LVS;
- 然后LVS服务器会通过另一个IP——DIP,也就是作为内网IP ,来访问RS服务器IP;
- 接下来,真实服务器接收到LVS服务器的DIP访问请求,那么返回的对象也是LVS的DIP;
- 最后LVS服务器会把RS服务器的回应,转发到VIP,最终转发到客户端
所以,lvs-nat本质上就是多目标的DNAT(iptables),lvs-nat模式通过修改请求报文的目标IP地址(同时可能会修改目标端口)到 挑选出来的RS的RIP地址,来实现转发
模式特点
- lvs-nat的特点:
- RS和DIP应该使用私网地址,且RS的网关要指向DIP;RS的RIP和Director的DIP必须在同一IP网络
- 请求和响应报文都要经由director转发,所以配置时需要将director的转发功能开启,极高负载的场景中,director(调度器)可能会成为系统性能瓶颈
- 支持端口映射
- RS可以使用任意OS(RS操作系统不受限制,能提供网站即可)
1.2 DR模式 lvs-dr(direct routing):lvs的默认模式,gateway
工作原理
客户访问的流量经过调度器,但是返回的流量是RS服务器直接响应的
- lvs-dr模式通过修改请求报文的目标MAC地址进行转发,
Director:调度器要配置VIP,DIP RSs:所有的Real Server都要配置RIP,VIP
关键问题
在DR模式中,如何保证前端路由器将目标IP为VIP的请求报文发送给director,而不是RS呢?
静态绑定,也就是两个客户端和LVS服务器的Mac地址绑定,此方案一般不采用。arptables,但ARP是内网协议,客户端不属于内网,此方案也不采用- 修改RS主机内核的2个参数:arp_announce 和 arp_ignore
关于arp_announce: 是否接收并记录别人的通告,以及是否通告自己的mac地址给别人。
- 可选值
arp_announce有三个可选值,0,1,2,其意义如下:
- 0(default,默认值为0):通告自己所拥有的所有地址
- 1:尽量不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,但是是尽量不通告,有可能还是会通告的;
尽量避免不在该网络接口子网段的本地地址做出arp回应. ;当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.;此时会检查来访IP是否为所有接口上的子网段内ip之一.如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. - 2:总是不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,绝对不会通告;
对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址;首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址;如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
关于arp_ignore: 是否响应arp请求
- 可选值
arp_ignore有9个可选值,0,1,2,3,4,5,6,7,8,其意义如下:
- 0(default,默认值为0):回应任何网络接口上对任何本地IP地址的arp查询请求
- 1:请求报文从哪个接口进入的且请求的目标地址就是此接口配置的地址才予以响应,否则不响应只回答目标IP地址是来访网络接口本地地址的ARP查询请求
- 2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
- 3:不回应该网络接口的arp请求,而只对设置的唯一和连接地址做出回应
- 4-7:保留未使用,(暂时没定义)
- 8:不回应所有(本地地址)的arp查询
模式特点
- RS的RIP可以使用私有地址,也可以使用公网地址
- RS跟Director必须在同一物理网络中,中间不能有路由器相隔(直接连交换机)
- 请求报文经由Director调度,但响应报文一定不能经由Director调度
- 不支持端口映射
- RS可以是大多数OS
- RS的网关不能指向DIP
1.3 TUN模式 lvs-tun(ip tunneling):(隧道模式)
工作原理
LVS(TUN)的思路就是将请求与响应数据分离,让Director仅处理数据请求,而让RS响应数据包直接返回给客户端。 LVS(TUN不修改请求报文的ip首部,而是通过在原有的ip首部(CIP<–>VIP)之外再封装一个ip首部(DIP<–>RIP)
其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。
模式特点
- RIP,DIP,VIP必须是公网地址
- RS的网关不能指向DIP
- 请求报文必须经由director调度,但响应报文必须不能经由director
- 不支持端口映射
- RS的OS必须支持隧道功能
2. LVS负载均衡调度算法(十种调度算法)
lvs scheduler:lvs调度器,即lvs挑选RS的算法
静态算法(四种):仅根据算法本身进行调度
动态算法(六种):根据算法及各RS的当前负载状态进行调度
根据指定的算法算出overhead(负载),最终挑选出overhead值最小的则为被选中的RS
-
LC:Least Connection,最小连接调度 算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。具体算法如下: overhead = Active * 256 + Inactive -
WLC:Weighted LC,加权最小连接调度 算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值加权的LC,算法如下: overhead=(Active*256+Inactive)/ weight -
SED:Shortest Expection Delay,最短的期望的延迟调度 最短期望延迟算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算 A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。(谁当前延迟最少给谁)算法如下: overhead = (Active + 1) * 256 / weight -
NQ:Nevel Queue,最少队列调度 此算法是SED算法的改进,根据SED算法每台主机第一次至少要均分配一次,然后再按SED算法来挑选。但此算法无需队列,如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。 -
LBLC:Locality-Based LC,基于局部的最少连接调度 基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。 -
LBLCR:Locality-Based Least-Connection with Replication,带复制的基于局部性的最少连接 带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度
3. ipvsadm命令详解:
基本语法:
ipvsadm -A|E -t|u|f <集群服务地址> [-s <调度算法>] [-p <超时时间>] [-M <掩码>] [-b <标志>]
ipvsadm -D -t|u|f <集群服务地址>
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f <集群服务地址> -r <真实服务器地址> [选项]
ipvsadm -d -t|u|f <集群服务地址> -r <真实服务器地址>
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f <集群服务地址>]
ipvsadm --set <超时时间>
ipvsadm --start-daemon <主或备> [--mcast-interface <组播接口>] [--syncid <SID>]
ipvsadm --stop-daemon <主或备>
ipvsadm -h
子命令
--add-service -A 添加一个集群服务,需要使用选项
--edit-service -E 编辑一个集群服务,需要使用选项
--delete-service -D 删除指定集群服务,需要使用选项
--clear -C 删除所有集群服务,包括真实服务器转发策略规则
--restore -R 从标准输入中恢复策略规则
--save -S 保存策略规则到标准输出
--add-server -a 添加一个真实服务器,需要使用选项
--edit-server -e 编辑一个真实服务器,需要使用选项
--delete-server -d 删除一个真实服务器,需要使用选项
--list -L|-l 查看集群服务列表,包括真实服务器转发策略规则
--zero -Z 计数器清零。清除连接数、包转发等数量统计信息
--set <超时时间> 设置TCP、TCPFIN(TCP关闭连接状态)、UDP连接超时时间,用于
会话保持。一般情况下TCP和UDP超时时间保持默认就好,TCPFIN
可以根据情况设定,指定它则用户请求连接关闭,该连接则会变
为非活跃(InActive)空闲等待状态,在空闲等待时间内,如果
来自同一源IP的请求,则还会转发给后端的同一台真实服务器上
--start-daemon 开启连接同步守护进程。在选项后面指定自己是Master(主)还
是backup(备),主负载调度器会同步所有策略及连接状态到备
负载调度器,当主故障,备可以接替其工作
--stop-daemon 停止连接同步守护进程
--help -h 显示帮助信息
选项
--tcp-service -t <集群服务地址> 允许集群服务使用的传输协议为TCP。<IP:Port>
--udp-service -u <集群服务地址> 允许集群服务使用的传输协议为UDP。<IP:Port>
--fwmark-service -f <防火墙标识> 使用一个整数值来防火墙标识集群服务,而不是地址、
端口和协议使用它,我们可以通过结合IPtables将多
个以调度器为目标的端口定义成一个防火墙标识,由
ipvsdam通过此项关联标识,则可以实现对一个IP多
端口调度,即实现后端服务器可以开放多个服务
--scheduler -s scheduler 指定集群服务使用的调度算法:rr|wrr|lc|wlc|lblc
|lblcr|dh|sh|sed|nq,默认为wlc
--persistent -p <超时时间> 开启持久化服务,开启它则表示在指定时间内,来自同
一IP的请求都会转发到后端同一台真实服务器上
--netmask -M <网络掩码> 使用网络掩码来屏蔽持久化来源IP的地址范围,默认值
为255.255.255.255,即所有来源IP请求都会享受持久
化服务
--real-server -r <真实服务器地址> 指定真实服务器的主机IP与端口
--gatewaying -g 指定真实服务器转发工作模式,使用DR模式,默认
--ipip -i 指定真实服务器转发工作模式,使用TUN模式
--masquerading -m 指定真实服务器转发工作模式,使用NAT模式
--weight -w <权重值> 指定真实服务器的权重值
--u-threshold -x <上阀值> 设置转发请求的最大上连接阀值,范围为0~65535,当
当连接数超过指定上限时,LVS则不会转发请求
--l-threshold -y <下阀值> 设置转发请求的下连接阀值,范围为0~65535,当连接
数降低至指定值时,LVS则继续提供服务,默认值为0
--mcast-interface interface 设置用于连接同步守护进程的组播接口
--syncid sid 设置连接同步守护进程的SID号,用于标识,范围0~255
--connection -c 显示连接信息,一般与"-l"连用
--timeout 显示TCP、TCPFIN、UDP超时时间信息,一般与"-l"连用
--daemon 显示连接同步守护信息,一般与"-l"连用
--stats 显示统计信息,一般与"-l"连用
--rate 显示转发速率信息,一般与"-l"连用
--exact 显示数据包和字节计数器的确切值,扩大字符长度
--thresholds 显示阀值信息,一般与"-l"连用
--persistent-conn 显示持久化连接信息,一般与"-l"连用
--numeric -n 地址和端口以数字格式显示,一般与"-l"连用
--sched-flags -b <标识> 设置调度算法的范围标识,用于SH算法,有两个标识:
sh-fallback,如果真实服务器不可用,则将其转发到
其他真实服务器上。
sh-port,将源地址的端口号也添加到散列键=值中
4. lvs-nat模式配置步骤:
- 基本环境说明:
1个director,2个RS服务器,apache服务
1. director配置2块网卡
2.配置ip地址信息:director(dip,vip)RS(rip)
[root@lvs ~]# 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 mq state UP group default qlen 1000
link/ether 00:0c:29:81:e2:d5 brd ff:ff:ff:ff:ff:ff
inet 192.168.177.147/24 brd 192.168.177.255 scope global dynamic noprefixroute ens160
valid_lft 1749sec preferred_lft 1749sec
inet6 fe80::cc13:2a:6bc1:d78c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:81:e2:df brd ff:ff:ff:ff:ff:ff
inet 192.168.252.130/24 brd 192.168.252.255 scope global dynamic noprefixroute ens192
valid_lft 1799sec preferred_lft 1799sec
inet6 fe80::93b0:fc5f:6357:df27/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# ls
ifcfg-ens160 ifcfg-ens192
[root@lvs network-scripts]# vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.177.147
NETMASK=255.255.255.0
GATEWAY=192.168.177.2
DNS1=114.114.114.114
[root@lvs network-scripts]# ifdown ens160 ;ifup ens160
[root@lvs network-scripts]# vim ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=static
NAME=ens192
DEVICE=ens192
ONBOOT=yes
IPADDR=192.168.252.130
NETMASK=255.255.255.0
3. RS01 主机httpd主页配置与网关配置
[root@RS01 ~]# yum -y install httpd
[root@RS01 ~]# systemctl enable --now httpd
[root@RS01 ~]# echo "this is the test page of RS01 " >> /var/www/html/index.html
[root@RS01 ~]# cat /var/www/html/index.html
this is the test page of RS01
[root@RS01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.177.148
NETMASK=255.255.255.0
GATEWAY=192.168.177.147
DNS1=114.114.114.114
[root@RS01 ~]# ifdown ens160 ;ifup ens160
4. RS02 主机httpd主页配置与网关配置
[root@RS02 ~]# yum -y install httpd
[root@RS02 ~]# systemctl enable --now httpd
[root@RS02 ~]# echo "the test content of RS02 httpd " >> /var/www/html/index.html
[root@RS02 ~]# cat /var/www/html/index.html
the test content of RS02 httpd
[root@RS02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.177.149
NETMASK=255.255.255.0
GATEWAY=192.168.177.147
DNS1=114.114.114.114
[root@RS02 ~]# ifdown ens160 ;ifup ens160
5. 开启director的ip转发功能
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
6. 在director上添加并保存规则:
[root@lvs ~]# dnf provides *bin/ipvsadm
Last metadata expiration check: 0:16:55 ago on Sun 14 Aug 2022 09:30:49 PM CST.
ipvsadm-1.31-1.el8.x86_64 : Utility to administer the Linux Virtual Server
Repo : AppStream
Matched from:
Other : *bin/ipvsadm
[root@lvs ~]# dnf -y install ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.252.130:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.252.130:80 -r 192.168.177.148 -m
[root@lvs ~]# ipvsadm -a -t 192.168.252.130:80 -r 192.168.177.149 -m
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm-config
[root@lvs ~]# cat /etc/sysconfig/ipvsadm-config
-A -t 192.168.252.130:80 -s rr
-a -t 192.168.252.130:80 -r 192.168.177.148:80 -m -w 1
-a -t 192.168.252.130:80 -r 192.168.177.149:80 -m -w 1
[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.252.130:80 rr
-> 192.168.177.148:80 Masq 1 0 0
-> 192.168.177.149:80 Masq 1 0 0
7. 验证效果
5. lvs-dr配置步骤:
1. director只需要一块网卡
vip配置在lo接口中即可,此处假设dip与rip在同一网段
2. 配置director的ip地址信息(dip,vip)
配置dip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth160)
配置vip: ifconfig eth0:0 vip/32 broadcast vip up
#配置dip
[root@lvs ~]# cd -
/etc/sysconfig/network-scripts
[root@lvs network-scripts]# vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR0=192.168.177.147
NETMASK0=255.255.255.0
GATEWAY0=192.168.177.2
IPADDR1=192.168.177.100
NETMASK1=255.255.255.0
DNS1=114.114.114.114
[root@lvs network-scripts]# ifdown ens160 ;ifup ens160
[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 mq state UP group default qlen 1000
link/ether 00:0c:29:81:e2:d5 brd ff:ff:ff:ff:ff:ff
inet 192.168.177.147/24 brd 192.168.177.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet 192.168.177.100/24 brd 192.168.177.255 scope global secondary noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe81:e2d5/64 scope link
valid_lft forever preferred_lft forever
3. 配置RS的RIP:
编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth160
#RS01 RIP配置
[root@RS01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.177.148
NETMASK=255.255.255.0
GATEWAY=192.168.177.2
DNS1=114.114.114.114
[root@RS01 ~]# ifdown ens160 ;ifup ens160
#RS02 RIP配置 同上
[root@RS02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.177.149
NETMASK=255.255.255.0
GATEWAY=192.168.177.2
DNS1=114.114.114.114
[root@RS02 ~]# ifdown ens160 ;ifup ens160
4. 配置RS网卡内核参数:
编辑/etc/sysctl.conf文件,添加如下内容: net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
[root@RS01 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@RS01 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@RS01 ~]# 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@RS01 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
#RS02同理
[root@RS02 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@RS02 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@RS02 ~]# 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@RS02 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
5. 配置RSvip:
ifconfig lo:0 vip/32 broadcast vip up
- 注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告
[root@RS01 ~]# dnf -y install net-tools
[root@RS01 ~]# ifconfig lo:0 192.168.177.100/32 broadcast 192.168.177.100 up
[root@RS01 ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.177.148 netmask 255.255.255.0 broadcast 192.168.177.255
inet6 fe80::20c:29ff:feda:4c4c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:da:4c:4c txqueuelen 1000 (Ethernet)
RX packets 16322 bytes 15291315 (14.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9519 bytes 671265 (655.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.177.100 netmask 0.0.0.0
loop txqueuelen 1000 (Local Loopback)
#RS02同理
[root@RS02 ~]# dnf -y install net-tools
[root@RS02 ~]# ifconfig lo:0 192.168.177.100/32 broadcast 192.168.177.100 up
[root@RS02 ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.177.149 netmask 255.255.255.0 broadcast 192.168.177.255
inet6 fe80::20c:29ff:fe95:4546 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:95:45:46 txqueuelen 1000 (Ethernet)
RX packets 14102 bytes 15175108 (14.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8626 bytes 518017 (505.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.177.100 netmask 0.0.0.0
loop txqueuelen 1000 (Local Loopback)
6. 配置路由信息:在director和所有RS上进行如下配置:
**route add -host vip dev interface:0**
[root@lvs ~]# route add -host 192.168.177.100 dev ens160
[root@RS01 ~]# route add -host 192.168.177.100 dev lo:0
[root@RS02 ~]# route add -host 192.168.177.100 dev lo:0
7. 在director上添加并保存规则:
[root@lvs network-scripts]# dnf -y install ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.177.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.177.100:80 -r 192.168.177.148 -g
[root@lvs ~]# ipvsadm -a -t 192.168.177.100:80 -r 192.168.177.149 -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.177.100:80 rr
-> 192.168.177.148:80 Route 1 0 0
-> 192.168.177.149:80 Route 1 0 0
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.177.100:80 -s rr
-a -t 192.168.177.100:80 -r 192.168.177.148:80 -g -w 1
-a -t 192.168.177.100:80 -r 192.168.177.149:80 -g -w 1
8. 验证效果
|