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

[经验分享] Lvs 理论知识和实践

[复制链接]

尚未签到

发表于 2019-1-5 06:24:19 | 显示全部楼层 |阅读模式
  LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
   LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
     
1Cluster 理论
  1.1  系统拓展的方式:
         scale up:向上发展;
         scale  out:向外发展;
  1.2,集群类型:
          LB:负载均衡集群 -->将一个系统上所面临的诸多负载load Banlancing另外一个主机上;
              硬件: F5 Big-ip
                            Citrix Netscaler
                            A10 A10
              软件:  Lvs(大型网站)除了负载均衡没有其他的健康检测状态;
                            haproxy nginx (居多)httpd(proxy模块) varnish
                            ats apache traffic server)发展需要;
                             perlbal
               基于工作协议层划分:
                             传输层: Lvshaproxy(模拟出TCP层可调度mode tcp)
                              应用层:haproxy(个别协议)nginxatsperlbal
          HA:高可用集群,high availability
          HP:高性能集群,high performancing
                分布式存储及并行处理集群,

   1.3  系统:
              可扩展性;
              可用性;
              容量;例如高速公路,可以跑多少汽车;             单位时间内完成的总量;
              性能;例如车速,单位时间内通过的汽车数量;响应时间;

注意,系统运维:可用性-->做好标准化-->自动化运维 (稳定性高于一切)
#################################################################################
  2,构建高可用扩展性系统的重要原则,在系统内部尽量避免穿行和交互;
        GSLB: Global serviceload balancing  全局负载均衡
               SLBservice load balancing   服务负载平衡

         分层:      负载均衡层        静态内容层           数据存储层
                                                         动态内容层

         分割:功能上分割,把不同的请求分布到不同的server
         分布式:
                分布式应用;
                分布式静态资源;
                分布式数据和存储;
                分布式计算;
2.1,四层交换,四层路由
              根据请求报文的目标IPport将其转发至后端主机集群中的某一台主机(根据负载均衡算法)
              netfilter
                  入站: prerouting------>input
                  转发:prerouting---> forward--->postrouting
                  出站:output---->postrouting

    2.2Lvs
                  ipvsadm (写规则)/ipvs(定义规则) 工作在netfilter的内核中;
                  ipvsadm:用户空间的命令行工具,用于管理集群服务;
                  ipvs:工作在内核中netfilter INPUT 钩子协议上;
                  支持TCPUDPAHESTAH_ESTSCTP等协议;
    2.3Centos 7 查看调度模块信息;
            # grep -i -A 10 'IPVS'/boot/config-3.10.0-229.el7.x86_64

    2.4Lvs arch
                 调度器:director(导演)dispatcher(调度员)
                  RSReal server
                  client IPcip
                  directorvirutal ipvip
                  director ipdip
                  real serveriprip
    2.5Lvs type
                A,   Lvs-nat:基于Dnat模式                  masquerade(地址伪装)类型
                B,    Lvs-dr:直接路由directroutinggateway类型
                C,    Lvs-tunip隧道 ip tunneling          IPIP 隧道类型
                D,    Lvs-fullnat:非标准类型                 请求报文转发时修改源、目标地址

               A,    Lvs-nat
                            多目标的DNATiptables);
                             通过修改请求报文的目标IP地址和端口,完成端口映射,至挑选出某RSRIP地址实现转发;
                            1) RS应该和DIP使用私网地址,且RS的网关需要指向DIP;
                            2)请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;
                            (3)RS 可以使用任意OS,支持端口映射;
                            4RSRIPdirectorDIP必须在同一IP网络;
                              如图1.1所示:

  B,    Lvs-dr:direct routing
                              通过修改请求报文的目标mac地址进行转发;      
                                       directorVIP DIP
                                       RSsRIP,VIP
                            1)必须保证前段路由器将目标IPVIP的请求报文发送给director
                                       解决方案:
                                           静态绑定;director MAC地址绑定
                                          arptables在每个real server 启用arptables
                                           修改RS主机内核参数(linux 主机)
                             (2)RSRIP可以使用私有地址,但也可以使用公网地址;
                             3RSdirector必须在同一物理网络;
                             4)请求报文经由director调度,但响应报文不一定能经由director(由RS直接转发);
                             5)不支持端口映射
                             6RS可以大多数OS
                             7RS的网关不能指向DIP

#################################################################################
3Lvs -type
              Lvs-natRIPDIP必须在同一网段;
              Lvs-dir: director与RS必须在同一网段;
              Lvs-tun
                     不修改请求报文的IP首部,而是通过原有的IP首部之外,在封装一个IP首部;

                     1RIPDIPVIP都是公网地址;
                     2RS网关不能指向DIP
                     3)请求报文经由director调度,响应报文必须不经由director
                     4)不支持端口映射,RSOS必须支持隧道功能;

               Lvs-fullnat:可以跨机房设置
                        请求报文到达时,director同时修改报文的源地址和目标地址;

                     1VIP是公网地址,DIPRIP可以不在同一网段;
                     2RS接收到的请求报文源地址为DIP,因此要响应给DIP
                     3)请求报文和响应报文必须经由director
                     4)支持端口映射,RSOS可以使用任意OS


   4,http:stateless
             追踪每一客户端,需要给每一个客户端发放一个cookie
               session保持:将来自于同一个用户的请求,调用到同一个RS
               session绑定:请求报文插入cookie, (nginx可以,lvs不可以
               session集群;session主从机制会浪费内存、cpu等消耗;
               session服务器;共享存储服务器,KV机制存储;

    5Lvs scheduler
             静态方法:仅根据算法本身进行调度,不考虑负载状态;  起点公平  
                  RR: roundrobin 轮询
                  WRRweighted rr ,加权
                  SHsource hash 源地址hash 实现session保持;损害负载均衡的效果;
                       将来自同一个IP的请求始终调度至同一RS;反向代理
                  DHdestination hash,目标地址hash,不管来自哪一个的请求,请求同一个目标时,
                        都会调度至同一个RS   正向代理

             动态方法:根据算法及各RS的当前负载状态进行调度;sh
                 LCleast connection 最少连接数;
                   overhead=active(活跃的链接数量)*256+inactive(不活跃的连接数)
                  WLCweighted least connection 加权最少连接;
                     overhead=active(活跃的)*256+inactive(不活跃的)/weight 服务器权重            
                  SED:最短期望延迟 shortest expection delay
                     overhead=active+1*256/weight
                 NQnever queue
                                        SED算法改进
                  LBLClocality-based lc,动态DH算法,实现正向代理时;
                  LBLCR:带复制的的LBLC
               权重大的响应请求,分配延迟
#######################################################################################
静态
局部性:空间 + 时间
制作缓存时,基于内存的缓存方式

动态内容:时间 + 特定
制作缓存时,根据用户时长判断;


######################################################################
6Lvs的集群服务:  TCPUDPahesp

       1)一个ipvs主机可以同时定义多个clusterserver
                            根据  tcpudp
        2)一个cluster server上至少有一个real server
                            定义时:指明lvs-type 以及lvs scheduler(程序机);

7ipvsadm的用法:
        A,      管理集群服务;
                  ipvsadm-A|E -t|u|f service-address [-s scheduler]
                            增加和修改
                  ipvsadm-D -t|u|f service-address
                                 删除
                  ipvsadm-C    删除
                  ipvsadm -L | l [options]
                 service-address
                              tcp:-t ip:port
                               udp:-u ip:port
                              fwm:-f mark 数字防火墙标记;
                          -sscheculer:  默认为wlc 非活动链接数量


          B,      管理集群服务中的RS
                         ipvsadm -a|e -t|u|f service-address -rserver-address [-g|i|m] [-wweight]
                         ipvsadm -d -t|u|f service-address -r server-address

                        server-address
                                 ip [:port] 支持端口映射;大多数端口可省略;
                         Lvs-type
                                   -g:gateway,dr
                                  -i:ipip     tun
                                  -m:masquerade,nat   nat模型

          C,       清空和查看:
                            ipvsadm -C
                            ipvsadm -L | l[options]
                               -n:numberic 基于数字格式显示地址和端口;
                               -c:connection 显示ipvs连接数;
                               --stats:统计数据;pkts:总包数
                               --rate:速率;       pps 每秒的包个数
                               --exact:精确值;
                               --sort:排序;
            D,     保存和重载:
                            ipvsadm -R          重载
                            ipvsadm -S [-n]   保存
             E,      置零计数器:
                              ipvsadm -Z[-t|u|f service-address]


######################################################################################################
二,实操部分
Lvs-nat

  

1DIP 设置:director准备两个网口,一个是网桥,一个是虚拟网卡2
     # cd /etc/sysconfig/network-scripts/
     # vimifcfg-eno16777736
     #ifconfig -a
查看eno16777736地址

设置另外一个端口vmnet2
       # cpifcfg-eno16777736 ifcfg-eno33554984
       # vim ifcfg-eno33554984  删除UUID更改NAMEDEVICE参数
      #ifconfig -a 查看eno33554984端口IP

2,接下来我们配置另外两台web机器:
      分别配置两台web服务器的IP地址,和web服务;
      然后在director上面测试两个页面;并关闭iptables防护墙;
      #curl http://192.168.20.7
      #curl http://192.168.20.8
      #iptables -F
     director上转发功能打开
      # cat /proc/sys/net/ipv4/ip_forward
      # vim /etc/sysctl.conf编辑添加"net.ipv4.ip_forword = 1"


3,现在在director上面设置规则:
     # ipvsadm -A -t 172.16.100.117:80 -s rr
     # ipvsadm -a -t 172.16.100.117:80 -r192.168.20.7 -m
     # ipvsadm -a -t 172.16.100.117:80 -r192.168.20.8 -m

4,保存配置永久有效:
    ]# ipvsadm -S > /etc/sysconfig/ipvsadm

5,如果不小心删除规则,可以及时修复;
6,重读配置文件,并修复;
      # ipvsadm -R < /etc/sysconfig/ipvsadm
  
  7,开始验证Lvs-nat 效果:
   http://172.16.100.117来查看;
  
8,使用"-E"选项修改调度器:
    #ipvsadm -E -t 172.16.100.117:80 -s sh
  
9,基于web修改RS端口映射;
  # ipvsadm -e -t172.16.100.117:80 -r 192.168.20.7:8080 -m
  # ipvsadm -e -t172.16.100.117:80 -r 192.168.20.8:8080 -m
或者修改 #vim/etc/sysconfig/ipvsadm 里的参数;然后重读信息。
  

  这样web服务又恢复了正常;
  
10,删除一个real server
    #ipvsadm -d -t 172.16.100.117:80 -r192.168.20.7:8080
          删除集群服务:
    #ipvsadm -D -t 172.16.100.117:80
           修复ipvsadm
    #ipvsadm -R < /etc/sysconfig/ipvsadm
11Lvs-dr 内核参数配置  arp_ignore对请求是否响应  / arp_announce 接不接受请求通告
          arp_announce(通告)-INTEGER  请求
        0 默认,不保留通告
                 1   尽量不通告
                  2  只能、总是避免通告
     arp_announce = 1 尽量避免,
     arp_announce = 2 只能、总是避免,

     arp_ignore -INTEGER 响应
      0 -默认 通告全场
      1 -  仅通告报文请求的入口,
  Lvs-dr实操图
  

A,修改DIP
      配置director主机地址和回环地址:
      # ifconfigeno16777736:0 172.16.100.118/32 broadcast 172.16.100.118 up
      # route add -host 172.16.100.118 deveno16777736:0    限定接口-->目标地址响应

B,配置real server   *参数配置--->配置VIP
      配置两台real server内核参数;
       # echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
       #   echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
       # echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
       # echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
       # ifconfig lo:0 172.16.100.118/32broadcast 172.16.100.118 up添加回环Vip地址
       # route add -host 172.16.100.118 devlo:0  端口限定

  C,请求RIP地址验证;curl 命令;
  Ddirector上添加集群服务;
        #ipvsadm -C 删除之前的配置
  

# ipvsadm -A -t172.16.100.118:80 -s rr
# ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.21 -g
# ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.22 -g
  

  

  

  





运维网声明 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-659420-1-1.html 上篇帖子: LVS IP TUNL模式 下篇帖子: LVS_端口绑定
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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