热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux自学笔记——linuxcluster之lvs

Cluster系统扩展的方式:      Scaleup:向上扩展;      Scaleout:向外扩展集群类型:      LB:负载均衡集群,LoadBalanc
Cluster

系统扩展的方式:

       Scale up:向上扩展;

       Scale out:向外扩展

集群类型:

       LB:负载均衡集群,Load Balancing

       HA:高可用集群,High Availability

       HP:高性能集群,High Performancing

系统:

       可扩展性

       可用性

       容量

       性能

系统运维:可用 à 标准化 à 自动化

       www.top500.org

构建高可用扩展性系统的重要原则:在系统内部尽量避免串行化和交互;

 

GSLB:Global Service Load Balancing

       SLB:Service Load Balancing

总结:

       分层

       分割

       分布式

              分布式应用

              分布式静态资源

              分布式数据和存储

              分布式计算

LB集群的实现:

       硬件:

              F5 BIG-IP

              Citrix  NetScaler

              A10 A10

              Array

              Redware

       软件:

              lvs

              haproxy

              nginx

              ats(apache  traffic  server)

              perlbal

 

              基于工作的协议层次划分:

                     传输层:

                            lvs,haproxy(mode tcp)

                     应用层:

                            haproxy,nginx,ats,perlbal

lvs(1)

       章文嵩:正明;

       Lvs:linux virtual server

      

       L4:四层交换,四层路由;

              根据请求报文的目录ip和port将其转发至后端主机集群中的某一台主机(根据挑选算法);

      

              netfilter

                     PREROUTING à INPUT

                     PREROUTING à FORWARD à POSTROUTING

                     OUTPUT – POSTROUTING

       lvs

              ipvsadm/ipvs

              ipvsadm:用户空间的命令行工具,用于管理集群服务;

              ipvs:工作内核中的netfilter  INPUT钩子上;

 

              支持TCP,UDP ,AH , EST , AH_EST , SCTP等诸多协议;

       lvs arch

              调度器:director,dispatcher,balancer

              RS:Real Server

 

              Client ip:CIP

              Director Virtual ip:VIP

              Director IP:DIP

              Real Server ip:RIP

       lvs type

              lvs-nat

              lvs-dr(direct routing)

              lvs-tun(ip tunneling)

              lvs-fullnat

 

              lvs-nat

多目标的DNAT(iptables):它通过修改请求报文的目标ip地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;

1)      RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;

2)      请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;

3)      支持端口映射;

4)      RS可以使用任意OS;

5)      RS的RIP和Director的DIP必须在同一IP网络;

      技术分享图片

Note:客户端主机地址为cip,调度器Director主机有两块网卡,一块地址为vip,一块为dip,两台RS 的主机地址分为为RIP1,RIP2;

lvs-dr:direct routing

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

           Director:VIP , DIP

           RSs:RIP , VIP

1)      保证全段路由器将目标ip为VIP的请求报文送给director;

解决方案:

       静态绑定

       arptables

       修改RS主机内核的参数

2)      RS的RIP可以使用私有地址;但也可以使用公网地址;

3)      RS跟Director必须在同一物理网络中;

4)      请求报文经由Director调度,但响应报文一定不能经由Director;

5)      不支持端口映射;

6)      RS可以是大多数的OS;

7)      RS的网关不能指向DIP

    技术分享图片

两个内核参数

      限制响应级别:arp_ignore;

             0:默认值,表示可使用本地任意接口上配置的任意地址响应;

             1:仅在请求的目标ip配置在本地主机的接收到请求报文接口上时,才给予回应;

      限制通告级别:arp_announce;

             0:默认值,把本机上所有的接口的所有信息向每个接口上的网络进行通告;

             1:尽量避免向非直接连接网络进行通告;

             2:必须避免向非本地直接连接网络进行通告;

     

总结:

  lvs-nat:请求和响应报文都经由director,且RIP和DIP必须在同一网络;

  lvs-dr:仅请求报文经由director,响应报文是由RS直接响应给client,Director与RS必须在同一物理网络;

 

  lvs-tun

不修改请求报文的ip首部,而是通过在原有的ip首部(cip <-->vip)之外,在封装一个ip首部(dip《--》rip)

1)      RIP,DIP,VIP全得是公网地址;

2)      RS的网关不能指向DIP;

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

4)      不支持端口映射;

5)      RS的OS必须支持隧道功能;

lvs-fullnat

    director通过同时请求报文的目标地址和源地址进行转发;

1)      VIP是公网地址;RIP和DIP是私网地址,二者无须在同一网络中;

2)      RS接收到的请求报文的源地址为DIP,因此要响应给DIP;

3)      请求报文和响应报文都必须经由director;

4)      支持端口映射机制;

5)      RS可以使用任意OS;

http:stateless无状态

  session保持:

         session绑定:

                source ip hash

                COOKIE

  session集群:

  session服务器;

lvs scheduler

  静态方法:仅根据算法本身进行调度;

         RR:round robin,论调

         WRR:weighted rr,带权重的轮调;

         SH:source hash,实现session保持的机制;将来自于同一个ip的请求始终调度至同一RS;

         DH:destination hash,将对同一个目标的请求始终发往同一个RS;

  动态方法:根据算法及各RS的当前负载状态进行调度;

                Overhead=

         LC:Least Connection

                Overhead=Active*256+Inactive

         WLC:Weighted  LC

                Overhead=(Active*256+Inactive)/weight

         SED:Shortest  Expection  Delay

                Overhead=(Active+1)*256/weight

         NQ:Never Queue

                SED算法的改进;

         LBLC:Loality-Based  LC,即为动态的DH算法;

                正向代理情形下的cache  server调度;

         LBLCR:Locality-Based  Least-Connection with Replication,带复制功能的LBLC算法;

ipvs的集群服务:

  tcp, udp , ah , esp , ah_esp , sctp

1)      一个ipvs主机可以同时定义多个cluster service;

tcp ,udp

2)      一个cluster service上至少应该一个real server;

定义时:指明lvs-type,以及lvs scheduler;

       ipvsadm的用法:

              管理集群服务

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

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

                            service-address

                                   tcp: -t  ip:port

                                   udp: -u  ip:port

                                   fwn: -f  mark

                            -s scheduler

                                   默认为WLC

              管理集群服务中的RS

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

                     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

              清空和查看:

                     Ipvsadm   -C

                     Ipvsadm  -L|l  [options]

                            -n:numeric,基于数字格式显示地址和端口;

                            -c:connection,显示ipvs连接;

                            --states:统计数据;

                            --rate:速率;

                            --exact:精确值;

              保存和重载:

                     Ipvsadm –R

                     Ipvsadm  -S [-n]

              置零计数器:

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

 

lvs-nat演示:

实验环境:

       技术分享图片

       三台虚拟主机,一台作Director,另外两台作RS,在这里,Director的两块网卡,vip是nat模式,dip是自定义vmnet2模式,两台RS的网卡也是vmnet2模式;两台RS的网关都指向dip;

1.      打开Director的核心转发功能;

    技术分享图片

2.      设置Director的ip地址;

    技术分享图片

3.      两台RS主机的ip地址配置

        1)      RS1主机的配置:

            技术分享图片

            Note:这里在配置IP地址时在配置文件中直接指明了网关;如果没有指明用route命令添加路由;

            技术分享图片

        2)      RS2主机的ip配置;

            技术分享图片

4.      提供测试页面,并开启web服务;

        1)      RS1测试页面及服务开启;

          技术分享图片  

        2)      RS2测试页面及服务开启;

         技术分享图片

5.      在Director上添加规则;

   技术分享图片 

6.      访问测试;

    技术分享图片

由上可知,此次试验确实达到了负载均衡集群的目的。同时我们也可以在添加规则时,还另外的调度算法再进行测试,这里就不演示了。

 

Lvs-dr演示:

实验环境:

       技术分享图片

       准备三台虚拟主机,一台作Director,另外两台作RS,在Director上配置两个ip地址,DIP配置在ens33网卡上,vip配置在ens33 的别名上ens33:0,另外RS也同样配置两个地址,RIP配置在网卡eth0上,vip配置在lo的别名上lo:0;

       同时各RS要修改内核参数,来限制arp响应和通告的级别;

1.      配置Director的物理网卡DIP和物理网卡别名VIP;

    技术分享图片

2.      写一个脚本自动配置RS;

        1)      编辑执行RS1脚本;

            技术分享图片

            执行脚本后,查看配置:

         技术分享图片  

        2)      编辑执行RS2的脚本;

          技术分享图片

        执行脚本后查看配置:

          技术分享图片  

3.      使用ipvsadm定义集群规则;

    技术分享图片

4.      开启RS1和RS2的web服务;

5.      客户端测试;

    技术分享图片   

此次用的是带权重的rr算法。所以调用两次RS2,再调用一次RS1,实现了集群。

 

lvs(2)

FWM:FireWall  Mark

功用:借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将共享一组RS的集群服务统一进行定义;

通过FWN定义集群的方式:

1)      在director上的netfilter的mangle表的PREROUTING定义用于“打标”的规则;

iptables –t  mangle  -A  PREROUTING  -d  $vip  -p $protocol  --dports  $port  -j MARK --set-mark  #

$vip:VIP地址

$protocol:协议

$port:协议端口

2)      基于FWM定义集群服务;

Ipvsadm –A  -f  #  -s  scheduler

Ipvsadm  -a  -f #  -r  RS  …

 

演示:

1.      前两个步骤与上面的演示一样;

2.      定义iptables规则;

    技术分享图片

3.      定义集群规则;

   技术分享图片 

4.      开启RS1和RS2的web服务;

5.      测试

        1)      Web服务测试;

        技术分享图片

        2)      ssh服务测试;

        技术分享图片

由上可以看出,web服务和ssh服务都实现乐集群负载均衡;

 

lvs persistence:lvs的持久连接

       功能:无论ipvs使用何种调度方法,其都能实现来自于同一个client的请求始终定向至第一次调度时挑选出的RS;

              持久连接模板:独立于算法

                     Sourceip  rs  timer

       持久连接的实现方式:

              每端口持久:PPC,单服务器持久调度

              每FWM持久:PFWMC,单FWM持久调度

                     PORT  AFFINITY

              每客户端持久:PCC,单客户端持久调度

                     Director会将用户的任何请求都识别为集群服务,并向RS进行调度;

                            TCP:1-65535

                            UDP:1-65535

演示:lvs的持久连接;

1.      以上的测试是在做持久连接之前的测试,下面我们将在做持久连接之后,对比测试结果,前两个步骤跟上面的一样;

2.      定义集群规则;

   技术分享图片 

3.      测试;

定义持久连接之前;

    技术分享图片

定义持久连接之后;

    技术分享图片

    Note:以上是每端口持久,至于每FWM持久定义则先使用iptbales定义标记,在定义标记持久;每客户端持久,则在定义调度器时,把ip:port,port写成0,意义为所有端口;

 

HA

       SPOF:Single  Point  of  Failure

       director:在节点级别进行冗余:HA集群解决方案:keepalived

       realserver:让director对其做健康状态监测,并且根据检测的结果自动完成添加或移除等管理功能;

1.      基于协议层检查

Ip:icmp

传输层:检测端口的开放状态

应用层:请求获取关键性资源;

2.      检查频度

3.      状态判断

下线:ok --> failure --> failure -->failure

上线:failure --> ok --> ok

4.      back server,sorry server

示例脚本:

      技术分享图片

DR类型director示例:

      技术分享图片

DR类型RS示例:

      技术分享图片

 

实践任务:

1)      建立一个至少由两个RS组成的负载均衡集群:rs用于提供apache+php,mysql由单独的服务器实现;

2)      部署安装discuz_x3.1:分别基于rr/lc/sh算法调度,查看两台rs是否都接收到了请求;

部署环境说明:架设页面访问路径为/www/app/discuz,则需要将discuz_3.1部署于/www/app目录中,而后将/www/app/discuz创建为符号链接,链接至带版本号的目录上;多台RS路径均采用此方式;

3)      基于灰度的方式进行应用程序升级;

4)      尝试着写脚本自动进行灰度发步;

 

待续。


Linux自学笔记——linux cluster 之lvs


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • Linux系统高级网络配置:链路聚合
    链路聚合网卡的链路聚合就是将多块网卡连接起来,当一块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同 ... [详细]
author-avatar
dnjaskn
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有