Lvs 理论知识和实践

    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可能会成为系统瓶颈;

                            3RS 可以使用任意OS,支持端口映射;

                            4RSRIPdirectorDIP必须在同一IP网络;

                              如图1.1所示:

wKioL1Yfl4WDqPm1AAEJ77fPQZ8159.jpg

  B,    Lvs-dr:direct routing

                              通过修改请求报文的目标mac地址进行转发;      

                                       directorVIP DIP

                                       RSsRIP,VIP

                            1)必须保证前段路由器将目标IPVIP的请求报文发送给director

                                       解决方案:

                                           静态绑定;director MAC地址绑定

                                          arptables在每个real server 启用arptables

                                           修改RS主机内核参数(linux 主机)

                             2RSRIP可以使用私有地址,但也可以使用公网地址;

                             3RSdirector必须在同一物理网络;

                             4请求报文经由director调度,但响应报文不一定能经由director(由RS直接转发);

                             5)不支持端口映射

                             6RS可以大多数OS

                             7RS的网关不能指向DIP

wKioL1YfmbKCqEkiAAEavH1flYc889.jpg

#################################################################################

3Lvs -type

              Lvs-natRIPDIP必须在同一网段;

              Lvs-dir: directorRS必须在同一网段;

              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,httpstateless

             追踪每一客户端,需要给每一个客户端发放一个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

wKioL1YfmeTTdmnSAADllmM6COo821.jpg


1DIP 设置:director准备两个网口,一个是网桥,一个是虚拟网卡2

     # cd /etc/sysconfig/network-scripts/

     # vimifcfg-eno16777736

     #ifconfig -a

查看eno16777736地址

wKiom1Yfmj2DwDAwAAF5ZS8As9s316.jpg

设置另外一个端口vmnet2

       # cpifcfg-eno16777736 ifcfg-eno33554984

       # vim ifcfg-eno33554984  删除UUID更改NAMEDEVICE参数

      #ifconfig -a 查看eno33554984端口IP

wKioL1Yfmobz3VWCAAFY2_wGF1c294.jpg

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"

wKioL1YfmqmxDdHpAAAg8wY-TrI887.jpg

wKioL1YfmrbTtNIzAABdStRQqnk923.jpg

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

wKioL1Yfms_hyoCCAACmSQeZPPA998.jpg

5,如果不小心删除规则,可以及时修复;

6,重读配置文件,并修复;

      # ipvsadm -R < /etc/sysconfig/ipvsadm

wKioL1YfmvXR2JDlAAEfV6n3iG8856.jpg

  7,开始验证Lvs-nat 效果:

   http://172.16.100.117来查看;

wKioL1YfmzzAhwWzAADt2aDRk58456.jpg

8,使用"-E"选项修改调度器:

    #ipvsadm -E -t 172.16.100.117:80 -s sh

wKiom1YfmzWRJcwvAAFJE5EC3-0750.jpg

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 里的参数;然后重读信息。

wKioL1Yfm3XyKQg_AAEPFaaq0qQ904.jpg

这样web服务又恢复了正常;

wKiom1Yfm3HT9J8JAADgLn1bAGk813.jpg

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实操图

wKiom1Yfm8Xymh6tAAGwqoyvKCU318.jpg

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 删除之前的配置

wKioL1YfnJfB0xL_AAGyXMPC1zw833.jpg

# 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





你可能感兴趣的:(linux,服务器,客户端,中国,知识)