xuyangus 发表于 2019-1-4 13:37:34

六十二、负载均衡集群介绍、LVS介绍、LVS的调度算法、LVS NAT模式搭建

  六十二、负载均衡集群介绍、LVS介绍、LVS的调度算法、LVS NAT模式搭建
  一、负载均衡集群介绍
   主流开源软件LVS、keepalived、haproxy、nginx等
   其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用。
  OSI简介:OSI采用了分层的结构化技术,共分七层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
   keepalived的负载均衡功能其实就是lvs,内置的功能。
   lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而nginx仅仅支持http,https,mail,haproxy也支持MySQL这种
   相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求。
  二、LVS介绍
   LVS是由国人章文嵩开发
   流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高
   LVS最新版本基于Linux内核2.6,有好多年不更新了
   LVS有三种常见的模式:NAT、IP Tunnel、DR
   LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)
  LVS NAT模式
http://blog.运维网.com/13576245/E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/%E6%96%87%E4%BB%B6/qqABFF80061C1054E664D19B74C49D69A1/bf68bc760ed642098a0dba32904145ef/clipboard.pnghttp://s1.运维网.com/images/20180523/1527060277390284.png
  Load Balance:分发器
  过程:用户发送请求到分发器,分发器再分发任务给后端的rs服务器,rs服务器处理好了结果以后再把结果告诉分发器,分发器再反馈给用户。
  因为分发器需要处理很多任务,所以请求量不能太大,一般的规模就十来台,或者十台以下,否则就可能力不从心了,除非配置很高。
   这种模式借助iptables的nat表来实现
   用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
   rs只需要设定网关为分发器的内网ip即可,因为不与外界通信。
   用户请求的数据包和返回给用户的数据包全部需要经过分发器,所以分发器成为瓶颈。
   在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源。
  LVS IP Tunnel模式
http://blog.运维网.com/13576245/E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/%E6%96%87%E4%BB%B6/qqABFF80061C1054E664D19B74C49D69A1/e2776a6fb1fd41e28c13075097b8c7ad/clipboard.pnghttp://s1.运维网.com/images/20180523/1527060288510470.png
   这种模式,需要有一个公共IP配置在分发器和所有rs上,我们把它叫做vip
   IP Tunnel实现原理:
  1.客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为某台rs的IP,这样数据包就到了rs上。
  2.rs接收数据包后,会还原原始数据包,这样原来包里的目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己,数据包里有来源IP,然后rs处理好数据以后,通过公网IP直接把结果发送给用户;所以这里分发器就没有瓶颈了,就没那么累了。
  LVS DR模式
http://blog.运维网.com/13576245/E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/%E6%96%87%E4%BB%B6/qqABFF80061C1054E664D19B74C49D69A1/5a445f23bf924031b5195b99d9f34cc8/clipboard.pnghttp://s1.运维网.com/images/20180523/1527060296363755.png
   这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip。
  这里分发器叫director,NAT模式和IP Tunnel模式是叫Load balance。
  分发器和rs服务器需要有一个内网
   和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址。
   rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己,然后rs处理好数据,通过公网IP直接把结果发送给用户。
  三、LVS调度算法
  前面四种常用,重点:
   轮询 Round-Robinrr
  //分发器均衡的把用户的请求发送到rs上。
   加权轮询 Weight Round-Robin wrr
  //带权重的轮询,配置好的rs权重就可以给高点,分配到的任务就多一些。
   最小连接 Least-Connection lc
  //将用户请求发送到请求量少的rs服务器上去,因为rs闲,就会处理更快。
   加权最小连接 Weight Least-Connection wlc
   基于局部性的最小连接 Locality-Based Least Connections lblc
   带复制的基于局部性最小连接 Locality-Based Least Connections with Replicationlblcr
   目标地址散列调度 Destination Hashing dh
   源地址散列调度 Source Hashingsh
  四、LVS NAT模式搭建
  准备工作:
   三台机器
  1)分发器,也叫调度器(简写为dir)
  先把网卡2改成仅主机模式,然后进虚拟网路编辑器看一下子网地址的网段,再更改ens37的网络配置,设定好后启动网卡,用Windows的cmdping一下这个232.1看是否可以通信。
   内网ens33:93.130,外网ens37:232.1(ens37改为仅主机模式)
  2)rs1
   内网:93.131,设置网关为93.130(分发器内网IP)
  安装个iptables-services。
  3)rs2
   内网:93.132,设置网关为93.130
   三台机器上都执行执行
   systemctl stop firewalld; systemctl disable firewalld
   systemctl startiptables;systemctl enable iptables; iptables -F; service iptables save
   关闭selinux。
  开始搭建NAT模式:
   在dir(分发器)上安装ipvsadm
  ipvsadm工具:实现LVS的一个重要工具。
   yum install -y ipvsdam
   在dir上编写脚本,LVS都是以脚本的方式执行的,方便维护。
  # vim /usr/local/sbin/lvs_nat.sh//内容如下
  #! /bin/bash
  # director 服务器上开启路由转发功能,这个参数就是内核参数,实现路由转发。
  echo 1 > /proc/sys/net/ipv4/ip_forward
  # 关闭icmp的重定向
  echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
  echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
  # 注意区分网卡名字,自己的网卡名是什么就写什么。
  echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
  echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
  # director 设置nat防火墙
  iptables -t nat -F
  iptables -t nat -X                         //清空链
  iptables -t nat -A POSTROUTING -s 192.168.93.2/24-j MASQUERADE    //可以让同网段的内网去上网。
  # director设置ipvsadm的功能
  IPVSADM='/usr/sbin/ipvsadm'       //这里设置了一个变量,下面去引用这个变量($IPVSADM)。
  $IPVSADM -C                           //清空规则
  $IPVSADM -A -t 192.168.232.1:80 -s wlc -p 3   //这里的wlc是算法,可以写rr等;-A增加一条规则,指定是nat模式还是ip tunnel模式,还是DR模式;-t后跟的是分发器的外网IP;-s指定算法;-p指定它的超时时间,3秒之内一直访问到A服务器上去,可以设置0,如果设置0无法执行这个脚本,就去掉这个参数。
  $IPVSADM -a -t 192.168.232.1:80 -r 192.168.93.131:80 -m -w 1
  $IPVSADM -a -t 192.168.232.1:80 -r 192.168.93.132:80 -m -w 1
  这里下面的两条规则:
  -r:指定rs服务器
  -m:说明是NAT模式
  -w:权重
  NAT模式效果测试
  # sh /usr/local/sbin/lvs_nat.sh   //先执行这个脚本,没有输出就是没有错误
   两台rs上都安装nginx
   设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结果
  # vim /usr/share/nginx/html/index.html      //对两台机器写上不同的内容进行区分,我这里因为第三台默认页是nginx的默认虚拟主机,所以在默认虚拟主机的index.html改内容:/data/wwwroot/default/index.html
  测试:# curl 192.168.232.1
  多访问几次看结果差异,可以发现访问的一直是rs1和rs2在切换访问。
  扩展
  lvs 三种模式详解 http://www.it165.net/admin/html/201401/2248.html
  lvs几种算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html
  关于arp_ignore和 arp_announcehttp://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
  lvs原理相关的 http://blog.csdn.net/pi9nc/article/details/23380589



页: [1]
查看完整版本: 六十二、负载均衡集群介绍、LVS介绍、LVS的调度算法、LVS NAT模式搭建