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

[经验分享] Lvs 集群简介

[复制链接]

尚未签到

发表于 2019-1-3 08:38:09 | 显示全部楼层 |阅读模式
随着现金站点的访问量越来越大,提高服务器应对大量的并发,向上扩展即提高设备配置,会有瓶颈,而且性价比太低,所以有了横向的扩展,即将用户的请求分摊至多台服务器,以此来解决大量用户的并发访问。

高可用集群(High Availability)用于保障服务的可用性,在全局提高负载均衡服务,集群的思路是将大业务切割分为多个小业务;分布式的应用、分布式的静态资源、分布式数据和存储、以及分布式计算等;集群主要有LB、HA、HP,接下来主要介绍的LB集群。LB集群是通过调度器(director)来实现其功能;有tcp调度器:根据请求报文的目标地址和端口进行调度;还有应用层调度器:根据请求的内容进行调度,而且此种调度为“代理”方式。

lvs集群是由我们国家的章文嵩教授与1998年,创建的项目,后被linux收入,由工作在内核空间的ipvs和工作在用户空间的ipvsadm组成;ipvs工作于netfilterINPUT链接,ipvsadm用于在ipvs上定义集群服务:同时也得定义此集群服务对应于有哪个后端主机可用;根据所指定的调度方法(算法)作出调度决策;pvs支持的协议有:TCP, UDP,SCTP, AH, ESP, AH_ESP。

在lvs集群中,有几个常用的术语约束,Director为调度器,主用用于根据算法做出调度决定;RS为Real Server,即为后端提供服务的主机;在ip层,CIP为用户IP,VIP为Director上面对客户端的ip;DIP为调度器用于与后端主机通信的IP,RIP为后端主机的IP。

lvs的类型主要有四种,lvs-nat、lvs-dr、lvs-tun,最后一种lvs-fullnat是淘宝研发的,主要应用于大型互联网公司,例如BAT ,本文不做详细介绍;                                                                                                                  lvs-nat:类似于DNAT,但支持多目标转发;它通过修改请求报文的目标地址为根据调度算法所挑选出的某RSRIP来进行转发;

                架构特性:

            (1) RS应该使用私有地址,即RIP应该为私有地址;各RS的网关必须指向DIP

            (2) 请求和响应报文都经由Director转发;高负载场景中,Director易于成为系统瓶颈;

            (3) 支持端口映射;

            (4) RS可以使用任意类型的OS;

                        (5) RSRIP必须与DirectorDIP在同一网络;


lvs-dr:直接路由

Director在实现转发时不修改请求的IP首部,而是通过直接封装MAC首部完成转发;目标MACDirector根据调度方法挑选出某RSMAC地址;拓扑结构有别有NAT类型;

  架构特性:

  (1) 保证前端路由器将目标地址为VIP的请求报文通过ARP地址解析后送往Director                                                     解决方案:

           静态绑定:在前端路由直接将VIP对应的目标MAC静态配置为DirectorMAC地址;

           arptables:在各RS上,通过arptables规则拒绝其响应对VIPARP广播请求;

           内核参数:在RS上修改内核参数,并结合地址的配置方式实现拒绝响应对VIPARP广播请求;

(2) RSRIP可以使用私有地址;但也可以使用公网地址,此时可通过互联网上的主机直接对此RS发起管理操作;

(3) 请求报文必须经由Director调度,但响应报文必须不能经由Director;

   (4) RIP必须与DIP在同一个物理网络中;

(5) 不支持端口映射;

(6) RS可以使用大多数的OS

(7) RS的网关一定不能指向Director

                                                            


lvs-tun:

    不修改请求报文IP首部,而是通过IP隧道机制在原有的IP报文之外再封装IP首部,经由互联网把请求报文交给选定的RS

       架构特性:

  (1) RIP, DIP, VIP都是公网地址;

  (2) RS的网关不能,也不可能指向DIP;

     (3) 请求报文由Director分发,但响应报文直接由RS响应给Client

  (4) 不支持端口映射;

  (5) RSOS必须得支持IP隧道;

  




lvs-fullnat:通过请求报文的源地址为DIP,目标为RIP来实现转发;对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发;

    架构特性:

       (1) RIP,DIP可以使用私有地址;

       (2) RIPDIP可以不在同一个网络中,且RIP的网关未必需要指向DIP

       (3) 支持端口映射;

       (4) RSOS可以使用任意类型;

       (5) 请求报文经由Director,响应报文经由Director

  


  

lvs scheduler(调度器)共有十种调度方法:

           静态方法:仅根据算法本身实现调度;

         RR: round-robin, 轮询;轮叫、轮调、轮流,即按照一定次序逐一将请求分配至服务器;

        WRRweightedround-robin, 加权(负载能力)轮询;按照权重来分配;

        SHSource ipHashing,源地址哈希;把来自同一个地址请求,统统定向至此前选定的RS;

                DHDestination ipHashing, 目标地址哈希;把访问同一个目标地址的请求,统统定向至此前选定的某RS


         动态方法:根据算法及后端RS当前的负载状况实现调度;

        LC: least connection 通过判断最少连接来调度;

                           Overhead=Active(活动链接)*256+Inactive(非活动连接)

        WLC: weighted least connection   (使用比较普遍的调度方法)

             Overhead=(Active*256+Inactive)/weight

                 SEDShortedExpection Delay  (权重相差较大的话,可能权重小的一个连接都没有)

                          Overhead=(Active+1)*256/weight

                 NQNeverQueue  首先将服务器扫一遍,然后每个加一个连接,之后再按SED

                 LBLCLocal-BasedLeast Connection,通过判断负载,动态方式的DH算法;

        LBLCRReplicatedLBLC RS会有共享缓存;动态的分配访问目标地址的请求;

  
Session 保持,即对服务器的保持的方法;

Session Sticky sh算法,将基于来自同一个用户,通过源IP绑定RS(或基于cookie绑定,不适用于lvs);

Session Replication Cluster;在个server之间以多播方式“复制”各session,从而每个server会持有所的session;

Session Server  建立缓存服务器,当做主机共享服务的存储器(redis,memcached);


接下来介绍lvs的具体实施方法,以及相应的案例,由于lvs-tun在现实中几乎不可见,本文就没有给出实施的案例;



需要先安装,yuminstall ipvsadm

ipvsadm命令的用法:

   管理集群服务:

     创建或修改:

        ipvsadm-A|E -t|u|f service-address [-s scheduler]

                       -A: 添加

            -E:修改

            -t: 承载的应用层协议为基于TCP协议提供服务的协议;其service-address的格式为“VIP:PORT”,如“172.16.100.6:80”

            -u: 承载的应用层协议为基于UDP协议提供服务的协议;其service-address的格式为“VIP:PORT”,如“172.16.100.6:53”

            -f:承载的应用层协议为基于TCPUDP协议提供服务的协议,但此类报文会经由iptables/netfilter打标记,即为防火墙标记;其service-address的格式为“FWM”,例如“10”

            -s scheduler: 指明调度方法;默认为wlc

     删除:

            ipvsadm-D -t|u|f service-address

             管理集群服务上的RS

          添加或修改:

                ipvsadm-a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

                                     -r server-address: 指明RSserver-address格式一般为“IP[:PORT]”;注意,只支持端口映射的lvs类型中才应该显式定义此处端口

                      例如:-r 192.168.10.7:80

                                [-g|i|m]: 指明lvs类型

                       -g: gateway, 意为dr类型;

                       -i: ipip, 意为tun类型;

                       -m: masquerade, 意为nat类型;

                [-w weight]:当前RS的权重;

                       注意:仅对于支持加权调度的scheduler,权重才有意义;

                    删除:

              ipvsadm-d -t|u|f service-address -r server-address


清空所有集群服务的定义:

ipvsadm-C


保存及恢复集群服务及RS的定义:

       保存

ipvsadm-S > /etc/sysconfig/ipvsadm

ipvsadm-save> /etc/sysconfig/ipvsadm

serviceipvsadm save


                              恢复数据

ipvsadm-R < /etc/sysconfig/ipvsadm

ipvsadm-restore< /etc/sysconfig/ipvsadm

serviceipvsadm restart


查看规则:

ipvsadm-L|l [options]

-c: 列出当前所有connection

--stats: 列出统计数据

--rate: 列出速率

-n, --numeric: 数字格式显示IP及端口;

--exact: 精确值;


清空计数器:

ipvsadm-Z [-t|u|f service-address]

  

下面给出lvs-nat的实施案例:

第一步:在Director上建立lvs-nat以及添加RS(real server) 这里即 192.168.100.2 192.168.100.3

此处Director的VIP为172.16.18.10;

       [root@localhost ~]# ipvsadm -A 172.16.18.10:80 -

         [root@localhost ~]#ipvsadm -a -t 172.16.18.10:80 -r 192.168.100.2 -m -w 2

        [root@localhost ~]#ipvsadm -a -t 172.16.18.10:80 -r 192.168.100.3 -m -w 2

        [root@localhost ~]#ipvsadm -L -n

        IP Virtual Serverversion 1.2.1 (size=4096)

        ProtLocalAddress:Port Scheduler Flags

          -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

        TCP  172.16.18.10:80 wlc

          -> 192.168.100.2:80             Masq    2     0          0        

          -> 192.168.100.3:80             Masq    2     0          0  


第二步:在Director上的第二块网卡设置IP,需要与RS的RIP在同一网段,以及将RS的网关指向Director的第二个网关


   设置Director的第二个网卡DIP


192.168.100.2上设置ip以及将网关指向DirectorDIP,在192.168.100.3上做同样的设置:



httpd下的默认网页路径下写一个index.html,192.168.100.3上写node3.magedu.com,192.168.100.2上写node2.magedu.com用于区别;然后启动httpd服务;



第三步,在Director上提供转发服务
[root@localhost ~]#vim /etc/sysctl.conf



使用sysctl -p 用以查看是否转发的状态;





打开网页,由于两台RS的权重都为2,所以刷新会轮流得到如下的页面:












lvs-dr:

如下为lvs-dr的实验拓扑图:



Director
(1) VIP配置在物理接口的别名上
ifconfigINTERFACE:ALIAS $vip broadcast $vip netmask 255.255.255.255





(2) 配置路由信息
routeadd -host $vip dev INTEFACE:ALIAS


     


RS:
(1) 先修改内核参数,将每一个RS的内核参数都修改

echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce

(2) VIP配置在lo的别名上
ifconfiglo:0 $vip broadcast $vip netmask 255.255.255.255 up
                      [root@wwwwww1]# ifconfig lo:0 172.16.90.2 broadcast 172.16.90.2 netmask 255.255.255.255up




测试: ping Dircetor上的VIP,可以通,而且得到的地址为DIP的地址,说明只能够到达Director



arp -a指令查看Director上,VIP和DIP是否为同一个mac;



(3) 配置路径信息,在两天RS上都如下配置;

routeadd -host $vip dev lo:0


设置转发策略:将访问VIP的通过转发策略转发至RIP

root@localhost~]# ipvsadm -A -t 172.16.90.2:80 -s rr
Zero port specifiedfor non-persistent service
[root@localhost ~]#ipvsadm -A -t 172.16.90.2:80 -s rr
[root@localhost ~]#ipvsadm -a -t 172.16.90.2:80 -r 172.16.80.6 -g -w 2
[root@localhost ~]#ipvsadm -a -t 172.16.90.2:80 -r 172.16.80.7 -g -w 2


启动两人RS的httpd服务,访问DirectorVIP,论调得到如下界面;
















运维网声明 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.iyunv.com/thread-658813-1-1.html 上篇帖子: 集群:(一)LVS 下篇帖子: 集群LB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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