第三十天:负载均衡集群LVS

一、集群和分布式

系统性能扩展方式:
  Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
  Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster
垂直扩展不再提及:
随着计算机性能的增长,其价格会成倍增长
单台计算机的性能是有上限的,不可能无限制地垂直扩展
多核CPU意味着即使是单台计算机也可以并行的。那么,为什么不一开始就并行化技术?

1、集群 Cluster

Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统
Cluster 分为三种类型:
  LB:Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
  HA:High Availiablity,高可用,避免SPOF(single Point Of failure)
    MTBF:Mean Time Between Failure 平均无故障时间,正常时间
    MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
    A = MTBF /(MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%
  SLA:服务等级协议(简称:SLA,全称:service level agreement)。是指在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供
服务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9,N个9 等来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,而运维最主要的目标就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间。
  HPC:High-performance computing,高性能 http://www.top500.org
2、分布式系统
分布式常见应用
  分布式应用-服务按照功能拆分,使用微服务
  分布式静态资源--静态资源放在不同的存储集群上
  分布式数据和存储--使用key-value缓存系统
  分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
分布式存储: Ceph,GlusterFS,FastDFS,MogileFS
分布式计算:hadoop,Spark
3、集群和分布式
集群:同一个业务系统部署在多台服务器上。集群中每一台服务器实现的功能没有差别,数据和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完
整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提
升效率。
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪
一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败
4、LB Cluster 负载均衡集群
(1)按实现方式划分
硬件
  F5 Big-IP https://detail.zol.com.cn/load_leveling/f5/cheap_pic.html?qq-pf-to=pcqq.group
  Citrix Netscaler
  A10
软件
  vs:Linux Virtual Server,阿里云四层 SLB (Server Load Balance)使用
  nginx:支持七层调度,阿里云七层SLB使用 Tengine
  haproxy:支持七层调度
  ats:Apache Traffic Server,yahoo捐助给apache
  perlbal:Perl 编写
  pound
(2)基于工作的协议层次划分
传输层(通用):DNAT 和 DPORT
  LVS:
  nginx:stream
  haproxy:mode tcp
应用层(专用):针对特定协议,常称为 proxy server
  http:nginx, httpd, haproxy(mode http), ...
  fastcgi:nginx, httpd, ...
  mysql:mysql-proxy, mycat...
(3)负载均衡的会话保持
1. session sticky:同一用户调度固定服务器
  Source IP:LVS sh算法(对某一特定服务而言)
  Cookie
2. session replication:每台服务器拥有全部session
  session multicast cluster
3. session server:专门的session服务器
  Redis,Memcached
5、HA 高可用集群实现
keepalived:vrrp协议
Ais:应用接口规范
  heartbeat
  cman+rgmanager(RHCS)
  coresync_pacemaker

二、linux Virtual Server简介

 1、LVS 介绍

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名 正明), 阿里的四层SLB(ServerLoad Balance)是基于LVS+keepalived实现
LVS 是全球最流行的四层负载均衡开源软件,由章文嵩博士(当前阿里云产品技术负责人)在1998年5月创立,可以实现LINUX平台下的负载均衡。
LVS 官网:http://www.linuxvirtualserver.org/
阿里SLB和LVS:
https://yq.aliyun.com/articles/1803
https://github.com/alibaba/LVS

 2、 LVS 工作原理

VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”
grep -i -C 10 ipvs /boot/config-4.18.0-147.el8.x86_64

3、 LVS 集群体系架构

 

4、LVS 集群类型中的术语
VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)
CIP:Client IP
VIP:Virtual server IP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP  

三、LVS工作模式和相关命令

 1、LVS 集群的工作模式

  lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  lvs-dr:操纵封装新的MAC地址
  lvs-tun:在原请求IP报文之外新加一个IP首部
  lvs-fullnat:修改请求报文的源和目标IP,默认内核不支持
(1)LVS 的 NAT 模式
 官方链接:
http://www.linuxvirtualserver.org/VS-NAT.html

 

lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
(2)LVS 的 dr 模式
官方链接 
http://www.linuxvirtualserver.org/VS-DRouting.html

 

LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源
IP/PORT,以及目标IP/PORT均保持不变
DR模式的特点:
  1. Director和各RS都配置有VIP
  2. 确保前端路由器将目标IP为VIP的请求报文发往Director
    在前端网关做静态绑定VIP和Director的MAC地址
    在RS上使用arptables工具 
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
    在RS上修改内核参数以限制arp通告及应答级别 
不主动不负责不拒绝--M49-强福安语录
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
  3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
  4. RS和Director要在同一个物理网络
  5. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  6. 不支持端口映射(端口不能修改)
  7. 无需开启 ip_forward
  8. RS可使用大多数OS系统

 

(3)LVS 的 NAT 模式
 官方链接
http://www.linuxvirtualserver.org/VS-IPTunneling.html

 

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP
是CIP)
TUN模式特点:
  1. RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址
  2. RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
  3. Director转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
  4. 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
  5. 不支持端口映射
  6. RS的OS须支持隧道功能 

 

(4)LVS 的 fullnat模式
 

 通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP --> DIP
VIP --> RIP
fullnat模式特点:
  1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
  2. RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
  3. 请求和响应报文都经由Director
  4. 相对NAT模式,可以更好的实现LVS-RealServer间跨VLAN通讯
  5. 支持端口映射

 

 
(5)LVS 模式总结
 

 lvs-nat与lvs-fullnat:

  请求和响应报文都经由Director
  lvs-nat:RIP的网关要指向DIP
  lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
lvs-dr与lvs-tun:
  请求报文要经由Director,但响应报文由RS直接发往Client
  lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
  lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
总结 
NAT 多目标的DNAT,四层,支持端口修改,请求报文和响应报文都要经过LVS
DR 默认模式,二层,只修改MAC,不支持端口修改,性能好,LVS负载比小,LVS和RS并在同一网段,请求报文经过LVS,响应报文不经过LVS
TUNNEL 三层,添加一个新的IP头,支持LVS和RS并在不在同一网段,不支持端口修改,请求报文经过LVS,响应报文不经过LVS
FULLNAT 多目标的SNAT+DNAT,四层,支持端口修改,请求报文和响应报文都要经过LVS
2、LVS 调度算法
 ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法和动态方法
(1)静态方法
仅根据算法本身进行调度
1、轮询算法RR:roundrobin,轮询,较常用
2、加权轮询算法WRR:Weighted RR,较常用
3、源地址哈希算法SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定 
 4、目标地址哈希算法DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,
如: Web缓存
(2)动态方法
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
1、最少连接算法LC:least connections 适用于长连接应用 
Overhead=activeconns*256+inactiveconns
2、加权最少连接算法WLC:Weighted LC,默认调度方法,较常用
Overhead=(activeconns*256+inactiveconns)/weight
3、最短期望延迟算法SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
Overhead=(activeconns+1)*256/weight
4、最少队列算法NQ:Never Queue,第一轮均匀分配,后续SED
5、基于局部的最少连接算法LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
6、带复制的基于局部的最少连接算法LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等
(3)内核版本 4.15 版本后新增调度算法:FO和OVF
FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法
OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服
务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。,属于动态算法
一个可用的真实服务器需要同时满足以下条件:
  未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
  真实服务器当前的活动连接数量小于其权重值
  其权重值不为零 
3、LVS 相关软件

 (1)程序包:ipvsadm

Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore 
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm

(2) ipvsadm 命令

 ipvsadm核心功能:

集群服务管理:增、删、改
集群服务的RS管理:增、删、改
查看
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-restore
ipvsadm -S [-n] #保存,相当于ipvsadm-save
#管理集群中的RS
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
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
管理集群服务:增、改、删
增、修改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

说明

service-address:
-t|u|f:
 -t: TCP协议的端口,VIP:TCP_PORT 如: -t 10.0.0.100:80
    -u: UDP协议的端口,VIP:UDP_PORT
    -f:firewall MARK,标记,一个数字       
[-s scheduler]:指定集群的调度算法,默认为wlc
删除: 
ipvsadm -D -t|u|f service-address
管理集群上的RS:增、改、删
增、改: 
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
server-address:
     rip[:port] 如省略port,不作端口映射
选项:
lvs类型:
    -g: gateway, dr类型,默认
    -i: ipip, tun类型
    -m: masquerade, nat类型        
-w weight:权重
清空定义的所有内容:
ipvsadm -C
清空计数器:
ipvsadm -Z [-t|u|f service-address]
查看: 
ipvsadm -L|l [options]
--numeric, -n:以数字形式输出地址和端口号
--exact:扩展信息,精确值     
--connection,-c:当前IPVS连接输出
--stats:统计信息
--rate :输出速率信息
ipvs规则:
/proc/net/ip_vs
ipvs连接:
/proc/net/ip_vs_conn
保存:建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service  #会自动保存规则至/etc/sysconfig/ipvsadm
重载:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
systemctl  start ipvsadm.service  #会自动加载/etc/sysconfig/ipvsadm中规则

4、防火墙标记

 FWM:FireWall Mark

MARK target 可用于给特定的报文打标记
--set-mark value
其中:value 可为0xffff格式,表示十六进制数字
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务
进行调度
实现方法:
在Director主机打标记:
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports
$port1,$port2,… -j MARK --set-mark NUMBER
在Director主机基于标记定义集群服务:
ipvsadm -A -f NUMBER [options]

5、LVS 持久连接

session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑定,lvs sh算法无法实现

持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS 
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
持久连接实现方式:
  每端口持久(PPC):每个端口定义为一个集群服务,每集群服务单独调度
  每防火墙标记持久(PFWMC):基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的 port Affinity
  每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式 

四、LVS实战案例

 1、 LVS-NAT模式案例 

环境:
共四台主机
一台: internet client:192.168.10.6/24   GW:无 仅主机
一台:lvs  
eth1 仅主机 192.168.10.100/16
eth0 NAT 10.0.0.8/24
两台RS:
RS1: 10.0.0.7/24 GW:10.0.0.8 NAT
RS2: 10.0.0.17/24 GW:10.0.0.8 NAT
配置过程: 
[root@lvs-server ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

[root@lvs-server ~]#ipvsadm -A -t 192.168.10.100:80 -s wrr 
[root@lvs-server ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.7:80 -m
[root@lvs-server ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.17:80 -m

#保存规则
[root@lvs-server ~]#ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs-server ~]#systemctl enable --now ipvsadm.service
#问题:LVS 打开监听VIP相关的端口吗?

2、LVS-DR模式单网段案例

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各RS使用arptables
(3) 在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
配置要点
1. Director 服务器采用双IP桥接网络,一个是VIP,一个DIP
2. Web服务器采用和DIP相同的网段和Director连接
3. 每个Web服务器配置VIP
4. 每个web服务器可以出外网 

 (1)环境

环境:五台主机
一台:客户端 eth0:仅主机 192.168.10.6/24 GW:192.168.10.200
一台:ROUTER
eth0 :NAT  10.0.0.200/24
eth1: 仅主机 192.168.10.200/24
启用 IP_FORWARD
一台:LVS
eth0:NAT:DIP:10.0.0.8/24 GW:10.0.0.200
两台RS:
RS1:eth0:NAT:10.0.0.7/24   GW:10.0.0.200
RS2:eth0:NAT:10.0.0.17/24 GW:10.0.0.200

(2)LVS的网络配置

#所有主机禁用iptables和SELinux

#路由器的网络配置
[root@router ~]#echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf 
[root@router ~]#sysctl -p

#RS1的网络配置
[root@rs1 ~]#hostname 
rs1.wang.org
[root@rs1 ~]#hostname -I
10.0.0.7
[root@rs1 ~]#yum -y install httpd
[root@rs1 ~]#systemctl enable --now httpd 
[root@rs1 ~]#hostname -I > /var/www/html/index.html

#RS2 的网络配置
[root@rs2 ~]#yum -y install httpd
[root@rs2 ~]#systemctl enable --now httpd
[root@rs2 ~]#hostname -I > /var/www/html/index.html

#LVS的网络配置
[root@lvs ~]#hostname 
lvs.wang.org
[root@lvs ~]#hostname -I
10.0.0.8

#如果LVS没有配置网关(网关随意,只有要即可),也可以通过修改内核关闭路径反向校验实现
[root@lvs ~]#echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
[root@lvs ~]#echo "0" > /proc/sys/net/ipv4/conf/eth0/rp_filter

(3)后端RS的IPVS配置

#RS1的IPVS配置
[root@rs1 ~]#echo 1 >   /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]#echo 2 >   /proc/sys/net/ipv4/conf/all/arp_announce 
[root@rs1 ~]#echo 1 >   /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]#echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@rs1 ~]#ifconfig lo:1 10.0.0.100/32

#RS2的IPVS配置
[root@rs2 ~]#echo 1 >   /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]#echo 1 >   /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]#echo 2 >   /proc/sys/net/ipv4/conf/all/arp_announce 
[root@rs2 ~]#echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]#ifconfig lo:1 10.0.0.100/32

(4) LVS主机的配置

#在LVS上添加VIP
[root@lvs ~]#ifconfig lo:1 10.0.0.100/32

#实现LVS 规则
[root@lvs ~]#dnf -y install ipvsadm
[root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s rr
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7:80 -g 
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17:80 -g 
[root@lvs ~]#ipvsadm -Ln

(5)测试访问

[root@internet ~]#curl 10.0.0.100
10.0.0.17 
[root@internet ~]#curl 10.0.0.100
10.0.0.7 
[root@rs1 ~]#tail -f /var/log/httpd/access_log -n0

(6)思考

 LVS的eth0的网关可否不配置?如果随便配置,发现什么问题?如果不配置,怎么解决?
#默认值
[root@ubuntu2204 ~]#cat /proc/sys/net/ipv4/conf/all/rp_filter
2
[root@centos8 ~]#cat /proc/sys/net/ipv4/conf/all/rp_filter
1
#Ubuntu22.04修改内核参数为0
[root@ubuntu2204 ~]#echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
[root@ubuntu2204 ~]#echo "0" > /proc/sys/net/ipv4/conf/eth0/rp_filter
#Rocky8修改内核参数为0
[root@lvs ~]#echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
#说明:参数rp_filter用来控制系统是否开启对数据包源地址的校验。
#0标示不开启地址校验
#1表开启严格的反向路径校验。对每一个收到的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包;
#2表示开启松散的反向路径校验,对每个收到的数据包,校验其源地址是否可以到达,即反向路径是否可以ping通,如反向路径不通,则直接丢弃该数据包。
LVS的VIP可以配置到lo网卡,但必须使用32位的netmask,为什么? 
范例

 

环境:五台主机
一台:客户端 172.20.200.6/16 GW:172.20.200.200
一台:ROUTER
eth0 :NAT 10.0.0.200/24 VIP
eth1: 桥接 172.20.200.200/16
启用 IP_FORWARD
一台:LVS
eth0: 10.0.0.8/24 GW:10.0.0.200
两台RS:
RS1:10.0.0.7/24 GW:10.0.0.200
RS2:10.0.0.17/24 GW:10.0.0.200

3、LVS-DR模式多网段案例

单网段的DR模式容易暴露后端RS服务器地址信息,可以使用跨网面的DR模型,实现更高的安全性

 范例: 

#internet主机的网络配置和4.2一样
[root@internet ~]#hostname -I
192.168.10.6 
#router的网络配置在4.2基础上添加172.16.0.200/24的地址
[root@router ~]#ip addr add 172.16.0.200/24 dev eth0

#LVS主机的网络配置和4.2一样
[root@lvs ~]#hostname -I
10.0.0.8

#RS主机的网络配置和4.2一样
[root@rs2 ~]#hostname -I
10.0.0.17

#在LVS主机运行的脚本
#注意:VIP如果配置在LO网卡上,必须使用32bit子网掩码,如果VIP绑定在eth0上,可以是其它netmask
[root@lvs ~]#cat lvs_dr_vs.sh
[root@lvs ~]#bash lvs_dr_vs.sh start
The VS Server is Ready!

#在RS后端服务器运行的脚本
[root@rs1 ~]#cat lvs_dr_rs.sh
[root@rs1 ~]#bash lvs_dr_rs.sh start
The RS Server is Ready!
#在RS后端服务器运行的脚本和RS1是一样的
[root@rs2 ~]#bash lvs_dr_rs.sh start
The RS Server is Ready!

 

4、LVS-TUNNEL隧道模式案例

 (1)LVS服务器配置

#开启tunnel网卡并配置VIP
[root@centos8 ~]#ifconfig tunl0 10.0.0.100 netmask 255.255.255.255 up
#或者下面方法,注意设备名必须为tunl0
[root@centos8 ~]#ip addr add 10.0.0.100/32 dev tunl0
[root@centos8 ~]#ip link set up tunl0
#自动加载ipip模块
[root@centos8 ~]#lsmod |grep ipip
[root@centos8 ~]#yum -y install ipvsadm
[root@centos8 ~]#ipvsadm -A -t 10.0.0.100:80 -s rr
[root@centos8 ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7 -i
[root@centos8 ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17 -i
[root@centos8 ~]#ipvsadm -Ln 

(2)RS服务器配置

#RS服务器配置,RS1和RS2配置相同
[root@rs1 ~]#hostname 
rs1.wang.org
[root@rs1 ~]#hostname -I
10.0.0.7

#开启tunnel网卡并配置VIP
[root@rs1 ~]#ifconfig tunl0 10.0.0.100 netmask 255.255.255.255 up

#修改内核参数  
[root@rs1 ~]#echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore        
[root@rs1 ~]#echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
[root@rs1 ~]#echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]#echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
#以下参数用来控制系统是否开启对数据包源地址的校验。0表示不开启地址校验;1表示开启严格的反向路径
校验。对每一个进行的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该
数据包;2标示开启松散的反向路径校验,对每个进行的数据包,校验其源地址是否可以到达,即反向路径是否
可以ping通,如反向路径不通,则直接丢弃该数据包。
#默认值
[root@ubuntu22.04 ~]#cat /proc/sys/net/ipv4/conf/all/rp_filter
2

[root@centos8 ~]#cat /proc/sys/net/ipv4/conf/all/rp_filter
1
#必须修改内核参数为0
[root@rs1 ~]#echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
#Rocky可选项,CentOS7必须加
[root@rs1 ~]#echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
[root@rs1 ~]#yum -y install httpd
[root@rs1 ~]#systemctl enable --now httpd
[root@rs1 ~]#hostname > /var/www/html/index.html

(3)测试

[root@internet ~]#while :;do curl 10.0.0.100;sleep 0.3;done

五、LVS高可用性实现

 LVS 不可用时:

Director不可用,整个系统将不可用;SPoF Single Point of Failure
解决方案:高可用,keepalived、heartbeat/corosync
RS 不可用时:
某RS不可用时,Director依然会调度请求至此RS
解决方案: 由Director对各RS健康状态进行检查,失败时禁用,成功时启用
常用解决方案:
keepalived
heartbeat/corosync
ldirectord
检测方式:
网络层检测,icmp
传输层检测,端口探测
应用层检测,请求某关键资源
RS全不用时:backup server, sorry server

 六、常见面试题

 Linux 集群有哪些分类

正向代理和反向代理区别
四层代理和七层代现的区别
LVS的工作模式有哪些,有什么特点
LVS的调度算法
LVS和Nginx,Haproxy 的区别
 
posted @ 2024-03-03 15:31  djyhello  阅读(29)  评论(0编辑  收藏  举报