精华内容
下载资源
问答
  • 这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 了解全局变量和局部变量之前,我们先来了解一下作用...
  • 现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核任何补丁,可以直接使用LVS提供...

    LVS介绍及工作原理图解

    老千

    一、LVS简介

    LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:http://www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

    使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

    二、LVS体系架构

    使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

    LVS的体系架构如图:

    LVS-AR

    LVS的各个层次的详细介绍:

    Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。

    Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。

    Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数 据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。

    从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为 Director Server的应用还不是很多,性能也不是很好。对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

    三、LVS基本工作原理

    LVS_pri

    1、当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间

    2、 PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链

    3、 IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链

    4、 POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

    四、LVS相关术语

    1、 DS:Director Server。指的是前端负载均衡器节点。

    2、 RS:Real Server。后端真实的工作服务器。

    3、 VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

    4、 DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

    5、 RIP:Real Server IP,后端服务器的IP地址。

    6、 CIP:Client IP,访问客户端的IP地址

    五、三种模式及原理

    一)LVS-NAT原理和特点

    多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

    LVS_NAT

    1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

    2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

    3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP

    4. POSTROUTING链通过选路,将数据包发送给Real Server

    5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP

    6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

    LVS-NAT模式的特性

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

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

    (3) 支持端口映射;

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

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

    缺陷:对Director Server压力会比较大,请求和响应都需经过director server

    二)LVS-DR原理和特点

    通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;

    LVS_DR

    1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

    2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

    3、 IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

    4、 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。

    5、 RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP

    6、 响应报文最终送达至客户端

    LVS-DR模式的特性

    (1) 确保前端路由器将目标IP为VIP的请求报文发往Director:

    (a) 在前端网关做静态绑定;

    (b) 在RS上使用arptables;

    (c) 在RS上修改内核参数以限制arp通告及应答级别;

    修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

    (2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;

    (3) RS跟Director要在同一个物理网络;

    (4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;

    (5) 不支持端口映射;

    缺陷:RS和DS必须在同一机房中

    三)LVS-Tun原理和特点

    在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)

    LVS-TUN

    1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。

    2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

    3、IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP

    4、 POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP

    5、 RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP

    6、响应报文最终送达至客户端

    LVS-Tun模式的特性

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

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

    (3) 请求报文要经由Director,但响应不能经由Director;

    (4) 不支持端口映射;

    (5) RS的OS得支持隧道功能;

    其实企业中最常用的是 DR 实现方式,而 NAT 配置上比较简单和方便,后续实践中会总结 DR 和 NAT 具体使用配置过程

    五、LVS的十种调度算法

    一)静态调度:

          ①RR(Round Robin):轮询调度

          轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。【提示:这里是不考虑每台服务器的处理能力】

         ②WRR:weight,加权轮询(以权重之间的比例实现在各主机之间进行调度)

         由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

    ③SH:source hashing,源地址散列。主要实现会话绑定,能够将此前建立的session信息保留了

    源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一个一个叙述。

    ④DH:Destination hashing:目标地址散列。把同一个IP地址的请求,发送给同一个server。

    目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    二)动态调度:

    ①LC(Least-Connection):最少连接

    最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。

    简单算法:active*256+inactive(谁的小,挑谁)

    ②WLC(Weighted Least-Connection Scheduling):加权最少连接。

    加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。

    简单算法:(active*256+inactive)/weight【(活动的连接数+1)/除以权重】(谁的小,挑谁)

    ③SED(Shortest Expected Delay):最短期望延迟

    基于wlc算法

    简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】

    ④NQ(never queue):永不排队(改进的sed)

    无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。

    ⑤LBLC(Locality-Based Least Connection):基于局部性的最少连接

    基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,不签主要用于Cache集群系统,因为Cache集群中客户请求报文的布标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个太服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

    基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

    ⑥LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接

          带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

    展开全文
  • 这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 了解全局变量和局部变量之前,我们先来了解一下作用...
  • 现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核任何补丁,可以直接使用LVS提供...

    一、LVS简介

    LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:http://www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

    使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

    二、LVS体系架构

    使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

    LVS的体系架构如图:

    LVS-AR

    LVS的各个层次的详细介绍:

    Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。

    Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。

    Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数 据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。

    从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为 Director Server的应用还不是很多,性能也不是很好。对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

    三、LVS基本工作原理

    LVS_pri

    1、当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间

    2、 PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链

    3、 IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链

    4、 POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

    四、LVS相关术语

    1、 DS:Director Server。指的是前端负载均衡器节点。

    2、 RS:Real Server。后端真实的工作服务器。

    3、 VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

    4、 DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

    5、 RIP:Real Server IP,后端服务器的IP地址。

    6、 CIP:Client IP,访问客户端的IP地址

    五、三种模式及原理

    一)LVS-NAT原理和特点

    多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

    LVS_NAT

    1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

    2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

    3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP

    4. POSTROUTING链通过选路,将数据包发送给Real Server

    5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP

    6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

    LVS-NAT模式的特性

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

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

    (3) 支持端口映射;

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

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

    缺陷:对Director Server压力会比较大,请求和响应都需经过director server

    二)LVS-DR原理和特点

    通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;

    LVS_DR

    1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

    2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

    3、 IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

    4、 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。

    5、 RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP

    6、 响应报文最终送达至客户端

    LVS-DR模式的特性

    (1) 确保前端路由器将目标IP为VIP的请求报文发往Director:

    (a) 在前端网关做静态绑定;

    (b) 在RS上使用arptables;

    (c) 在RS上修改内核参数以限制arp通告及应答级别;

    修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

    (2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;

    (3) RS跟Director要在同一个物理网络;

    (4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;

    (5) 不支持端口映射;

    缺陷:RS和DS必须在同一机房中

    三)LVS-Tun原理和特点

    在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)

    LVS-TUN

    1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。

    2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

    3、IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP

    4、 POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP

    5、 RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP

    6、响应报文最终送达至客户端

    LVS-Tun模式的特性

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

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

    (3) 请求报文要经由Director,但响应不能经由Director;

    (4) 不支持端口映射;

    (5) RS的OS得支持隧道功能;

    其实企业中最常用的是 DR 实现方式,而 NAT 配置上比较简单和方便,后续实践中会总结 DR 和 NAT 具体使用配置过程

    五、LVS的十种调度算法

    一)静态调度:

          ①RR(Round Robin):轮询调度

          轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。【提示:这里是不考虑每台服务器的处理能力】

         ②WRR:weight,加权轮询(以权重之间的比例实现在各主机之间进行调度)

         由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

    ③SH:source hashing,源地址散列。主要实现会话绑定,能够将此前建立的session信息保留了

    源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一个一个叙述。

    ④DH:Destination hashing:目标地址散列。把同一个IP地址的请求,发送给同一个server。

    目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    二)动态调度:

    ①LC(Least-Connection):最少连接

    最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。

    简单算法:active*256+inactive(谁的小,挑谁)

    ②WLC(Weighted Least-Connection Scheduling):加权最少连接。

    加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。

    简单算法:(active*256+inactive)/weight【(活动的连接数+1)/除以权重】(谁的小,挑谁)

    ③SED(Shortest Expected Delay):最短期望延迟

    基于wlc算法

    简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】

    ④NQ(never queue):永不排队(改进的sed)

    无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。

    ⑤LBLC(Locality-Based Least Connection):基于局部性的最少连接

    基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,不签主要用于Cache集群系统,因为Cache集群中客户请求报文的布标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个太服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

    基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

    ⑥LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接

          带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

     

    本文转自:http://www.178linux.com/89580

    展开全文
  • nginx配置结构清晰,层次分明,这得益于整个架构的模块化设计,文本将揭示配置文件如何被处理和应用。   整个配置文件解析后的结果如图这样存储。 一、解析的核心机制 nginx源码里,ngx_conf_t是解析的...

    源:http://www.open-open.com/lib/view/open1348820721338.html

     

     

     

    nginx配置结构清晰,层次分明,这得益于整个架构的模块化设计,文本将揭示配置文件如何被处理和应用。

    nginx源码分析之配置图解

     

    整个配置文件解析后的结果如图这样存储。

    一、解析的核心机制
    nginx源码里,ngx_conf_t是解析的关键结构体
    ngx_conf_handler函数里:

    01 /* set up the directive's configuration context */
    02 conf = NULL;
    03 /* direct指令,一般是core类型模块指令,比如 daemon, work_processes */
    04 if (cmd->type & NGX_DIRECT_CONF) {
    05     conf = ((void **) cf->ctx)[ngx_modules[i]->index]; /* 直接存储,比如 ngx_core_conf_t */
    06  
    07 /* main指令,比如 events, http,此时指向它的地址,这样才能分配数组指针,存储属于它的结构体们。 */
    08 } else if (cmd->type & NGX_MAIN_CONF) {
    09     conf = &(((void **) cf->ctx)[ngx_modules[i]->index]); /* 参考图片 */
    10  
    11 } else if (cf->ctx) {
    12     confp = *(void **) ((char *) cf->ctx + cmd->conf);
    13  
    14     /* 有移位的,因此http有三个部分,main, srv, conf,这个就为此而设计的,继续下面的sendfile指令 */
    15      if (confp) {
    16         conf = confp[ngx_modules[i]->ctx_index];
    17     }
    18 }
    19  
    20 rv = cmd->set(cf, cmd, conf);
    21  
    22 比如sendfile指令:
    23 { ngx_string("sendfile"),
    24   NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
    25                     |NGX_CONF_FLAG,
    26   ngx_conf_set_flag_slot,
    27   NGX_HTTP_LOC_CONF_OFFSET,  /* 这个对应上面理解,正因有这个offset,它才找到loc部分的配置 */
    28   offsetof(ngx_http_core_loc_conf_t, sendfile),
    29   NULL }

     二、配置的应用
    1、最简单形式,direct方式

    1 /* 定义获取配置文件的宏 */
    2 #define ngx_get_conf(conf_ctx, module)  conf_ctx[module.index]
    3  
    4 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
    5 if (ccf->master && ngx_process == NGX_PROCESS_SINGLE) {
    6     ngx_process = NGX_PROCESS_MASTER;
    7 }

    2、稍微复杂点形式,main方式

    1 /* 定义获取配置文件的宏,注意指针 */
    2 #define ngx_event_get_conf(conf_ctx, module)                                  \
    3              (*(ngx_get_conf(conf_ctx, ngx_events_module))) [module.ctx_index];
    4  
    5 ngx_epoll_conf_t  *epcf;
    6  
    7 epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);
    8  
    9 nevents = epcf->events;

    3、不简单的http配置

    01 /* 宏定义,r是什么,稍后解释 */
    02 #define ngx_http_get_module_loc_conf(r, module)  (r)->loc_conf[module.ctx_index]
    03  
    04 ngx_http_log_loc_conf_t  *lcf;
    05  
    06 lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
    07 ...
    08  
    09  
    10 /* r是请求,它是这么来的,在ngx_http_init_request函数里(ngx_http_request.c文件)*/
    11  
    12 r = ...;
    13 cscf = addr_conf->default_server;
    14  
    15 r->main_conf = cscf->ctx->main_conf;
    16 r->srv_conf = cscf->ctx->srv_conf;
    17 r->loc_conf = cscf->ctx->loc_conf;

    还有个要提的,http配置分main, src, loc,下级的配置可以覆盖上级,很明显,上级只是默认设置值而已。

    三、重提模块化设计
    学着用模块化的角度去看nginx的整体设计,一切以模块为核心,配置依赖于模块,即模块本身就携带着它的配置。正因为这样的设计的,配置文件的解析,使用非常简单。避免过多使用全局变量好像成为一种共识,但是在nginx世界里,全局变量可不少,每个模块都是个全局变量,为什么这样设计呢?因为模块之间是有依赖性的,所以需要互相访问。

    配置文件解析这块的代码极具借鉴,本文只管窥般分析了配置文件,不能剥夺读者阅读源码的享受,点到即止。

    展开全文
  • 之所以写这样的一个模块,是因为我们学习的真正目的一定是让自身的生活变得更好,让自己有能力去解决一些生活中的实际问题,而不是每一天都沉浸在 所谓的“学习”和“上进”中,知识变成智慧的过程一定是不断践行,...

    系列文章说明:

    本系列文章 主要是 使用 思维导图 和 思维模型 在“购房”方面的应用。之所以写这样的一个模块,是因为我们学习的真正目的一定是让自身的生活变得更好,让自己有能力去解决一些生活中的实际问题,而不是每一天都沉浸在 所谓的“学习”和“上进”中,知识变成智慧的过程一定是不断践行,摸爬滚打的过程。对于一般人来说,我们都会经历 买房的过程,到底怎样才能选到自己心仪的房子,这个过程中到底有哪些坑,于自己而言到底值不值得买,这个价格入手合适吗。。。,我们在这里就用学习过的思维模型和思维导图 来一起解读。学习就是要落地才有意义。

    因为精力有限,所以关注的地段也有限,因此该系列文章只针对 两个城市 北京和天津 进行 局部的分析,大家重在关注 分析过程和使用的思维模型即可。


    1 房屋属性 全解读

    这里使用思维导图进行展示,使用思维模型MECE法则解读(从3个角度 地段属性小区房屋属性房屋本身属性 由外到内依次分析),展示效果如下:

    2 案例分析

    针对房子进行分析,这里拿贝壳网上的案例来说:这里以住宅为例均为70年产权

    2.1 一个北京通州区九棵树板块 的二手房分析案例

    这里从个角度来看:地段属性、小屋房屋属性、房屋本身属性。

    2.1.1 地段属性

    @1 时间:二手房,2007年建设,到2021年已有14年房龄。

    @2 地段:位处 北京市 通州区 梨园板块 新翠景园 和龙鼎园(北京东五环到六环之间)。

    @3 周边交通:

    • 已有:地铁 八通线 九棵树,七号线 万盛东 中间,2km范围内;门口公交807路公交直达国贸。
    • 规划:通州环线M102号线,交叉线M104号线 交界处 地铁站。

    @4 周边商业配套:

    • 已有:2km范围内 美食、商铺、日用品、买菜、买水果。
    • 规划:东侧 盛世天玺 商业中心 规划建设,南部 2km左右 环球影城二期 规划建设。

    @5 周边学校:

    • 已有:实验一小 梨园中学,龙鼎园北师大幼儿园。。。
    • 规划:盛世天玺 附近 教育用地 配套 九年一贯制学校(首师大附属学校/北师大附属学校)。

    @6 周边避坑:

    • 确认合理范围内没有养老院、精神病院、医院停尸间。
    • 确认合理范围内没有火葬场、殡仪馆、殡葬物品店、公墓。

    2.1.2 小区房屋属性

    基本属性:

    • 位置:处在楼栋中间位置,前楼6层不需遮挡,不直对小区各个门口,不临街。
    • 供暖:电供暖 模式,非集体供暖;优势:可根据需要自动调节温度,劣势:贵一些。
    • 物业:自持,业主委员会;费用 1.6元/月/平
    • 车位:租金 地上150元/月,5年后 规划新车位200个 在新小区。
    • 朝向:南北/南

    小区位置避坑:

    • 确认 旁边没有高压电线杆,小区电箱 处在合理范围。
    • 确认 楼间距在合理范围内。
    • 确认 水系部分距离楼栋在合理范围外(挨着水系意味着夏天蚊子多)
    • 不存在遮光情况

    2.1.3 房屋本身属性

    • 水电:民水民电
    • 梯户比:1梯3户 或者 1梯2户
    • 楼型:板楼
    • 燃气:有
    • 公摊面积:***
    • 装修:一般

    2.2 一个天津市北辰区域小淀镇板块 的一手房分析案例

    这里从个角度来看:地段属性、小屋房屋属性、房屋本身属性。

    2.2.1 地段属性

    @1 时间:一手房,2019年建设,到2021年12月交房。

    @2 地段:位处 天津市 北辰区 外环线内(天津分 内环 中环 外环) 融创津宸壹号、新城樾风华 和 山西能投。

    @3 周边交通:

    • 已有:地铁3号线 丰产河(距离新城的盘 1.5km左右;融创和山西能投的盘 3km左右)
    • 规划:地铁7号线2期、10号线2期(目前均一期在建),北辰站 高铁6km左右(地图距离),北部新区规划建设。

    @4 周边商业配套:

    • 已有:新城的盘是挨着小淀镇的,附近镇里的配套均可享受;融创和山西能投的盘 不挨边。
    • 规划:永旺大商场、星河国际cocopark 均4.5km左右;

    @5 周边学校:

    • 已有:小淀小学 小淀中学。
    • 规划:融创的盘东北部位置 会有一块教育用地规划,目前未签约。

    @6 周边避坑:

    • 确认合理范围内没有养老院、精神病院、医院停尸间。
    • 确认合理范围内没有火葬场、殡仪馆(5km外)、殡葬物品店、公墓(5km外)。

    2.2.2 小屋房屋属性

    基本属性:

    • 位置:处在楼栋前排位置,不被遮挡,临未来商业街。
    • 供暖:均为 地暖模式,集中供暖。
    • 物业:融创物业 费用 3.6-3.7元/月/平;新城物业3元/月/平;山西能投暂不确定
    • 车位:车位管理费 150元/月;(在天津购买车位 更多的是 无产权的,正规车位一般是70年产权有本且可买卖)
    • 朝向:南北

    小区位置避坑:

    • 确认 旁边没有高压电线杆,小区电箱 处在合理范围。
    • 确认 楼间距在合理范围内。
    • 不存在遮光情况

    2.2.3 房屋本身属性

    • 水电:民水民电
    • 梯户比:1梯2户 或者 2梯4户
    • 楼型:板楼
    • 燃气:有
    • 公摊面积:洋房80%左右,小高 高层一般70%-80%
    • 装修:毛坯
    展开全文
  • 之所以写这样的一个模块,是因为我们学习的真正目的一定是让自身的生活变得更好,让自己有能力去解决一些生活中的实际问题,而不是每一天都沉浸在 所谓的“学习”和“上进”中,知识变成智慧的过程一定是不断践行,...
  • 之所以写这样的一个模块,是因为我们学习的真正目的一定是让自身的生活变得更好,让自己有能力去解决一些生活中的实际问题,而不是每一天都沉浸在 所谓的“学习”和“上进”中,知识变成智慧的过程一定是不断践行,...
  • 之所以写这样的一个模块,是因为我们学习的真正目的一定是让自身的生活变得更好,让自己有能力去解决一些生活中的实际问题,而不是每一天都沉浸在 所谓的“学习”和“上进”中,知识变成智慧的过程一定是不断践行,...
  • 杂学

    2018-08-06 19:45:02
    图解计算机网络学习 java8重学 如何保持专注,如何提高效率 抽取公共模块 计算机操作系统 linux学习 学习–》思考–》实践–》好基础,项目的思考,效率提升,知行合一, 知识–》方法–》精神 需求分析-》系统...
  • 可以用VT和Telnet控件在应用程序中实现终端仿真功能。PowerTCP Emulation Tool是一个ActiveX组件,它...· 可用于事件驱动的和脚本编写的(模块化)应用程序。 · 包含免费版权。 包含封装类,可以方便地集成到Vis
  • Python_Basic-源码

    2021-05-18 09:18:38
    亁颐堂现任明教教主Python基础课V3版本 本课程是专为网工开发的Python基础课程,融入大量网络实战内容 课程目录 报名课程请咨询亁颐堂官方网站 Python语言介绍 ...对Python工作原理做了大量而详细的图解:
  • 但是,如果您对CommonsChunkPlugin的打包原理比较感兴趣,可以你阅读我的,其以图解的方式进行了详细论述。但是,如果你最终是为了学习的WebPack全家桶的内容,我强烈建议您阅读一下,其包含了Webpack常用插件的使用...
  • 对于后端开发的童鞋来说,计算机网络的重要性不亚于语言基础,毕竟平时开发经常会和网络交道,比如:抓个包等等。所以对这一块知识点的准备还是要抱着敬畏之心,不要放过任何一个漏网之题。下面分享下我的学习过程...
  • ER 图解器界面与Hora对话框可以增加新的图表和直接源自图表的功能键。 PL/SQL Debugger PL/SQL调试器观测程序、功能(单体或并发)和Trigger的运行情况,可以保证编码运行正常和修复错误。 您可以使用Hora建立模块以...
  • 电子设计.doc

    2019-05-28 11:58:28
    0266、采用PROG-110制作的铃器电路 0267、超声波测距 0268、超声波在超声波测距中的应用 0269、程控信号发生器的设计 0270、出租车计价器论文 0271、大功率开关电源中功率MOSFET的驱动技术 0272、单片机大屏幕温...
  • asp.net知识库

    2015-06-18 08:45:45
    Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...
  • 3.2.5 在控制台应用程序中添加模块并调试执行 3.3 创建窗体应用程序 3.4 打印程序代码 本章重点整理 本章习题 第4章 基本数据处理 4.1 变量与数据类型 4.1.1 变量与常量 4.1.2 数据类型 4.2 变量与常量声明 4.2.1 ...
  • 3.2.5 在控制台应用程序中添加模块并调试执行 3.3 创建窗体应用程序 3.4 打印程序代码 本章重点整理 本章习题 第4章 基本数据处理 4.1 变量与数据类型 4.1.1 变量与常量 4.1.2 数据类型 4.2 变量与常量声明 4.2.1 ...
  • 智普教育python培训就业班python随堂视频教程 27 字符串与两重循环习题2图解.flv 智普教育python培训就业班python随堂视频教程 28 字符串切片.flv 智普教育python培训就业班python随堂视频教程 29 字符串切片习题...
  • TCP粘包 数据包:我只是犯了每个数据包都会犯的错 |硬核图解 硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别? 动图图解!既然IP层会分片,为什么TCP层也还要分段? 骚话连篇 程序员防...
  • 、Python字符串相似性算法库、PyLaia:面向手写文档分析的深度学习工具包、TextFooler:针对文本分类/推理的对抗文本生成模块、Haystack:灵活、强大的可扩展问答(QA)框架、中文关键短语抽取工具。 1. textfilter: ...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

打模块图解