介绍

LB集群原理:当用户的请求过来时,会直接分发到director server上,然后它把用户的请求根据设置号的调度算法,智能均衡地分发到后端真正的服务器上(real server),为保证用户请求一致,通常需要共享存储

LVS:Linux virtual server虚拟服务器,已经是Linux内核标准的一部分
LVS架构从逻辑上分为调度层,server集群层和共享存储层
官方参考文档:http://www.linuxvirtualserver.org/Documents.html

LVS组成

ipvs(IP virtual server):工作于内核空间,是真正实现调度的代码
ipvsadm:工作在用户空间,负责ipvs内核框架编写规则,定义谁是集群服务器,谁是后端真实的服务器

相关术语

DR:director server 前端负载均衡节点
RS:real server 后端真正的服务器
VIP:虚拟IP地址,用户请求目标的IP地址
RIP:真实的IP地址,内部主机通讯的IP地址
CIP:客户端的IP地址

工作模型

NAT
DR
TUN
FULL-ANT

NAT模型

工作流程

  1. 用户访问服务器集群提供的服务时,发往VIP的请求数据包到达DR(负载均衡设备)
  2. DR检查数据包的目的地址和端口,根据虚拟服务器(LVS)规则表匹配虚拟服务器服务,通过调度算法从集群中选取RS,并将连接添加到记录已连接的hash表中
  3. 将目标地址和数据包的端口重写为所有RS的目的地址和端口,并将数据包转发给相对应的RS
  4. 当回复数据包返回时,DR将数据包的源地址和端口重写为虚拟服务器的VIP和端口
  5. 当连接中止或者连接超时后,连接记录将从hash表中删除

image.png

特性

  1. RS应该使用私有IP地址,网关要为DIP
  2. DIP(DR对内的IP)和RIP属于同一个网段
  3. 请求报文和响应报文都要经过DR
  4. 支持端口映射
  5. RS可以使用任意操作系统

    DR模型-响应报文不经过DR

    image.png

    工作流程

  6. 用户访问服务器集群提供的服务时,发往VIP的请求数据包到达DR(负载均衡设备)(VIP地址由DR和RS共享)

  7. 负载均衡设备配置VIP地址,用于接收请求数据包,并将数据包路由到选定的RS上
  8. 所有的RS的非arp别名接口(一般选取环回接口)都配置了VIP地址,或者将发往VIP地址的数据包重定向到本地套接字,以便RS可以在本地处理数据包
  9. DR和RS必须通过switch/HUB物理连接其中一个接口,DR只是将数据帧的MAC地址更改为所选的RS的MAC地址,然后再LAN上重新传输;这就是DR和RS必须通过同一个LAN进行连接的原因

image.png
3根据RIP-MAC选取RS
4中能转发到RS是因为目的IP为VIP没变
5根据ARP解析得到CIP-MAC和VIP-MAC

特性

  1. 保证前端路由将目的地址为VIP的报文通通发给DR
  2. RS可以使用私有IP地址,当然也可以使用公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
  3. RS和DR必须在用一个物理网络中
  4. 所有的请求报文经过DR,但是所有响应报文不能经过DR
  5. 不支持地址转换,也不支持端口映射
  6. RS的网关绝不允许指向DIP
  7. RS的环回接口配置VIP地址

因为ARP广播,想要保证目的地址为VIP报文发给DS,只能够让DR去响应ARP请求,而RS不能响应;修改RS上的内部参数(arp_ingore和arp_announce)将RS上的VIP配置在环回接口的别名上,并限制其不能响应VIP地址解析请求

LVS TUN模型

工作流程和介绍

  1. 在LVS NAT模型中,所有的数据请求和数据响应报文都会经过DR,所以当后端服务器集群超过10台时,则调度器DR会成为整个集群的瓶颈
  2. 数据请求报文往往小于响应报文的大小,因为响应报文中包含有具体的数据,所以LVS TUN模型的思路是:将请求和响应数据报文分离;让DR仅仅处理数据请求,而让RS响应数据报文直接返回给客户端
  3. 工作模式:IP tun技术——IP隧道技术

IP隧道技术
将原始的数据包封装并添加新的包头(新的源地址及端口,目标地址和端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的RS,通过将客户端发往调度器的原始数据包封装,在其基础上添加新的数据包头(修改目标地址为调度选择出来的RS地址和对应端口)

  1. LVS TUN模式要求RS可以直接于外部网络连接,RS在收到请求数据包后直接响应给客户端

image.png

特性

  1. RIP VIP DIP全部为公网IP
  2. RS的网关不会也不能指向DIP
  3. 所有的请求报文经过DR,但响应报文必须不能够经过DR
  4. 不支持端口映射
  5. RS的系统必须支持隧道

    调度算法-10种(*前六)

  6. RR:轮询调度

按照依次循环的方法将请求调度到不同的服务器上

  1. WRR

可以给RS设置权重,权重设置越高,那么分发的请求数越多

  1. 目的地址hash

根据请求的目的IP地址,作为散列值从静态的散列表中找出对应的服务器,若该服务器时可用的且未超载,将请求发送给服务器,否则返回为空

  1. 源地址hash

根据请求的源IP地址,作为散列值从静态的散列表中找出对应的服务器,若该服务器时可用的且未超载,将请求发送给服务器,否则返回为空

  1. 最少连接数

根据后端RS的连接数来决定把请求分发给谁,如果RS1连接数比RS2小,那么请求优先发给RS1

  1. 加权最小连接数

比最少连接数多一个权重的概念

  1. 最短延迟调度

根据WLC改进:overhead=(active+1)*256/权重
他就不会考虑非活动状态,把当前处于活动状态的连接数+1来实现,数目最小接收下次请求

  1. NQ永不排队/最小队列调度

无需队列,如果有台RS的连接数=0,直接分配过去,不需要进行算法运算,这样保证不会有一个主机非常空闲

  1. 基于局部性的最小连接

针对目的IP地址的负载均衡,目前主要用于cache集群,该算法根据请求的目标IP地址,找出该目标IP地址最近使用的服务器,若该服务器是可用的且未超载,将请求返回

  1. 带复制的基于局部性最小连接

针对目的IP地址的负载均衡

LVS实验部署

LVS-NAT实验

环境准备:
DR服务器:两个接口
VIP:172.16.0.10(ens37)
DIP:192.168.220.102(ens33)
RS集群:RS1&RS2
RS1:192.168.220.103
RS2:192.168.220.104
DR部署:

  1. 安装ipvsadm工具

yum install ipvsadm -y

  1. 打开转发配置nat

    1. [root@node1 ~]# echo 1 >> /proc/sys/net/ipv4/ip_forward
    2. [root@node1 ~]# iptables t nat F
    3. [root@node1 ~]# iptables t nat A POSTROUTING s 192.168.10.0/24 o ens36 j MASQUERADE
  2. 设置wrr策略和添加RS主机

    1. [root@node1 ~]# ipvsadm A t 172.16.0.10:80 s wrr
    2. [root@node1 ~]# ipvsadm a t 172.16.0.10:80 r 192.168.10.20:80 m w 1
    3. [root@node1 ~]# ipvsadm a t 172.16.0.10:80 r 192.168.10.30:80 m w 1
  3. 查看策略信息

  1. [root@node1 ~]# ipvsadm ln
  2. IP Virtual Server version 1.2.1 (size=4096)
  3. Prot LocalAddress:Port Scheduler Flags
  4. ‐> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. TCP 172.16.0.10:80 wrr
  6. ‐> 192.168.10.20:80 Masq 1 0 0
  7. ‐> 192.168.10.30:80 Masq 1 0 0

RS部署:

  1. [root@node2 ~]# echo "RS2" > /usr/share/nginx/html/index.html
  2. [root@node3 ~]# echo "RS3" > /usr/share/nginx/html/index.html

测试:for i in {1..10};do curl 172.16.0.10;done

!!!总结一下遇到的坑:

LVS-TUN实验

环境准备(所有设备都是一个网段的):
DIP:192.168.220.102(ens33)
RIP1:192.168.220.103
RIP2:192.168.220.104
VIP:192.168.220.105(ens33:0)
DR部署:

  1. [root@node1 ~]# ifconfig ens33:0 192.168.10.100 broadcast 192.168.10.255 netmask 255.255.255.0 up
  2. [root@node1 ~]# route add host 192.168.10.100 dev ens33:0
  3. [root@node1 ~]# ipvsadm A t 192.168.10.100:80 s wrr
  4. [root@node1 ~]# ipvsadm a t 192.168.10.100:80 r 192.168.10.20:80 m w 2
  5. [root@node1 ~]# ipvsadm a t 192.168.10.100:80 r 192.168.10.30:80 m w 1

RS部署:

  1. [root@node2 ~]# cat rs.sh
  2. #!/bin/bash
  3. vip=192.168.10.100
  4. ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
  5. route add host $vip lo:0
  6. echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  7. echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  8. echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  9. echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  10. 在所有RS上部署!

测试:for((i=1;i<5;i++));do curl 192.168.220.105;done

面试准备
网络
TCP/IP
算法
《剑指offer》
牛客网:内推/面经/水友
leecode:刷算法题

阿里巴巴:蚂蚁 阿里云 PE团队
腾讯:技术运营—技术支持/DBA/SRE运维/网络
百度:百度基础云平台/SRE
字节跳动:运维较少—数据结构算法(南京:广告部门大数据团队-python后端-桌面技术支持)
京东 美团 滴滴 网易 猿辅导
杭州:有赞,同花顺
南京:苏宁,扇贝
上海:携程
拼多多
依图
商汤