LVS

一、集群

  • 一组相互独立的,通过高速网络互联的计算机构成的一个组,并以单一系统的模式加以管理
  • 将很多服务器集中起来一起进行同一种服务,在C端看来就像是只有一个服务器
  • 可以在较低成本的情况下获得在性能、可靠、灵活性方面相对较高的收益
  • 任务调度则是集群系统中的核心技术
    二、集群分类
  • 高性能计算集群(HPC)
  • 高可用集群(HA)
  • 负载均衡集群(LB)
    三、LVS集群组成
  • 前端:负载均衡层
    -- 由一台或多台负载均衡调度器构成
  • 中端:服务器群组层
    --由一组实际运行应用服务的服务器组成
  • 后端:数据共享存储层
    -- 提供共享存储空间的存储区域
    day01 LVS_第1张图片
    四、LVS术语
  • Director Server:调度器,将负载分发到Real Server 的服务器
  • Real Server:真实服务器,真正提供应用服务的服务器
  • VIP:虚拟IP地址,公布给Client访问的IP地址
  • RIP:真实IP地址,集群节点使用的IP地址
  • DIP:Director连接到Real Server 的IP地址
    五、LVS负载均衡方式
  • VS/NAT:通过网络地址转换实现的虚拟服务器
    --Director 将用户请求报文的目的地址改变成选的的Real Server地址后,将请求转发给Real Server
    --大并发访问时,调度器性能成为瓶颈
  • VS/DR:直接使用路由技术实现虚拟服务器
    --通过改写请求报文的的MAC地址,将请求发至Real Server,Real Server直接响应给客户端
  • VS/TUN:通过隧道方式实现虚拟服务器
    --Director采用隧道技术将请求发至Real Server后,Real Server 直接响应客户端
    day01 LVS_第2张图片
    六:负载均衡调度算法
  • Director Server根据各台服务器的负载情况,通过高度算法动态选择一台Real Server
  • LVS目前实现了10种调度算法
  • 常用调度算法有4种
    --轮询(Round Robin)
    --加权轮询(Weighted Round Robin)
    --最少连接(Least Connections)
    --加权最少连接(Weighted Least Connections)
  • 轮询(rr)
    --将用户的请求平均的分配到Real Server
  • 加权轮询(wrr)
    --根据真实服务器的性能设置权重,再进行轮询调度
  • 最少连接(lc)
    --动态的将请求分发到已建立的连接数最少的服务器上
  • 加权最少连接(wlc)
    --根据真实服务器的性能设置权重,再将网络请求调度到以建立连接的最少服务器上
  • 基于局部性的最少连接(lblc)
    --根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器
  • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
    --维护从一个目标IP地址到一台服务器的映射根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器
    当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
  • 目标地址散列(Source Hashing)
    --根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
  • 目标地址散列(Destination Hashing)
    --根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
  • 最短的期望的延迟(Shortest Expected Delay Scheduling SED)
    --基于WLC算法,A、B、C三台机器分别权重1、2、3 ,连接数也分别是1、2、3如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个,使用sed算法后会进行这样一个运算:A(1+1)/1,B(1+2)/2,C(1+3)/3,根据运算结果,把连接交给C
  • 最少队列调度(Never Queue Scheduling NQ)
    如果有台Real Server的连接数为0就直接分配过去,无需SED运算
    七:LVS-NAT实现方式

    1. 拓扑
      day01 LVS_第3张图片
    2. 配置 DIP 和RIP在一个网段 真实服务器网关指向DIP
      ipvsadm
      -A 添加虚拟服务器
      -t 设置集群地址
      -s 指定调度算法
      ipvsadm -A -t 192.168.4.100:80 -s rr
      -a 添加真实服务器
      -d 删出真实服务器
      -r 指定真实服务器地址
      -m 使用NAT 模式 -g DR模式 -i TUN模式
      -w 为节点服务器设置权重,默认1
      ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.1:80 -m
      ipvsadm -d -r 192.168.4.1:80 -t 192.168.4.100:80
      ipvsadm -Ln 查看lvs信息
      ipvsadm -C 清空所有规则
      环境4台主机 1client 1director 2real server
      客户端ip 201.1.1.200
      VIP 201.1.1.100
      DIP 192.168.4.100
      RIP 192.168.4.11/12
      (1)director 开启路由转发 echo "net.ipv4.ip_forward = 1" >> /etcsysctl.conf sysctl -p 文件生效 查看 /proc/sys/net/ipv4/ip_forward 文件内容为1
      yum -y install ipvsadm
      ipvsadm -A -t 192.168.4.100:80 -s rr
      ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.11:80 -m
      ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.12:80 -m

      (2)真实服务器
      配置ip,httpd 编写测试页面
      保存配置:ipvsadm-save -n >>/etc/sysconfig/ipvsadm #重定向到配置文件 或 sevice ipvsadm save
      (3)客户端访问201.1.1.100 就可以访问到real server
      (4) 修改算法
      ipvsadm -E -t 192.168.4.100:80 -s wrr
      八、LVS-DR DIP 必须设置在虚拟接口上
      拓扑
      day01 LVS_第4张图片

      real配置
      vim /etc/sysctl.conf
      net.ipv4.conf.all.arp_announce = 2
      net.ipv4.conf.lo.arp_announce = 2
      net.ipv4.conf.all.arp_ignore = 1
      net.ipv4.conf.lo.arp_ignore = 1

      cd /etc/sysconfig/network-scripts/
      vim ifcfg-lo:0
      DEVICE=lo:0
      IPADDR=202.1.1.200
      NETMASK=255.255.255.255
      BROADCAST=202.1.1.200
      ONBOOT=yes

内核参数说明
•arp_announce
–0 (默认):在任意网络接口上的任何本地地址
–1:尽量避免不在该网络接口子网段的本地地址做出arp回应。当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用。此时会检查来访IP是否为所有接口上的子网段内ip之一。如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理
–2:对查询目标使用最适当的本地地址。在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送
•arp_ignore
–0(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求
–1:只回答目标IP地址是来访网络接口本地地址的ARP查询请求
–2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
–3:不回应该网络接口的arp请求,而只对设置的唯一和连接地址做出回应
–4-7:保留未使用
–8:不回应所有(本地地址)的arp查询
director 配置
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth0:0
DEVICE=eth0:0
HWADDR=00:0C:29:B6:5E:A4
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=202.1.1.200
PREFIX=24
ipvsadm -A -t 202.1.1.200:80 -s wlc
ipvsadm -a -t 202.1.1.200:80 -r 202.1.1.10 -g -w 1
ipvsadm -a -t 202.1.1.200:80 -r 202.1.1.20 -g -w 2

客户端访问
九、编写脚本,监控real server是否出现故障,如果出现故障将其移除,如果故障恢复,再将它加入到LVS中
day01 LVS_第5张图片