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

2.3 LVS集群体系架构

2.5 LVS应用场景

2.5.1 音视频大流量场景

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

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

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

2.5.3 多层次容灾架构场景

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模式

  • RS的 关一般不能指向DIP
  • 请求 文要经由Director,但响应不经由Director
  • 不支持端口映射
  • RS的OS须支持隧道功能
    3.1.4 LVS的FULLNAT模式
    通过同时修改请求 文的源IP地址和目标IP地址进行转发
    CIP –> DIP
    VIP –> RIP
    fullnat模式特点:
  • VIP是公 地址,RIP和DIP是私 地址,且通常不在同一IP 络;因此,RIP的 关一般不会指向
    DIP
  • RS收到的请求 文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
  • 请求和响应 文都经由Director
  • 支持端口映射
    注意:此类型kernel默认不支持
  • 3.1.5 LVS工作模式总结和比较

    Linux Virtual Server(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 工具用法:

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

    删除:

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

    管理集群上的RS:增、改、删
    增、改:

    删:

    server-address:
    rip[:port] 如省略port,不作端口映射
    选项:
    lvs类型:
    -g: gateway, dr类型,默认
    -i: ipip, tun类型
    -m: masquerade, nat类型
    -w weight:权重

    清空定义的所有内容:

    清空计数器:

    查看:

    –numeric, -n:以数字形式输出地址和端口
    –exact:扩展信息,精确值
    –connection,-c:当前IPVS连接输出
    –stats:统计信息
    –rate :输出速率信息

    ipvs规则:

    ipvs连接:

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

    重载:

    ipvsadm配置文件:

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年11月23日
    下一篇 2019年11月23日

    相关推荐