lvs-负载均衡集群

## 集群

  • 概述

    集群(cluster),也称为群集,表示一群的意思,在服务器领域表示大量的服务器的集合体。将各个主机组成集群,形成一个系统协调工作,其可扩展性、可用性、容量、性能都会有大规模的提升。

  • 企业级集群分类:

    • 负载均衡集群(LB,Load Balance)
    • 高可用集群(HA,High Availability)
    • 高性能集群(HP,High Performance)
  • 负载均衡集群(LB)

    • 在企业网站架构中,以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体能力。LB负载分配依赖于主节点的算法,将来自客户机的访问请求分担给多个服务器节点
    • 负载均衡集群实现方式
      • 硬件方式:F5、A10、Citrix、NetScaler、array、梭子鱼、绿盟
      • 软件方式:LVS、haproxy、nginx
    • 负载均衡集群工作的层次划分
      • 传输层:LVS,haproxy
      • 应用层:haproxy、nginx、ats
  • 高可用集群(HA)

    • 以提高应用系统的可靠性、尽可能减少终端宕机时间为目标,确保服务的连续性,达到高可用(HA)的容错效果,例如“故障切换”“双击热备”“多机热备”等都属于高可用群集技术。HA工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从才切换为主节点
  • 高性能集群(HP)

    • 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC,High performance computing)能力。如“云计算”“网格计算”。高性能群集依赖于“分布式运算”、并行计算:通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现大型、大型、超级计算机才具备的计算能力

LVS负载均衡集群

  • LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目(LVS官方站点),已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如下图所示,互联网用户从外部访问公司的外部负载均衡服务器,用户的Web请求会发送给LVS调度器,调度器根据预设的算法决定将该请求发送给后端的某台Web服务器。根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到用户

  • LVS(Linux Virtual Server)工作在传输层,基于TCP和UDP进行调度工作。

  • 工作方式:根据目标IP和端口转发到后端主机集群(服务器池)中某一台主机(如何转发请求,基于某种特定的算法)

  • LVS基于netfilter进行设计的。但是由于LVS有自己的会话表,故这可能会与iptables中会话表产生冲突,导致了二者无法完美并行。这样的后果就是会丧失部分安全功能

  • LVS由ipvsadm和ipvs两个部分组成,ipvsadm是用户命令工具,用于管理LVS集群服务;ipvs是LVS的内核功能模块,ipvs工作于netfilter的INPUT链

  • LVS工作模式分为

    • NAT模式

    • TUN模式

    • DR模式

  • 调度算法(lvs scheduler)

    • 负载均衡集群基于调度算法挑选后端RS进行调度

    • 静态方法:根据算法本身进行调度

      RR(轮询)、WRR(加权轮询)、SH(源地址hash,实现session保持)、DH(目的地址hash)

    • 动态方法:根据算法以及各个RS的当前负载状态进行调度

      LC(最小连接数)、WLC(加权最小连接)、SED(最短期望延迟)、NQ(永不排队)、LBLC、LBLCR

    • 常用调度算法

      • rr:轮询 rr 算法就是将外部请求顺序轮流分配到集群中的node 上,但不考虑每台node 的负载情况

      • wrr:加权轮询 wrr 算法在rr 算法的基础上会考察每台node的负载情况,并尝试让负较轻的node 承担更多请求

      • lc:最少连接算法可以让LVS 尝试把新的请求交给当前连接数最少的node ,直到此node 连接数不再属于最少为止

      • wlc:加权最少连接 wlc 算法也有权重的干预。LVS 会根据每台node的权重并综合连接数控制转发行为

      • lblc:局部最少连接算法会加上针对源请求IP地址的路由估算,并尝试把请求发送到与源请求IP路由最近的node 上。此种方法一般用于远程或者是大规模的集群组。

      • lblcr:带有复制的局部最少连接算法 lblcr 算法是在lblc 算法的基础上增加了一个node 列表,先依据lblc 算法计算出与源请求IP地址最近的一组node ,然后再决定把请求发送到最近一组中的最近的一台node 。若此node没有超载则将请求转发给这台node, 如果超载则依据”最少连接”原则找到最少连接的node并将此node 加入集群组中。并将请求转给此node

      • dh:目标地址散列算法,相当于随机

      • sh:原地址散列算法,相当于随机

  • 名词解释

    • DS:Director Server,目标服务器,即负载均衡器
    • RS:Real Server,真实服务器,即后端服务器
    • VIP:virtual IP是外部直接面向用户请求,作为用户请求的目标IP地址。
    • DIP:Director Server IP.主要用于和内部主机通信的IP地址。
    • RIP:Real Server IP 真实服务器ip
    • CIP:Client IP,客户端IP

    注:负载均衡器使用双网卡,一块使用外网ip的VIP,一块是与内部真实服务器通信的DIP

LVS三种工作模式

NAT

  • 主要是修改目标IP地址为挑选出新的RS的IP地址。即请求进入负载均衡器时做DNAT,响应出负载均衡器时做SNAT。
    image-20191114211925536

    1.当用户请求到达Director Server,此时请求的数据报文会先到达内核的PREROUTING链,此时报文的源IP是CIP,目标IP是VIP。
    2.PREROUTING链检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    3.IPVS内核模块比对数据包请求的服务是否为集群服务,如果是,则修改数据包的目标IP为后端服务器的IP,然后将数据包发至POSTROUTING链,做DNAT转换。此时报文的源IP是CIP,目标IP是RIP
    4.POSTROUTING链通过选路,将数据包发送到Real Server

    5.Real Server比对发现目标IP是自己的IP,开始建立响应报文发回给Director Server,此时报文的源IP是RIP,目标IP是CIP

    6.Director Server在响应客户端之前,此时会将源IP地址修改为自己的IP地址,然后响应给客户端,做SNAT转换;此时报文的源IP是VIP,目标IP是CIP

  • 特性:
    1.RS必须使用私有地址,将RS的网关指向DIP
    2.DIP和RIP必须是同一网段内
    3.请求和响应报文都要经过Director Server,高负载场景中,Director Server会出现性能瓶颈
    4.支持端口映射
    5.RS可以使用任意操作系统

DR模型

  • 将请求报文的目标MAC地址设定为天选出来的RS的MAC地址。即做MAC地址转换。

    image-20191114212030495

    1.当用户请求到达Director Server,此时请求的数据报文huixiandao内核空间的PREROUTING链,此时报文的IP是CIP,目标IP是VIP
    2.PREROUTING链检查发现数据包的目标IP是本机,将数据包送至INPUT链,
    3.IPVS内核模块比对数据包请求的服务是否为集群服务,如果是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改为RIP的MAC地址,然后将数据包发至POETROUTING链中,此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

    4.由于DS和RS实在同一网络中,所以两者之间的通信时通过二层协议来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server

      5.RS发现请求报文的MAC地址是自己的MAC地址,就接受此报文,处理完成以后,将响应报文通过IO接口传送给eth0网卡,然后向外发出,不经过负载均衡器。此时源IP地址为VIP,目标IP是CIP
    

    6.响应报文最终送至客户端

  • 特性:

    1. 保证前端路由将目标地址为VIP的报文全部发送给DS,而不是RS。
      解决方案:
      (1).在前端路由做静态地址路由绑定,将对于VIP的地址仅路由到DS上。
      存在问题:用户未必有权限操作路由
      (2).arptables:在arp层次上实现arp解析时做防火墙规则,过滤RS响应arp请求,由iptables提供
      (3).修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制不能响应对VIP地址的解析请求
      2.RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以直接对RIP进行直接访问

    3.RS和DS必须在同一物理网络中(即必须是同一物理网络)

    4.所有的请求报文经由DS,但响应报文必须不能经过DS

    5.不支持地址转换,即整个过程和不转换IP地址,只转换MAC地址。也不支持端口映射

    6.RS可以使大多数操作系统

    7.RS的网关绝对不允许指向DIP,因为不允许响应报文经过DS

    8.RS的lo接口配置VIP的地址

TUN模型

  • 在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标地址为VIP)外部IP地址首部(源地址为DIP,目标地址为RIP)

    image-20191114212053461

    1. 当用户请求报文到达DS,此时请求的数据报文会先到内核的PREROUTING链。此时源IP是CIP,目标IP是VIP
    2. PREROUTING链检查发现数据包的目标IP是本机,将数据包送至INPUT链
    3. IPVS比对数据包请求的服务是否为集群服务,如果是,在请求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP是RIP,然后发至POSTROUTING链。此时源IP是为DIP,目标IP是RIP
    4. POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为外层封装多了一层IP首部,所以可以理解为此时通过隧道传输),此时源IP是DIP,目标IP是RIP
    5. RS收到报文后发现是自己的IP地址,就会将报文接受下来,拆除最外层的IP后,会发现里面还有一层IP首部,而且目标地址是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成滞后,通过lo接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP
    6. 响应报文送达至客户端
  • 特性:

    1. RIP、VIP、DIP全为公网地址
    2. RS的网关不会也不可能指向DIP
    3. 所有的请求报文经由DS,但响应报文必须不能经过DS
    4. 不支持端口映射
    5. RS的系统必须支持隧道模型

LVS的基本操作

  • 检查系统内核是否已经加载编译了lvs

    image-20191114150044202

  • 若为编译到系统内核中需要手动进行装载,并安装ipvsadm管理工具

    image-20191114150213708

  • 安装lvs命令工具

    image-20191114150905166

  • ipvsadm 工具

    • 格式:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
      • -A 添加lvs虚拟服务器
      • -E 修改虚拟服务器
      • -D 删除虚拟服务器
      • -L | l 显示虚拟服务器配置列表
      • -C 清除虚拟服务器列表中的所有记录
      • -S 保存虚拟服务器配置规则
      • -R 恢复虚拟服务器配置规则
      • -Z 虚拟服务器列表计数器清零
      • -a 在虚拟服务器中添加所管理的真实服务器
      • -e 编辑真实服务器配置
      • -d 删除真实服务器配置
      • -r 指定rip真实服务器的ip地址
      • -h 帮助
      • -t 指定使用tcp
      • -u 指定使用udp
      • -f
      • -n 不进行IP地址反向解析
      • -s 指定调度算法,默认为wlc
      • -p 使用持久连接,在TIMEOUT时间内来自同一个客户端的请求发送给同一台真实服务器
      • -M 指定掩码
      • -g 指定工作模式为dr直接路由模式(默认)
      • -i 指定工作模式为tun隧道模式
      • -m 指定工作模式为nat模式
      • -w 为真实服务器设置权重
      • -c 显示真实服务器的权重
      • --timeout 显示tcp tcpfin udp 的timeout 值
      • --daemon 显示同步守护进程状态
      • --stats 显示统计信息
      • --rate 显示速率信息
      • --sort 对虚拟服务器和真实服务器排序输出
      • --numeric -n 输出IP 地址和端口的数字形式 、
      • --start-daemon 启动同步守护进程,后面可以是master 或backup
      • --stop-daemon 停止同步守护进程
  • lvs虚拟服务器操作

    • 添加lvs虚拟服务器及查看规则

      image-20191114154539271

      ipvsadm -A -t 192.168.10.121:80 -s rr
      ipvsadm -L #或-l(小写L)
      ipvsadm -Ln #-n 不进行IP地址反解
      #其他常用查看参数
      #	-c 显示当前的连接  
      #	--stats 显示统计数据    
      #	--rate 统计速率
      
    • 修改lvs虚拟服务器

      image-20191114154657710

      ipvsadm -E -t 192.168.10.121:80 -s wrr
      #不能直接修改虚拟服务器的ip
      
    • 删除集群

      image-20191114154940712

      ipvsadm -D -t 192.168.10.121:80
      
    • 清空所有规则

      image-20191114155146370

      ipvsadm -C
      
  • 真实服务器管理

    • 添加真实服务器RS到指定的虚拟服务器

      image-20191114160622356

      ipvsadm -a -t 192.168.10.121:80 -r 192.168.20.10 -m -w 1
      ipvsadm -a -t 192.168.10.121:80 -r 192.168.20.20 -m -w 2
      #为虚拟服务器192.168.10.121添加真实服务器192.168.20.10与192.168.20.20
      #192.168.20.10 使用NAT工作模式,权重为1
      ##192.168.20.20 使用NAT工作模式,权重为2
      
    • 删除真实服务器

      image-20191114160908887

      ipvsadm -d -t 192.168.10.121:80 -r 192.168.20.10
      
  • 配置保存与恢复

    • 永久保存配置

      image-20191114170424532

      ipvsadm -S -n > /etc/sysconfig/ipvsadm-config 
      
    • 配置恢复

      image-20191114170524249

      ipvsadm -R < /etc/sysconfig/ipvsadm-config 
      

搭建LVS-NAT实践

  • 实验环境

    • lvs server:Centso7

      • vip 192.168.20.121
      • dip 192.168.10.121
    • lamp1 server:Centos7 192.168.10.10

    • lamp2 server:Centos7 192.168.10.11

      注:防火墙、selinux均已关闭

  • 拓扑图如下

    image-20191114162857723

  • LAMP服务器搭建

    • 这里使用之前实验中已经搭建好的LAMP服务器,如果感兴趣可以参考LAMP环境搭建详细流程

    • 修改两台LAMP服务器网卡配置,指定网关为DIP

      image-20191114171253681

      image-20191114171236844

      image-20191114171328334

    • 修改主页如下,用以测试负载均衡集群调度
      image-20191114163353532
      image-20191114163339584
      image-20191114163416175
      image-20191114163442130

    • 启动服务
      image-20191114163537434
      image-20191114163552270

  • LVS服务器配置

    • 为lvs添加额外网卡并配置ip

      image-20191114163745815

      image-20191114163850168

      image-20191114163924834

      image-20191114163944363

      image-20191114164042197

      注:vmnet2所在网段为192.168.20.0,网关为192.168.20.1

      image-20191114164522772

    • 开启lvs服务器路由转发功能

      image-20191114165124299

      image-20191114165154471

      image-20191114165214734

      image-20191114165235348

    • 安装ipvsamd管理工具

      image-20191114150905166

    • 添加虚拟服务器

      image-20191114165407238

    • 测试

      image-20191114165618179

      image-20191114165630848

    • 永久保存lvs配置规则

      image-20191114170326629

搭建LVS-DR实践

  • 实验环境

    • lvs server:Centso7

      • vip 192.168.10.200
      • dip 192.168.10.121
    • lamp1 server:Centos7 192.168.10.10

    • lamp2 server:Centos7 192.168.10.11

      注:防火墙、selinux均已关闭

  • 拓扑图如下:

    image-20191114204711669

  • 修改所有RS(LAMP)的内核参数

    image-20191114193421506

  • 为两台RS(LAMP)添加网卡子接口

    image-20191114201117747

    image-20191114201148331

  • 为两台RS(LAMP)配置路由规则

    image-20191114201345901

    image-20191114201411279

  • 删除lvs服务器的vip网卡,并配置网卡子接口与路由规则

    image-20191114192212401

    image-20191114202216285

    image-20191114202402354

    image-20191114202344444

    ifconfig eth0:0 192.168.10.200 broadcast 192.168.10.200 netmask 255.255.255.255 up
    route add -host 192.168.10.200 dev eth0:0
    #网卡子接口上添加外网能够访问的ip
    #配置相应的路由
    
  • 清空上个实验ipvsadm配置

    image-20191114195042739

  • 添加新的ipvsadm配置

    image-20191114202611609

  • 测试

    image-20191114202648074

    image-20191114202703984

posted @ 2019-11-14 22:07  MirL  阅读(251)  评论(0编辑  收藏  举报