Linux Virtual Server(LVS)——《一》

1 集群和分布式

系统性能扩展方式:
Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务,成本高。
Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster

垂直扩展不再提及:
随着计算机性能的增长,其价格会成倍增长
单台计算机的性能是有上限的,不可能无限制地垂直扩展
多核CPU意味着即使是单台计算机也可以并行的。

1.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%
HPC:High-performance computing,高性能 www.top500.org

1.2 分布式系统

分布式存储: Ceph,GlusterFS,FastDFS,MogileFS
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源–静态资源放在不同的存储集群上
分布式数据和存储–使用key-value缓存系统
分布式计算–对特殊业务使用分布式计算,比如Hadoop集群

1.3 集群和分布式

集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代
码都是一样的

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每
一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完
整的业务。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提
升效率。
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成
同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪
一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同
的业务,如果一个节点垮了,那这个业务可能就会失败。

1.4 集群设计原则

可扩展性—集群的横向扩展能力。小型机横向扩展小,面临淘汰
可用性—无故障时间(SLA)
性能—访问响应时间
容量—单位时间内的最大并发吞吐量(C10K 并发问题) 。LVS内核级,并发好。

1.5 集群设计实现

1.5.1 基础设施层面
提升硬件资源性能—从入口防火墙到后端web server均使用更高性能的硬件资源
多域名—DNS 轮询A记录解析。指向不同IP 访问入口增多
多入口—将A记录解析到多个公网IP入口
多机房—同城+异地容灾
CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS
就近分配地址,提高效率

1.5.2 业务层面
分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
分割:基于功能分割大业务为小服务
分布式:对于特殊场景的业务,使用分布式计算

1.6 LB Cluster 负载均衡集群

1.6.1 按实现方式划分
硬件(大公司)
F5 Big-IP
Citrix Netscaler
A10 A10

软件(小公司)
lvs:Linux Virtual Server,阿里四层SLB (Server Load Balance)使用
下四层功能:物理层 数据链路层
nginx:支持七层调度,阿里七层SLB使用Tengine
haproxy:支持七层调度
ats:Apache Traffic Server,yahoo捐助给apache
perlbal:Perl 编写
pound

1.6.2 基于工作的协议层次划分
传输层(通用):DNAT和DPORT
LVS:Linux Virtual Server
nginx:stream
haproxy:mode tcp

应用层(专用):针对特定协议,常称为 proxy server
http:nginx, httpd, haproxy(mode http), …
fastcgi:nginx, httpd, …
mysql:mysql-proxy, …

1.6.3 负载均衡的会话保持

  1. session sticky:同一用户调度固定服务器
    Source IP:LVS sh算法(对某一特定服务而言)
    Cookie
  2. session replication:每台服务器拥有全部session
    session multicast cluster (内存消耗大)
  3. session server:专门的session服务器
    Memcached,Redis (只放session,共享)也存在单点失败,即也要做集群 哨兵机制

1.7 HA 高可用集群实现

keepalived:vrrp协议
Ais:应用接口规范
heartbeat
cman+rgmanager(RHCS)
coresync_pacemaker

2 Linux Virtual Server简介

2.1 LVS介绍

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名 正明), 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现。
LVS 官网:http://www.linuxvirtualserver.org/
LVS 相关术语
VS: Virtual Server,负责调度
RS: Real Server,负责真正提供服务

2.2 LVS工作原理

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

范例:查看内核支持LVS

[root@centos8 ~]#grep -i -C 10 ipvs /boot/config-4.18.0-80.el8.x86_64

2.3 LVS集群体系架构

在这里插入图片描述

2.4 LVS 功能及组织架构

负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性。

2.4.1 应用于高访问量的业务
如果您的应用访问量很高,可以通过配置监听规则将流量分发到不同的云服务器 ECS(ElasticCompute Service 弹性计算服务)实例上。此外,可以使用会话保持功能将同一客户端的请求转发到同一台后端ECS

2.4.2 扩展应用程序
可以根据业务发展的需要,随时添加和移除ECS实例来扩展应用系统的服务能力,适用于各种Web服务器和App服务器。

2.4.3 消除单点故障
可以在负载均衡实例下添加多台ECS实例。当其中一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的ECS实例,将请求分发给正常运行的ECS实例,保证应用系统仍能正常工作,LVS自身做不到,需要配合keepalive软件。

2.4.4 同城容灾 (多可用区容灾)
为了提供更加稳定可靠的负载均衡服务,阿里云负载均衡已在各地域部署了多可用区以实现同地域容灾。当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内(如:大约30s中断)切换到另外一个备可用区恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。

使用负载均衡时,您可以将负载均衡实例部署在支持多可用区的地域以实现同城容灾。此外,建议您结合自身的应用需要,综合考虑后端服务器的部署。如果您的每个可用区均至少添加了一台ECS实例,那么此种部署模式下的负载均衡服务的效率是最高的。

如下图所示,在负载均衡实例下绑定不同可用区的ECS实例。正常情况下,用户访问流量将同时转至发主、备可用区内的ECS实例;当可用区A发生故障时,用户访问流量将只转发至备可用区内的ECS实例。此种部署既可以避免因为单个可用区的故障而导致对外服务的不可用,也可以通过不同产品间可用区的选择来降低延迟。
在这里插入图片描述
如果您采取如下图所示的部署方案,即在负载均衡实例的主可用区下绑定多台ECS实例,而在备可用区
没有任何ECS实例。当主可用区发生故障时会造成业务中断,因为备可用区没有ECS实例来接收请求。
这样的部署方式很明显是以牺牲高可用性为代价来获取低延时。
在这里插入图片描述
2.4.5 跨地域容灾
您可以在不同地域下部署负载均衡实例,并分别挂载相应地域内不同可用区的ECS。上层利用云解析做
智能DNS,将域名解析到不同地域的负载均衡实例服务地址下,可实现全局负载均衡。当某个地域出现
不可用时,暂停对应解析即可实现所有用户访问不受影响。
在这里插入图片描述

2.5 LVS应用场景

2.5.1 音视频大流量场景
在这里插入图片描述
对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全和高可靠的云存储服务

音视频海量流量自动分发
音视频应用中由于用户与主播之间需要实时大量的互动,因此,用户的流量非常大,而直播业务的波峰波谷效应明显,这对整个系统的弹性、稳定性和可用性带来了巨大的挑战

提高横向扩展能力
添加或删减负载均衡后端的服务器实时生效,可根据业务流量大小实时增减

抵御海量流量
业务发展快,访问流量巨大,负载均衡可对多台云服务器进行流量分发服务

提升应用可用性
负载均衡提供后端服务器的健康检查,实时屏蔽异常服务器,提升系统可用性

2.5.2 网络游戏动静分离场景
在这里插入图片描述

动静请求分离,快速稳定交付
游戏业务有很多图片等静态资源需要加载,通过CDN实现全球用户访问静态资源的加速;当用户在游戏
中有互动时,产生的访问流量非常大,此时为了保证互动实时性,需要使用负载均衡进行流量分发

动态请求流量分发
动态请求量大,采用多台云服务器计算处理,并利用负载均衡服务随时进行流量分发

静态请求快速加载
静态内容选择对象存储,接入CDN服务,进一步优化内容分发链路,让内容即刻加载

2.5.3 多层次容灾架构场景
在这里插入图片描述
跨地域跨可用区的容灾方案
用户业务遍布各地域,使用云解析DNS将不同地域用户智能解析访问到相应的业务系统内,使用负载均
衡进行海量的访问流量分发,还可构建地域级、可用区级的多层容灾架构

智能解析
智能判断提供最佳的访问解析地址,使访问用户获得最快捷、最流畅的体验

流量分发
业务发展快,访问流量巨大,负载均衡可对多台云服务器进行流量分发服务

多层次容灾
云解析提供跨地域的高可用,负载均衡可实现可用区级的高可用

2.5.4 海量访问流量分发场景
在这里插入图片描述

2.6 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 serve IP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real server IP
访问流程:CIP <–> VIP == DIP <–> RIP

3 LVS 工作模式和相关命令

3.1 LVS集群的工作模式

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址。MAC头的修改
lvs-tun:在原请求IP报文之外新加一个IP首部。
lvs-fullnat:修改请求报文的源和目标IP

3.1.1 LVS的NAT模式
在这里插入图片描述
lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
在这里插入图片描述
在这里插入图片描述
1.1.2 LVS的DR模式
在这里插入图片描述
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通告及应答级别

/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
  1. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向
    DIP,以确保响应报文不会经由Director
  2. RS和Director要在同一个物理网络
  3. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  4. 不支持端口映射(端口不能修败)
  5. RS可使用大多数OS系统
    在这里插入图片描述
    3.1.3 LVS的TUN模式
    在这里插入图片描述
    转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首
    部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目
    标IP是CIP)
    在这里插入图片描述
    TUN模式特点:
  6. DIP, VIP, RIP可以是公网地址
  7. RS的网关一般不能指向DIP
  8. 请求报文要经由Director,但响应不经由Director
  9. 不支持端口映射
  10. RS的OS须支持隧道功能
    3.1.4 LVS的FULLNAT模式
    通过同时修改请求报文的源IP地址和目标IP地址进行转发
    CIP --> DIP
    VIP --> RIP
    fullnat模式特点:
  11. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向
    DIP
  12. RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
  13. 请求和响应报文都经由Director
  14. 支持端口映射
    注意:此类型kernel默认不支持

3.1.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头实现转发,支持远距离通信

3.2 LVS调试算法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法和动态方法

3.2.1 静态方法
仅根据算法本身进行调度
1、RR:roundrobin,轮询 不考虑机器的性能好坏,轮询调度
2、WRR:Weighted RR,加权轮询 权重越高,优先级高,调度更多资源给它 优先级高
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发
往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的
请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

3.2.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算法,使用场景:根据负载状态实现正向代理

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制
到负载轻的RS

3.2.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.3LVS 相关软件

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

3.3.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 -S [-n] #保存
#管理集群中的RS
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]

管理集群服务:增、改、删
增、修改:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

删除:

ipvsadm -D -t|u|f service-address

service-address:
-t|u|f:
-t: TCP协议的端口,VIP:TCP_PORT
-u: UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc

管理集群上的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
[root@centos8mini ~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP  0A000065:0CEA rr  
TCP  0A000064:0050 rr  
  -> C0A82064:0050      Route   1      0          0         
[root@centos8mini ~]#

ipvs连接:

/proc/net/ip_vs_conn

[root@centos8mini ~]#cat /proc/net/ip_vs_conn
Pro FromIP   FPrt ToIP     TPrt DestIP   DPrt State       Expires PEName PEData

保存:建议保存至/etc/sysconfig/ipvsadm

[root@centos8mini ~]#cat /usr/lib/systemd/system/ipvsadm.service 
[Unit]
Description=Initialise the Linux Virtual Server
After=syslog.target network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
ExecStop=/sbin/ipvsadm -C
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

ipvsadm-save > /PATH/TO/IPVSADM_FILE  #重定向
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service

重载:

ipvsadm-restore < /PATH/FROM/IPVSADM_FILE  #重新载入规则
systemctl restart ipvsadm.service
ipvsadm-save -n > /etc/sysconfig/ipvsadm    #默认是重定向到这个文件中
[root@centos8mini ~]#systemctl enable ipvsadm.service   #开机自动重载
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.

ipvsadm配置文件:

[root@centos8mini ~]#cat /etc/sysconfig/ipvsadm-config 
# 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).
IPVS_SAVE_ON_STOP="no"

# 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="no"

# 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"

3.4 防火墙标记

FWM:FireWall Mark
MARK target 可用于给特定的报文打标记
–set-mark value
其中:value 可为0xffff格式,表示十六进制数字
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务
进行调度
实现方法:
在Director主机打标记:
mangle :可以修改报文标签

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]

范例:

[root@lvs ~]#ipvsadm -A -f 10
[root@lvs ~]#ipvsadm -a -f 10 -r 192.168.39.17 -g
[root@lvs ~]#ipvsadm -a -f 10 -r 192.168.39.7 -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
FWM 10 wlc        #有标记的标识
-> 192.168.39.7:0 Route			1		 0 			0       #端口不看了看标签 所以为0 
-> 192.168.39.17:0 Route 		1		 0 			0

3.5 LVS 持久连接

短期之内发起请求都调度到同一台服务器。
session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑定,lvs sh算法无法实现
持久连接( lvs persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够
实现将来自同一个地址的请求始终发往同一个RS

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]  #-p 持久连接的时间

持久连接实现方式:
每端口持久(PPC):每个端口定义为一个集群服务,每集群服务单独调度
每防火墙标记持久(PFWMC):基于防火墙标记定义集群服务;可实现将多个端口上的应用统一
调度,即所谓的port Affinity
每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请
求都调度至后端主机,必须定义为持久模式

范例:

[root@lvs ~]#ipvsadm -E -f 10 -p     # -p默认 360s
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 10 wlc persistent 360       #persistent 360 持久连接标识
-> 192.168.39.7:0 Route 1 0 15
-> 192.168.39.17:0 Route 1 0 7
[root@lvs ~]#ipvsadm -E -f 10 -p 3600
[root@lvs ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 10 wlc persistent 3600
-> 192.168.39.7:0 Route        1 		0	 	79
-> 192.168.39.17:0 Route       1	    0 		7

4 LVS实战案例

4.1 LVS-NAT模式案例

在这里插入图片描述

  1. Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相
  2. Web服务器采用仅主机网卡与director相连
  3. Web服务器网关指向10.0.0.200
  4. 后端web服务器不需要连接外网

范例:
环境:
四台主机
一台: internet client :172.20.0.123/16
一台: lvs :
eth1 桥接 172.20.200.200/16
eth0 NAT 192.168.39.200/24
两台:
RS1 : 192.168.39.7/24 GW: 192.168.39.200
RS2: 192.168.39.17/24 GW: 192.168.39.200

配置过程

#LVS
[root@lvs ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs ~]#ipvsadm -A -t 172.20.200.200:80 -s rr
[root@lvs ~]#ipvsadm -a -t 172.20.200.200:80 -r 192.168.39.7 -m
[root@lvs ~]#ipvsadm -a -t 172.20.200.200:80 -r 192.168.39.17 -m

4.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服务器可以出外网

范例:
环境:五台主机
一台:客户端 172.20.0.123/16 GW:172.20.200.200
一台:ROUTER
eth0 :NAT 192.168.0.200/24 VIP
eth1: 桥接 172.20.200.200/16
启用 IP_FORWARD
一台:LVS
eth0: 192.168.0.19/24 GW:192.168.0.200
两台RS:
RS1:192.168.0.7/24 GW:192.168.0.200
RS2:192.168.0.17/24 GW:192.168.0.200

配置过程

#在LVS服务器上实现
[root@centos8 ~]#ifconfig lo:1 192.168.0.100/32
[root@centos8 ~]#ipvsadm -A -t 192.168.0.100:80 -s rr
[root@centos8 ~]#ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.7
[root@centos8 ~]#ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.17
[root@centos8 ~]#ipvsadm -Ln
#在后端RS服务器上实现
[root@RS1 ~]#ifconfig lo:1 192.168.0.100/32
[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

4.3 LVS-DR多网段模式案例

在这里插入图片描述
RS 的配置脚本

#!/bin/bash
vip=10.0.0.100
mask='255.255.255.255'
dev=lo:1
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
ifconfig $dev $vip netmask $You can't use 'macro parameter character #' in
math modemask #broadcast $vip up
#route add -host $vip dev $dev
;;
stop)
ifconfig $dev down
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

VS的配置脚本

#!/bin/bash
vip='10.0.0.100'
iface='lo:1'
mask='255.255.255.255'
port='80'
rs1='192.168.8.101'
rs2='192.168.8.102'
scheduler='wrr'
type='-g'
case $1 in
start)
ifconfig $iface $vip netmask $mask #broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
;;
stop)
ipvsadm -C
ifconfig $iface down
;;
*)
echo "Usage $(basename $0) start|stop“
exit 1
esac

5 LVS 高可用性实现

LVS不可用时:
Director不可用,整个系统将不可用;SPoF Single Point of Failure
解决方案:高可用,keepalived heartbeat/corosync

RS不可用时:
某RS不可用时,Director依然会调度请求至此RS
解决方案: 由Director对各RS健康状态进行检查,失败时禁用,成功时启用

常用解决方案:
keepalived 浮动的ip
heartbeat/corosync
ldirectord

检测方式:
网络层检测,icmp
(b) 传输层检测,端口探测 不一定准确
© 应用层检测,请求某关键资源
RS全不用时:backup server, sorry server

可以编辑一个探测脚本,死循环访问后端服务器,如果没有响应则触发命令使其断开或者下线。
权重变成0之后,表示不进行LVS调度。表示下线,比如灰度发布

5.1 ldirectord软件

ldirectord:监控和控制LVS守护进程,可管理LVS规则
包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
下载:http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/x86_64/

相关文件:
/etc/ha.d/ldirectord.cf #主配置文件
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf # 配置模版
/usr/lib/systemd/system/ldirectord.service # 服务
/usr/sbin/ldirectord #主程序,Perl实现
/var/log/ldirectord.log #日志
/var/run/ldirectord.ldirectord.pid #pid文件

5.2 ldirectord配置文件示例

范例:DR模型的HTTP

[root@LVS ~]#yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm
[root@LVS ~]#rpm -ql ldirectord
/etc/ha.d      #主配置文件
/etc/ha.d/resource.d
/etc/ha.d/resource.d/ldirectord
/etc/logrotate.d/ldirectord
/usr/lib/ocf/resource.d/heartbeat/ldirectord
/usr/lib/systemd/system/ldirectord.service
/usr/sbin/ldirectord
/usr/share/doc/ldirectord-3.9.6
/usr/share/doc/ldirectord-3.9.6/COPYING
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf  #模板文件
/usr/share/man/man8/ldirectord.8.gz
[root@LVS ~]#
[root@LVS ~]#cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
[root@LVS ~]#vim /etc/ha.d/ldirectord.cf  #修改配置文件即可

[root@centos7 ~]#vim /etc/ha.d/ldirectord.cf
checktimeout=3          #超时时长
checkinterval=1         #多久时间探测一次
autoreload=yes          #自动生效
logfile="/var/log/ldirectord.log"         #日子启用
quiescent=no  #当RS down时 yes将修改权重为0,此配置有bug ,no为从调度列表中删除RS
virtual=10.0.0.100:80
real=192.168.39.17 gate 1      #gate 表示DR模式,1 表示weight
real=192.168.39.18 gate 2
fallback=127.0.0.1:80 gate    #sorry服务器
service=http
scheduler=wrr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
[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 10.0.0.100:80 wrr
-> 192.168.39.17:80 Route 1 0 31
-> 192.168.39.18:80 Route 2 0 62

范例:DR模型的FWM(标签)

[root@centos7 ~]# /etc/ha.d/ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
logfile=“/var/log/ldirectord.log“ #日志文件
quiescent=no      #当RS down时 yes将修改权重为0,此配置有bug ,no为从调度列表中删除RS
virtual=5     #指定VS的FWM 或 IP:PORT   标签
real=172.16.0.7:80 gate 2 #DR模型,权重为 2
real=172.16.0.8:80 gate 1
fallback=127.0.0.1:80 gate #sorry server
service=http
scheduler=wrr
#protocol=tcp   #如果FWM模式,此行必须注释掉  标签不用指定协议
checktype=negotiate
checkport=80
request="index.html"
receive=“Test Ldirectord"
[root@LVS ~]#systemctl restart ldirectord
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值