设为首页 收藏本站
查看: 1133|回复: 0

[经验分享] LVS基础和简单实现

[复制链接]

尚未签到

发表于 2019-1-5 14:36:02 | 显示全部楼层 |阅读模式
  1、LVS简介
  2、LVS十种调度算法
  3、一个公网IP实现LVS-DR模型案例
  
  LVS是基于TCP/UDP的端口来进行调度的,是基于内核的一个实现,比应用层负载均衡实现有更高的效能,但应用层可以识别高层的协议,针对更多的条件进行负载均衡,另外应用层负载均衡器(代理)可以对后端主机进行健康状况的检测等;可以说这两种方式各有千秋,下面浅谈一下LVS的实现方式以及调度算法:
  三种常见的实现方式:
  Virtual Server viaNAT(VS-NAT):
  用户通过虚拟IP地址(Virtual IPAddress)访问服务时,访问请求的报文会到达负载均衡器,由它进行负载均衡调度,从一组真实服务器选出一个,将报文的目标地址Virtual IPAddress改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将报文发送给选定的服务器。真实服务器的回应报文经过负载均衡器时,将报文的源地址和源端口改为VirtualIP Address和相应的端口,再把报文发给用户。VS/NAT的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到10时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载均衡器。
  Virtual Server via IPTunneling(VS-TUN):
  在VS/TUN的集群系统中,负载均衡器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载均衡器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。
  VS/TUN技术对服务器有要求,即所有的服务器必须支持“IPTunneling”协议。同时,使用隧道技术,将会增加系统开销,实际生产环境中用的案例不多。
  Virtual Server viaDirect Routing(VS-DR):
  跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。极大的减轻了Director的负担,这可以极大地提高LVS集群系统的伸缩性。跟VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载均衡器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应。
  十种调度算法:
  静态调度算法:

  1.轮叫调度(Round Robin)
  调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

  2.加权轮叫(Weighted Round Robin)
  调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

  3.目标地址散列(Destination Hashing)
  “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空,常用于缓存环境中。

  4.源地址散列(Source Hashing)
  “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空,用以实现LVS的持久性连接。
  动态调度算法:
  1.最少连接(Least Connections):lc
  调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。Active*256+Inactive,取最小的作为下一个数据包转发的对象。刚开始工作时,安装配置列表中的服务器排列顺序进行安排。
  2.加权最少链接(Weighted Least Connections):wlc
  在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。计算方法:(Active*256 + Inactive)/ weight  ,也是LVM的默认调度算法;

  3.基于局部性的最少链接(Locality-Based Least Connections):lblc
  相当于dh+lc ;“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。

  4.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication):lblcr
  “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

  5.最短期望延迟(Shortest Expect Delay):sed
  sed是对wlc的改进,在此处,Inactive连接数不参加评估,计算公式(Active+1)*256/weight,由此也引入了一个问题,就是RealServer中有一台设备的weight很小,那么这台服务器很多时间都是空闲状态。


  6.永不排队(Never Queue):nq
  针对sed出现的问题进行优化,即便是最不济的服务器在刚开始工作的情况下也要分配任务。
  三、案例分析
  当前公司业务处于初始阶段,为考虑以后的扩容问题,服务器集群可能会超过15个节点,受限于LVS-NAT模式集群节点的容量问题,计划采用LVS-DR模式,公司为节约IP地址,只租用了一个IP,为了安全起见,网络入口架设一台防火墙(用iptables实现防火墙功能,& iptables高效的NAT有目共睹)。拓扑设计如下:

  思路:防火墙对请求做了DNAT之后,目的IP变成VIP,TCP端口还是80,那么数据包返回时虽然是由服务器集群节点返回的,但此时响应包的源IP还是VIP,响应包的源TCP端口也没变,那么数据包回到防火墙时,应该也是可以转换回去的。
  IP地址分配:
  防火墙外网口:202.106.1.1内网口:172.16.1.254
  Director:eth0: 172.16.1.1     lo:0(Virtual IP,简称VIP ) : 172.16.1.100
  服务器A: eth0:172.16.1.10      lo:0(VIP) :  172.16.1.100
  服务器B: eth0:172.16.1.20      lo:0(VIP) :172.16.1.100
  首先,客户端发起请求,防火墙对此请求做DNAT映射到Director,Director根据配置的服务器列表和算法,假设将此请求转发给服务器集群中B节点,同时Director修改源数据包的目的MAC地址为服务器B的MAC地址,没有修改数据包的目的IP,此时仍为VIP,服务器B收到此包,发现目的MAC为自己,就解封装,发现目的IP也是自己lo:0上配置的IP,就对此数据包进行响应(用VIP来响应),有人也许会有疑问,为什么不用出接口的IP来响应呢?这是因为其他设备请求的是VIP,就必须用VIP来响应,不用多问为什么,因为这就是规定。看下图:

  其实总的配置还是比较简单的:
  防火墙配置:
  # IP configuration
  [root@NAT ~]# ifconfigeth0 202.106.1.1/30 up
  [root@NAT ~]# ifconfigeth1 172.16.1.254/16 up
  # DNAT configuration
  [root@NAT ~]# iptables-t nat -A PREROUTING -d 202.106.1.1 -p tcp --dport 80 -j SNAT --to172.16.1.100:80
  # 开启路由功能:
  [root@NAT ~]# vi/etc/sysctl.conf
  修改成如下内容
  # Controls IP packetforwarding
  net.ipv4.ip_forward= 1
  Director 配置:
  
  IP配置:
  [root@LB ~]# ifconfigeth0 172.16.1.1/16 up
  [root@LB ~]# ifconfiglo:0 172.16.1.100/32
  安装ipvsadm:
  [root@LB ~]# yum -yinstall ipvsadm
  配置服务类型
  ipvsadm -A -t172.16.1.100:80 -s rr
  添加服务器节点和设置工作模式
  ipvsadm -a -t172.16.1.100:80 -r 172.16.1.20 -g
  ipvsadm -a -t172.16.1.100:80 -r 172.16.1.10 -g

  附ipvsadm常用命令介绍:
  ipvsadm:
1、管理集群服务
          添加:-A -t|u|f service-address [-sscheduler]
                   -t:tcp协议的集群服务
                   -u:udp协议的集群
                   -f:FWM:防火墙标记
          修改:-E
          删除:-D
                    -D -t|u|fservice-address
    例如:# ipvsadm -A -t 172.16.100.1:80 -s rr
2、管理集群服务中的RS
       添加:-a -t|u|f service-address -rserver-address[-g|i|m] [-w weight]
                -t|u|fservice-address:事先定义好的某集群服务
                -rserver-address:某RS的地址,在NAT模型中,可以使用IP:PORT事先端口映射
                 [-g|i|m]:LVS类型
                    -g:DR
                    -I:TUN
                    -m:NAT
                 [-wweight]:定义服务器权重
      3、修改:-e
      4、删除:-d -t|u|f service-address -r server-address
      5、查看
              L|l[options]
                     -n:数字格式显示主机地址和端口号
                     --stats:统计信息
                     --rate:速率
                     --timeout:显示tcp、tcpfin和udp会话的超时时间值
                     --daemon
                     --sort:跟协议、地址、端口进行排序,默认为升序
                     -c:显示当前ipvs连接状况
      6、删除所有集群服务:
                  -C:清空ipvs规则
      7、保存规则
                  -S:(用输出重定向进行保存)
                  格式:#ipvsadm -s>/path/to/somefile
      8、载入此前的规则:
                  -R
                   格式:#ipvsadm -R /proc/sys/net/ipv4/conf/eth0/arp_ignore
  echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
  参数介绍:
  arp_announce
  0  可以在任意接口向外发送所有IP的免费ARP
  1  尽量避免发送所在接口之外IP的免费ARP
  2  只向外发送所在接口的IP的免费ARP
  arp_ignore
  0  可以响应所有配置的IP的ARP报文
  1  只响应从入接口IP的ARP报文
  8        不响应任何ARP请求
  3、配置http服务
  使用yum install httpd 快速安装一个网站,设置测试页面,进行测试。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659731-1-1.html 上篇帖子: lvs集群类型及其工作原理详细介绍 下篇帖子: LVS-- ipvsadm命令参考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表