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

[经验分享] LVS原理及配置

[复制链接]

尚未签到

发表于 2019-1-4 12:49:47 | 显示全部楼层 |阅读模式
  集群方式
  负载均衡  LB load balance
  高可用  HA high avavilable
  高性能计算
  
负载均衡集群
一般用于请求负载分发,也就是按一定的算法把不同的请求调度给不同的节点,
这些节点提供的都是相同的服务。解决单台服务器压力过大的问题。
  
   调度器
  
  node1 node2 node3
  常用的负载均衡方式
  
1。手动选择    如:下载网站很多镜像站点
  2。DNS轮询方式 对同一个域名加多条A记录
   dig www.sina.com
  可靠性低
   
  负载分配不均衡
  3。四层/七层负载均衡
  
负载均衡集群
LVS linux virtual  server (linux虚拟主机) 开源
  章文嵩 1998

  lvs  在linux内核中实现的,linux内核要支持它
  
     cd /usr/src/kernel/`uname -r`/
  make menuconfig
  Networking --->
  Networking options --->
  
   IP virtual server configuation --->
  M> IP virtual server support(EXPERIMENTAL)                           │ │  
       [ ]   IP virtual server debugging                                      │ │  
  │ │ (12)  IPVS connection table size (the Nth power of 2)                  │ │  
  │ │ ---   IPVS transport protocol load balancing support                   │ │  
  │ │
  •    TCP load balancing support                                       │ │  
      │ │
  •    UDP load balancing support                                       │ │  
      │ │
  •    ESP load balancing support                                       │ │  
      │ │
  •    AH load balancing support                                        │ │  
       ................................................
      一个有十种调度算法:(这里只实现8种)
    1,rr round-robin  轮循
      均等地对待每台真实服务器
    2,wrr weighted round-robin  加权轮循
      根据真实服务器的不同处理能力来调度访问请求,并可以动态地调整权值
    3,lc   least-connection  最少连接
    根据连接数来分配,连接数少的服务器会多分配。
    4,wlc  weighted least-connection  加权最少连接
    同时考量服务器的处理能力和连接数来进行分配
    5,lblc 基于局部性的最少连接
      主要用于cache集群
    6,lblcwr 带复制的基于局部性的最少连接
      主要用于cache集群
    7,dh    destionation  hashing  目标地址散列
      8,sh     source  hashing  源地址散列
      
    关于加权和quiesce
    例如:假设在真实服务器池中有三个服务器,服务器 A 和 B 为加权 1 和 3,服务器 C 为加权 2。如果服务器
    C 由于某种原因当机,服务器 A 和 B 就会平级分配被丢弃的负载。但服务器 C 重新上线后,LVS 路
    由器会视其为没有连接的服务器,并且将所有进入请求都一股脑发送到这台服务器中,直到和服务器 A
    和 B 持平。
    要防止此现象出现,管理员可将虚拟服务器设为 quiesce 服务器 — 无论何时当有新的服务器节点上线
    时,都将最小连接表重新设为 0,且 LVS 路由器象所有真实服务器都是刚刚添加到群集中一样路由请求。
      
    三种负载均衡技术:
      NAT
    通过网络地址转换,调度器重定请求报文的目标地址。,将请求分发给下端的真实服务器,真实服务器响应,再通过调度器返回给客户端。
    这种架构,调度器容易成为整个架构的瓶颈。
    一般处理10台以下
      
    TUNNEL
    调度器直接把请求通过IP隧道转发给后端的真实服务器,而真实服务器返回时,直接返回给客户端,而不经过调度器。
    所以效率比NAT高
    一般处理50台以内

      
    DIRECTING
    类似tunnel技术
    这种方式没有隧道的开锁,对于后台真实服务器也没有必须支持IP隧道协议的要求;
    但是要求调度器必须有一块网卡和真实服务器在同一物理网段。
    一般处理100台以内
      [root@li 2.6.18-164.el5-i686]# ls /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/
    ip_vs_dh.ko   ip_vs_lblc.ko   ip_vs_nq.ko   ip_vs_sh.ko
    ip_vs_ftp.ko  ip_vs_lblcr.ko  ip_vs_rr.ko   ip_vs_wlc.ko
    ip_vs.ko      ip_vs_lc.ko     ip_vs_sed.ko  ip_vs_wrr.ko
      浮动IP
      一般来说,LVS集群采用三层结构
      
    负载调度器 整个集群架构对外的前端,负载请求的转发
    服务器池 一组真正执行客户请求的服务器组,如web,ftp,mail等
    共享存储 为服务器池提供一个共享的存储区域,使服务器池比较方便的拥有相同的内容,也方便维护

      还有加上数据库的话,存放动态网页的数据,其锁机制保证了访问时不冲突
      
    ==========================================================
      
    -------------------------------------------------------------------------------
      LVS-NAT
      
        客户端  172.16.43.1
         |
         |
         |  
         |  外网 172.16.43.128
          [directer]
         |  | 内网 172.16.232.135
         |  |
         |   |
         |  |
             WEB1  WEB2  gateway指向172.16.232.135
      172.16.232.129  172.16.232.133
      实验前准备:
    主机名
    时间同步
    yum
    关闭iptables,selinux
      
    --第一大步:
    DR上的操作:
      vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
      sysctl -p  使之生效
      
    安装ipvsadm
    yum install ipvsadm
      ipvsadm - Linux Virtual Server administration
      
    ipvsadm -A -t 172.16.43.128:80 -s rr --A参数增加服务,s参数后接调度算法,这里先使用rr
    ipvsadm -a -t 172.16.43.128:80 -r  172.16.232.129 -m --a参数增加真实服务器,-m代表NAT架构
    ipvsadm -a -t 172.16.43.128:80 -r  172.16.232.133 -m
      
    [root@localhost ~]# ipvsadm -ln    --查看ipvsadm调度规则,清空是用ipvsadm -C
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  172.16.43.128:80 rr
      -> 172.16.232.133:80            Masq    1      0          0         
      -> 172.16.232.129:80            Masq    1      0          0
      
    [root@localhost ~]# /etc/init.d/ipvsadm save --保存规则
    Saving IPVS table to /etc/sysconfig/ipvsadm:         [  OK  ]
      
    # vim /etc/sysconfig/ipvsadm  --保存的规则
    -A -t 172.16.43.128:80 -s rr
    -a -t 172.16.43.128:80 -r 172.16.232.133:80 -m -w 1
    -a -t 172.16.43.128:80 -r 172.16.232.129:80 -m -w 1 --默认-w 1表示权重为1
    --如果要修改规则,可以直接修改这个文件,再/etc/init.d/ipvsadm restart就可以了
      第二大步:
    真实服务器的配置(web1和web2都要配置)
    1,把默认路由指向调度器的同一网段IP
    route add default gw 172.16.232.135
      2,安装httpd ,yum install httpd  ,并在不同的web服务器上建立不同的主页文件,并启动httpd
    # echo 'web1'> /var/www/html/index.html   --在web1服务器上做
    # /etc/init.d/httpd restart
      
    # echo 'web2'> /var/www/html/index.html   --在web2服务器上做
    # /etc/init.d/httpd restart
      第三大步:
    在clinet端进行访问验证
    elinks 172.16.43.128  --访问调度器上的外网IP
      
    在调度器上使用watch ipvsadm -ln 查看调度的动态信息
      
    elinks的结果:一次显示web1,一次显示web2,这样去轮循的方式
      -----------------------------------------------------------------
      做完上面架构后,可以换一种算法尝试
      wlc
      sh       第一次访问上去是被调到哪一个web,后面再访问还是会被调到这个web
      wrr  再把weight权重一个改为2,会发现它被调两次,另一个才被调一次
      还可以使用ab或者webbench去压力测试一下,测试的同时,在DR使用watch ipvsadm -ln 查看调度的分配
      
    ===========================================================
      
    路由架构
      下面的架构中
      
       客户端    172.16.232.1
         |
         |    172.16.232.137
           [firewall]  81.1.1.1  81.1.1.4:80                  Route   1      0          0         
      -> 81.1.1.3:80                  Route   1      0          0
      
    第三大步:
      配置真实服务器(web1和web2都要配)
      1,安装httpd监听80端口,并使用两个不同的主页方便后面的测试
      2,ifconfig lo:0 71.1.1.2 netmask 255.255.255.255  --注意掩码为4个255
      
    3.真实服务器把默认路由指向firewall同物理网段的IP
    route add default gw 81.1.1.1
      4./etc/sysctl.conf   --ip_forward也要打开
      
    --现在去客户端elinks 172.16.232.137,每次都是得到web1
      # arp -a --去firewall上查看得到的71.1.1.2上的MAC为web1的
    ? (172.16.232.1) at 00:50:56:C0:00:01 [ether] on eth0
    ? (71.1.1.2) at 00:0C:29:55:CC:D7 [ether] on eth1
      5, yum install arptables_jf   --安装arp防火墙对目录地址为71.1.1.2的包都drop掉
      arptables -A IN -d 71.1.1.2 -j DROP --添加这条规则
      6,因为ARP的问题会造成firewall的ARP表里过一段时间就没有缓存真实服务器(可以过一段时间在firewall上使用arp -a来查看),所以每台真实服务器都要一定时间ping一下firewall
    可以写一个脚本10秒就ping -c 1 81.1.1.1
      
    测试:OK
      
    ======================================
      
    2.6内核的可以不一定要用arptables来解决arp的问题
      
    把上面的第三大步的5,6小步换一种做法
      
    把上面第6小步脚本关闭
    去掉第5小步  arptables -F  清掉规则
      清掉后,在每个real server都要加上下面的内核参数
      # vim /etc/sysctl.conf
    net.ipv4.conf.lo.arp_ignore = 1  
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
      # sysctl -p使它生效
      arp_ignore = 1  --表示系统只回答目的IP是本地的IP的包,也就是对广播包不做响应
    arp_announce = 2 --表示系统忽略IP包的源地址,而根据目标主机选择地址
      
    测试:OK
    并且在firewall上,使用arp -a,不一定要用real server的MAC地址条目
      
    =================================
      





  • 运维网声明 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-659333-1-1.html 上篇帖子: LVS 三种工作模式 下篇帖子: lvs安装ipvsadm错误问题
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

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

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

    扫描微信二维码查看详情

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


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


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


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



    合作伙伴: 青云cloud

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