您的位置:新葡亰496net > 电脑系统 > 新葡亰496net负载均衡原理,实现负载均衡原理及

新葡亰496net负载均衡原理,实现负载均衡原理及

发布时间:2019-08-31 19:13编辑:电脑系统浏览(107)

    Linux集群

    Linux集群(cluster)就是一组Linux计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点(node)。一个理想的集群,用户是不会意识到集群系统底层的节点的,在他们看来,集群是一个系统,而非多个计算机系统,并且集群系统的管理员可以随意增加和删改集群系统的节点。
      Linux集群系统的优点主要有4方面:
    1、易于扩展,管理员可很方便的增加或删除集群系统中的节点。
    2、高可用性,当集群中某一个节点失效时,其负责的任务可以传递给其他节点,有效避免单点故障。
    3、高性能,负载均衡的集群系统能够承担极大的并发客户请求。
    4、高性价比,可以使用相对廉价的硬件构造出高性能的系统。
      常见的Linux集群类型包括:
    1、LB:Load Balancing,负载均衡集群
    负载均衡集群中有调度器(Director),它处在多台内部服务器的上层,根据定义的调度方式从下层的服务器组中选择一台来响应客户端发送的请求。
    2、HA:High Availability,高可用性集群
    顾名思义就是服务的可用性比较高,当某台服务器故障后不会造成所提供的服务中断,集群自动将客户的访问请求转交给一个正常工作的服务器。
    3、HP:Hight Performance,高性能
    高性能的集群是当某一项任务计算量非常大的时候,由一个计算机集群共同来完成这项任务,这种 处理方式我们称为并行处理机制。一般高性能集群用于科研工作方面。
      常见的Linux集群扩展类型(组建方式)有:
    1、scale up(纵向扩展):通过增加硬件资源,即增加更好的设备来满足性能消耗的需求。但是此方式性价比很低。
    2、scale out(横向扩展):通过硬件或软件的方式,将由单一服务器负责的业务需求转为一组节点服务器来进行处理,此种方式易于扩展且性价比高。

        负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。

        负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。

    LVS,Linux Virtual Server

    初步认识Linux Cluster后,我们进一步介绍负载均衡集群技术LVS(Linux Virtual Server)。

      LVS是章文嵩博士发起的自由软件项目,它的官方站点是
      LVS采用三层结构:调度器、服务器池、共享存储,结构如下图:

    新葡亰496net 1
    负载调度器(load balancer/Director):由一台或多台负载调度器组成,主要作用类似一个路由器,将用户请求分发给服务器池上的real server;
    服务器池(server pool/Realserver):一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。
    共享存储(shared storage):为服务器池提供一个共享的存储区,能使得服务器池拥有相同的内容,提供相同的服务。

      LVS需要在内核的TCP/IP协议栈对数据流进行过滤筛选,这就需要有内核的模块来支持,而这样的过滤转发规则又是由用户进行定义的,我们可以认为LVS是两段式的架构,在内核空间中工作的是”ipvs”,而在用户空间中工作的,用来定义集群服务规则的是”ipvsadm”。

      LVS集群类型相关术语:

    术语 解释
    Load Balancer 或 Director 负载调度器
    RS 或 Real Server 真实服务器,提供服务的真实服务器
    VIP 虚拟IP地址,客户端访问的集群地址
    RIP 真实服务器的IP地址,提供资源的服务器
    DIP 调度器的IP地址
    CIP 客户端IP地址

     

     

     

     

     

     

      LVS集群的类型:

    lvs-nat:修改请求报文的目标IP;MASQUERADE类型
    lvs-dr(direct routing):重新封装新的MAC地址,默认使用的类型; GATEWAY类型
    lvs-tun(ip tunneling):在原请求IP报文之外新加一个IP首部;IPIP类型
    lvs-fullnat:修改请求报文的源和目标IP

    lvs-nat
    多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT来实现转发。
    实现要点:
    (1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
    (2)请求报文和响应报文都必须经由Director转发;极高负载的场景中,Director可能成为系统瓶颈;
    (3)支持端口映射,可修改请求报文的目标PORT;
    (4)VS必须是Linux系统,RS可以是任意系统
    图解:
    

         新葡亰496net 2

    1、客户端访问集群的VIP,请求WEB资源(请求报文:源地址为CIP,目标地址为VIP);
    2、Director收到客户端的请求报文,会修改请求报文中的目标地址(VIP)为RIP,并且将请求根据相应的调度算法送往后端WEB服务器(请求报文:源地址CIP,目标地址为RIP);
    3、WEB服务器收到请求,检查报文是访问自己的而自己也提供WEB服务,就会响应这个请求报文,并发送给Director(响应报文:源地址RIP,目标地址CIP);
    4、Director收到WEB服务器的响应报文,会根据自己内部的追踪机制,判断出用户访问的是VIP,此时会修改源地址为VIP并响应客户端请求(响应报文:源地址VIP,目标地址CIP)。

     nat模型优劣势:
      优势:节点服务器使用私有IP地址,与负载调度器位于同一个物理网络,安全性比DR模式和TUN模式要高。
      劣势:调度器位于客户端和集群节点之间,并负责处理进出的所有通信(压力大的根本原因),大规模应用场景中,调度器容易成为系统瓶颈。

    lvs-dr:lvs的默认模式
    通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
    要点:
    (1)Director和各RS都得配置使用VIP;
    (2)确保前端路由器将目标IP为VIP的请求报文发往Director:通过在RS上修改内核参数以限制arp通告及应答级别(arp_announce及arp_ignore);
    (3)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;VIP配置在DR上的时候,应该是在eth0:0上,在RS上配置VIP的时候,就必须是lo:0了,否则达不到让RS不响应VIP的ARP通告的效果。
    (4)RS跟Director要在同一个物理网络即同一广播域;
    (5)请求报文要经由Director,但响应不能经由Director,而是由RS通过网关直接发往Client;
    (6)不支持端口映射
    图解:
    

          新葡亰496net 3

    1、客户端CIP的请求发送给Director调度器的VIP;
    2、Director调度器收到客户端的请求包后,将数据包的MAC地址改成Director调度器选择的某一台RS的MAC地址,并通过交换机(数据链路层)发送给RS服务器(因为MAC地址是RS的MAC地址,所以,RS可以接收到该数据报),注意:此时数据包的目的及源IP地址没有发生任何改变;
    3、 (1) RS的数据链路层收到发送来的数据报文请求后,会从链路层往上传给IP层,此时IP层需要验证请求的目标IP地址。因为包的目标IP(即VIP)并不是像常规数据报那样为RS的本地IP,而仅仅目的MAC地址是RS的。所以,在RS上需要配置一个VIP的LoopbackDevice,是因为LoopbackDevice是服务器本地使用的网络接口,对外是不可见的,不会跟Director的VIP冲突;
    (2) RS处理数据包完成后,将应答直接返回给客户端(源IP为VIP,目标IP为CIP),响应的数据报不再经过Director调度器。因此如果对外提供LVS负载均衡服务,则RS需要连上互联网才能将应答包返回给客户端。RS最好为带公网IP的服务器,这样可以不经过网关直接回应客户;如果多个RS使用了同一网关出口,网关会成为LVS架构的瓶颈,会大大降低LVS的性能。

     dr模型优劣势:
      优势:负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端,大大提高了服务器并发能力。
      劣势:(1) LVS-RS间必须在同一个VLAN; (2) RS上绑定VIP,风险大。

    lvs-tun:
    转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)。
    要点:
    (1)DIP,VIP,RIP都应该是公网地址;
    (2)RS的网关不能,也不可能指向DIP,在RS的lo别名网卡上配置vip地址;
    (3)请求报文要经由Director,但响应不能经由Director;
    (4)不支持端口映射;
    (5)RS的OS得支持隧道功能
    图解:
    

          新葡亰496net 4

    1、用户发送请求到Director的VIP请求服务;
    2、当用户请求到达Director的时候,根据调度算法选择一台RS进行转发,这时使用隧道(tun)封装两个IP首部,此时源IP是DIP,目标IP是RIP;
    3、当RS接收到数据报后,看到外层的IP首部,目标地址是自己,就会拆开封装,解析完毕后,发送响应报文,源IP是VIP,目标IP是CIP。

     tun模型优劣势:

      优势:实现了异地容灾,避免了一个机房故障导致网站无法访问。
      劣势:RS配置复杂。

    lvs-fullnat:
    通过同时修改请求报文的源IP地址和目标IP地址进行转发
    要点:
    (1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
    (2)RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;
    (3)请求和响应报文都经由Director;
    (4)支持端口映射;
    (5)lvs-fullnat型lvs默认不支持需更换支持的内核
    图解:
    

           新葡亰496net 5

    1、客户端将请求发送给Director的VIP请求服务;
    2、VIP通过调度算法,将请求发送给后端的RS,这个时候源地址改成DIP,目标地址改成RIP;
    3、RS接收到请求后,由于源地址是DIP,则一定会对DIP进行回应;
    4、Director收到RS的响应后,修改数据报的源地址为VIP,目标地址为CIP进行响应。

    注意:此调度方式还没有正式被Linux官方录入系统标准库,所以如果向使用此模式,需要去lvs官网下载源码,并且需要重新编译系统内核才可使用。

      LVS的调度算法:

    静态调度算法:根据算法本身进行调度
    rr:roundrobin,轮询,调度器将外部请求轮流分配到集群中的节点中;
    wrr:Weighted RR,加权轮询,调度器根据事先设置的权重来分配外部请求到集群中的节点;
    sh:Source Hashing,实现session sticky,源IP地址hash,将来自同一个IP的请求始终发往第一次挑中的真实服务器IP,从而实现会话绑定;
    dh:Destination Hashing,目标地址hash,将发往同一个目标地址的请求始终转发至第一次挑中的真实服务器IP,典型使用场景是正向代理缓存场景中的负载均衡
    
    动态调度算法:根据真实服务器当前的负载状态及调度算法进行调度
    lc:least connections,调度器通过lc调度算法动态地将网络请求调度到已建立连接最少的服务器上;
    wlc:Weighted Least Connections,调度器通过wlc调度算法根据事先设置的权重优化负载均衡调度,具有较高权重的服务器将承受较大比例的连接请求;
    sed:Shortest Expection Delay,在wlc基础上改进,Overhead=(activeconns 1)*256/权重;
    nq:Never Queue Scheduling,如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空闲;
    lblc:locality-based least-connection,基于地址的最小连接数调度,将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑;
    lblcr:Locality-Based Least Connections with Replication,带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与lblc算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而lblc算法维护从一个目标IP地址到一台服务器的映射。
    

    一、负载均衡LVS基本介绍

        LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。

        LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

     

    一、负载均衡LVS基本介绍

    LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。

    LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是http://www.linuxvirtualserver.org

    现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

    一、负载均衡LVS基本介绍

    LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。

    LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网是  现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

    一、负载均衡LVS基本介绍

        LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。

        LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

     

    二、LVS的基本工作原理

    新葡亰496net 6

    1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
    2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
    3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
    4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

    二、LVS的基本工作原理

    新葡亰496net 7

    1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
    2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
    3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
    4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

    二、LVS的基本工作原理

    新葡亰496net 8

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

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

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

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

    二、LVS的基本工作原理

    新葡亰496net 9

    1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
    2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
    3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
    4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

     

    三、LVS的组成

    LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
      2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

     

    三、LVS的组成

    LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
    2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

    三、LVS的组成

    LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1.ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

    2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

    三、LVS的组成

    LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
      2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

     

    四、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相关术语

    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相关术语

    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相关术语

    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原理和特点

    1. 重点理解NAT方式的实现原理和数据包的改变。

    新葡亰496net 10

    (a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
    (b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
    (d). POSTROUTING链通过选路,将数据包发送给Real Server
    (e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
    (f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

    2. LVS-NAT模型的特性

    • RS应该使用私有地址,RS的网关必须指向DIP
    • DIP和RIP必须在同一个网段内
    • 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈
    • 支持端口映射
    • RS可以使用任意操作系统
    • 缺陷:对Director Server压力会比较大,请求和响应都需经过director server

     

    五、LVS/NAT原理和特点

    五、LVS/NAT原理和特点

    1. 重点理解NAT方式的实现原理和数据包的改变。

    新葡亰496net 11

    (a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。
    (b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    (c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP。
    (d). POSTROUTING链通过选路,将数据包发送给Real Server。
    (e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP。
    新葡亰496net负载均衡原理,实现负载均衡原理及安装配置详解。(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

    2. LVS-NAT模型的特性

    • RS应该使用私有地址,RS的网关必须指向DIP

    • DIP和RIP必须在同一个网段内

    • 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈

    • 支持端口映射

    • RS可以使用任意操作系统

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



    五、LVS/NAT原理和特点

    1. 重点理解NAT方式的实现原理和数据包的改变。

    新葡亰496net 12

    (a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
    (b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
    (d). POSTROUTING链通过选路,将数据包发送给Real Server
    (e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
    (f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

    2. LVS-NAT模型的特性

    • RS应该使用私有地址,RS的网关必须指向DIP
    • DIP和RIP必须在同一个网段内
    • 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈
    • 支持端口映射
    • RS可以使用任意操作系统
    • 缺陷:对Director Server压力会比较大,请求和响应都需经过director server

     

    六、LVS/DR原理和特点

    1. 重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址

    新葡亰496net 13 

    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

    (d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
    (e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
    (f) 响应报文最终送达至客户端

    2. LVS-DR模型的特性

    • 特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
    • RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
    • RS跟Director Server必须在同一个物理网络中
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持地址转换,也不支持端口映射
    • RS可以是大多数常见的操作系统
    • RS的网关绝不允许指向DIP(因为我们不允许他经过director)
    • RS上的lo接口配置VIP的IP地址
    • 缺陷:RS和DS必须在同一机房中

    3. 特点1的解决方案:

    • 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server
    • 存在问题:用户未必有路由操作权限,因为有可能是运营商提供的,所以这个方法未必实用
    • arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。这是由iptables提供的
    • 修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

    1. 重点理解NAT方式的实现原理和数据包的改变

    新葡亰496net 14

    (a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
    (b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    新葡亰496net,(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
    (d). POSTROUTING链通过选路,将数据包发送给Real Server
    (e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
    (f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

    六、LVS/DR原理和特点

    1.重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址

    新葡亰496net 15
    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址。
    (d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
    (e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP。
    (f) 响应报文最终送达至客户端。

    2. LVS-DR模型的特性

    • 特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS

    • RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问

    • RS跟Director Server必须在同一个物理网络中

    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

    • 不支持地址转换,也不支持端口映射

    • RS可以是大多数常见的操作系统

    • RS的网关绝不允许指向DIP(因为我们不允许他经过director)

    • RS上的lo接口配置VIP的IP地址

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

    3. 特点1的解决方案:

    • 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server

    • 存在问题:用户未必有路由操作权限,因为有可能是运营商提供的,所以这个方法未必实用

    • arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。这是由iptables提供的

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

    六、LVS/DR原理和特点

    1. 重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址

    新葡亰496net 16 

    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

    (d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
    (e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
    (f) 响应报文最终送达至客户端

    2. LVS-DR模型的特性

    • 特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
    • RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
    • RS跟Director Server必须在同一个物理网络中
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持地址转换,也不支持端口映射
    • RS可以是大多数常见的操作系统
    • RS的网关绝不允许指向DIP(因为我们不允许他经过director)
    • RS上的lo接口配置VIP的IP地址
    • 缺陷:RS和DS必须在同一机房中

    3. 特点1的解决方案:

    • 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server
    • 存在问题:用户未必有路由操作权限,因为有可能是运营商提供的,所以这个方法未必实用
    • arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。这是由iptables提供的
    • 修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

     

    七、LVS/Tun原理和特点

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

    新葡亰496net 17

    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
    (d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
    (e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
    (f) 响应报文最终送达至客户端

    LVS-Tun模型特性

    • RIP、VIP、DIP全是公网地址
    • RS的网关不会也不可能指向DIP
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持端口映射
    • RS的系统必须支持隧道

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

    2. LVS-NAT模型的特性

    • RS应该使用私有地址,RS的网关必须指向DIP
    • DIP和RIP必须在同一个网段内
    • 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成-
      为性能瓶颈
    • 支持端口映射
    • RS可以使用任意操作系统
    • 缺陷:对Director Server压力会比较大,请求和响应都需经过director server

    七、LVS/Tun原理和特点

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

    新葡亰496net 18

    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP。
    (d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP。
    (e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP。
    (f) 响应报文最终送达至客户端。

    LVS-Tun模型特性

    • RIP、VIP、DIP全是公网地址

    • RS的网关不会也不可能指向DIP

    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

    • 不支持端口映射

    • RS的系统必须支持隧道

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

    七、LVS/Tun原理和特点

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

    新葡亰496net 19

    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
    (d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
    (e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
    (f) 响应报文最终送达至客户端

    LVS-Tun模型特性

    • RIP、VIP、DIP全是公网地址
    • RS的网关不会也不可能指向DIP
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持端口映射
    • RS的系统必须支持隧道

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

     

    八、LVS的八种调度算法

    1. 轮叫调度 rr
    这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

    2. 加权轮叫 wrr
    这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

    3. 最少链接 lc
    这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1 

    4. 加权最少链接 wlc
    这个算法比 lc 多了一个权重的概念。

    5. 基于局部性的最少连接调度算法 lblc
    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

    6. 复杂的基于局部性最少的连接算法 lblcr
    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

    7. 目标地址散列调度算法 dh
    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

    8. 源地址散列调度算法 sh
    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

    六、LVS/DR原理和特点

    八、LVS的八种调度算法

    1.轮叫调度 rr

    这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

    2. 加权轮叫 wrr

    这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

    3. 最少链接 lc

    这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1

    4. 加权最少链接 wlc

    这个算法比 lc 多了一个权重的概念。

    5. 基于局部性的最少连接调度算法 lblc

    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

    6. 复杂的基于局部性最少的连接算法 lblcr

    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

    7. 目标地址散列调度算法 dh

    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

    8. 源地址散列调度算法 sh

    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

    八、LVS的八种调度算法

    1. 轮叫调度 rr
    这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

    2. 加权轮叫 wrr
    这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

    3. 最少链接 lc
    这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1 

    4. 加权最少链接 wlc
    这个算法比 lc 多了一个权重的概念。

    5. 基于局部性的最少连接调度算法 lblc
    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

    6. 复杂的基于局部性最少的连接算法 lblcr
    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

    7. 目标地址散列调度算法 dh
    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

    8. 源地址散列调度算法 sh
    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

     

    九、实践LVS的NAT模式

    1、实验环境

    三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(172.16.254.200) 和一个内网ip(192.168.0.8),两个 real server 上只有内网 ip (192.168.0.18) 和 (192.168.0.28),并且需要把两个 real server 的内网网关设置为 director 的内网 ip(192.168.0.8)

    2、安装和配置

    两个 real server 上都安装 nginx 服务
    # yum install -y nginx
    
    Director 上安装 ipvsadm
    # yum install -y ipvsadm
    

    Director 上编辑 nat 实现脚本

    # vim /usr/local/sbin/lvs_nat.sh
    # 编辑写入如下内容:
    #! /bin/bash
    # director服务器上开启路由转发功能:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 关闭 icmp 的重定向
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
    # director设置 nat 防火墙
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    # director设置 ipvsadm
    IPVSADM='/sbin/ipvsadm'
    $IPVSADM -C
    $IPVSADM -A -t 172.16.254.200:80 -s wrr
    $IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.18:80 -m -w 1
    $IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.28:80 -m -w 1
    

    保存后,在 Director 上直接运行这个脚本就可以完成 lvs/nat 的配置

    /bin/bash /usr/local/sbin/lvs_nat.sh
    

    查看ipvsadm设置的规则

    ipvsadm -ln
    

    3、测试LVS的效果

    通过浏览器测试2台机器上的web内容 。为了区分开,我们可以把 nginx 的默认页修改一下:

    在 RS1 上执行
    # echo "rs1rs1" >/usr/share/nginx/html/index.html
    
    在 RS2 上执行
    # echo "rs2rs2" >/usr/share/nginx/html/index.html
    

    注意,切记一定要在两台 RS 上设置网关的 IP 为 director 的内网 IP。

    1. 重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址

    新葡亰496net 20

    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
    (d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
    (e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
    (f) 响应报文最终送达至客户端

    九、实践LVS的NAT模式

    1、实验环境

    三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(192.168.21.250) 和一个内网ip(10.10.172.190),两个 real server 上只有内网 ip (10.10.172.192) 和 (10.10.172.193),并且需要把两个 real server 的内网网关设置为 director 的内网 ip(10.10.172.191)

    2、安装和配置

    两个 real server 上都安装 nginx 服务
    # yum install -y epel-release
    # yum install -y nginx
     
    Director 上安装 ipvsadm
    # yum install -y ipvsadm
    

    Director 上编辑 nat 实现脚本

    # vim /data/sh/lvs_nat.sh
    # 编辑写入如下内容:
    #! /bin/bash
    # director服务器上开启路由转发功能:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 关闭 icmp 的重定向
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
    # director设置 nat 防火墙
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -A POSTROUTING -s 10.10.172.0/24 -j MASQUERADE
    # director设置 ipvsadm
    IPVSADM='/sbin/ipvsadm'
    $IPVSADM -C
    $IPVSADM -A -t 192.168.21.250:80 -s wrr
    $IPVSADM -a -t 192.168.21.250:80 -r 10.10.172.193:80 -m -w 100
    $IPVSADM -a -t 192.168.21.250:80 -r 10.10.172.194:80 -m -w 100
    

    保存后,在 Director 上直接运行这个脚本就可以完成 lvs/nat 的配置

    /bin/bash /data/sh/lvs_nat.sh
    

    查看ipvsadm设置的规则

    ipvsadm -Ln
    

    3、测试LVS的效果

    通过浏览器测试2台机器上的web内容  。为了区分开,我们可以把 nginx 的默认页修改一下:

    在 RS1 上执行
    # echo "rs1rs1" >/usr/share/nginx/html/index.html
     
    在 RS2 上执行
    # echo "rs2rs2" >/usr/share/nginx/html/index.html
    

    注意,切记一定要在两台 RS 上设置网关的 IP 为 director 的内网 IP。

    九、实践LVS的NAT模式

    1、实验环境

    三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(172.16.254.200) 和一个内网ip(192.168.0.8),两个 real server 上只有内网 ip (192.168.0.18) 和 (192.168.0.28),并且需要把两个 real server 的内网网关设置为 director 的内网 ip(192.168.0.8)

    2、安装和配置

    两个 real server 上都安装 nginx 服务
    # yum install -y nginx
    
    Director 上安装 ipvsadm
    # yum install -y ipvsadm
    

    Director 上编辑 nat 实现脚本

    # vim /usr/local/sbin/lvs_nat.sh
    # 编辑写入如下内容:
    #! /bin/bash
    # director服务器上开启路由转发功能:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 关闭 icmp 的重定向
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
    # director设置 nat 防火墙
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    # director设置 ipvsadm
    IPVSADM='/sbin/ipvsadm'
    $IPVSADM -C
    $IPVSADM -A -t 172.16.254.200:80 -s wrr
    $IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.18:80 -m -w 1
    $IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.28:80 -m -w 1
    

    保存后,在 Director 上直接运行这个脚本就可以完成 lvs/nat 的配置

    /bin/bash /usr/local/sbin/lvs_nat.sh
    

    查看ipvsadm设置的规则

    ipvsadm -ln
    

    3、测试LVS的效果

    通过浏览器测试2台机器上的web内容 http://172.16.254.200 。为了区分开,我们可以把 nginx 的默认页修改一下:

    在 RS1 上执行
    # echo "rs1rs1" >/usr/share/nginx/html/index.html
    
    在 RS2 上执行
    # echo "rs2rs2" >/usr/share/nginx/html/index.html
    

    注意,切记一定要在两台 RS 上设置网关的 IP 为 director 的内网 IP。

     

    十、实践LVS的DR模式

    1、实验环境

    三台机器:

    • Director节点:  (eth0 192.168.0.8  vip eth0:0 192.168.0.38)
    • Real server1: (eth0 192.168.0.18 vip lo:0 192.168.0.38)
    • Real server2: (eth0 192.168.0.28 vip lo:0 192.168.0.38)

    2、安装

    两个 real server 上都安装 nginx 服务
    # yum install -y nginx
    
    Director 上安装 ipvsadm
    # yum install -y ipvsadm
    

    3、Director 上配置脚本

    # vim /usr/local/sbin/lvs_dr.sh
    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/sbin/ipvsadm
    vip=192.168.0.38
    rs1=192.168.0.18
    rs2=192.168.0.28
    ifconfig eth0:0 down
    ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev eth0:0
    $ipv -C
    $ipv -A -t $vip:80 -s wrr 
    $ipv -a -t $vip:80 -r $rs1:80 -g -w 3
    $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
    

    执行脚本:

    # bash /usr/local/sbin/lvs_dr.sh
    

    4、在2台 rs 上配置脚本:

    # vim /usr/local/sbin/lvs_dr_rs.sh
    #! /bin/bash
    vip=192.168.0.38
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    

    rs 上分别执行脚本:

    bash /usr/local/sbin/lvs_dr_rs.sh
    

    5、实验测试

    测试方式同上,浏览器访问

    注意:在 DR 模式下,2台 rs 节点的 gateway 不需要设置成 dir 节点的 IP 。

    2. LVS-DR模型的特性

    • 特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
      RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
    • RS跟Director Server必须在同一个物理网络中
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持地址转换,也不支持端口映射
    • RS可以是大多数常见的操作系统
    • RS的网关绝不允许指向DIP(因为我们不允许他经过director)
    • RS上的lo接口配置VIP的IP地址
    • 缺陷:RS和DS必须在同一机房中

    十、实践LVS的DR模式

    1、实验环境

    三台机器:

    • Director节点:  (eth0 10.10.172.191  vip eth0:0 10.10.172.250)

    • Real server1: (eth0 10.10.172.192  vip lo:0 10.10.172.250)

    • Real server2: (eth0 10.10.172.193  vip lo:0 10.10.172.250)

    2、安装

    两个 real server 上都安装 nginx 服务
    # yum install -y epel-release
    # yum install -y nginx
     
    Director 上安装 ipvsadm
    # yum install -y ipvsadm
    

    3、Director 上配置脚本

    # vim /data/sh/lvs_dr.sh
    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/sbin/ipvsadm
    vip=10.10.172.250
    rs1=10.10.172.192
    rs2=10.10.172.193
    ifconfig eth0:0 down
    ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev eth0:0
    $ipv -C
    $ipv -A -t $vip:80 -s wrr
    $ipv -a -t $vip:80 -r $rs1:80 -g -w 3
    $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
    

    执行脚本:

    # bash /data/sh/lvs_dr.sh
    

    4、在2台 rs 上配置脚本:

    # vim /data/sh/lvs_dr_rs.sh
    #! /bin/bash
    vip=10.10.172.250
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    

    rs 上分别执行脚本:

    bash /data/sh/lvs_dr_rs.sh
    

    5、实验测试

    测试方式同上,浏览器访问 

    注意:在 DR 模式下,2台 rs 节点的 gateway 不需要设置成 dir 节点的 IP 。

    参考链接地址:

    十、实践LVS的DR模式

    1、实验环境

    三台机器:

    • Director节点:  (eth0 192.168.0.8  vip eth0:0 192.168.0.38)
    • Real server1: (eth0 192.168.0.18 vip lo:0 192.168.0.38)
    • Real server2: (eth0 192.168.0.28 vip lo:0 192.168.0.38)

    2、安装

    两个 real server 上都安装 nginx 服务
    # yum install -y nginx
    
    Director 上安装 ipvsadm
    # yum install -y ipvsadm
    

    3、Director 上配置脚本

    # vim /usr/local/sbin/lvs_dr.sh
    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/sbin/ipvsadm
    vip=192.168.0.38
    rs1=192.168.0.18
    rs2=192.168.0.28
    ifconfig eth0:0 down
    ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev eth0:0
    $ipv -C
    $ipv -A -t $vip:80 -s wrr 
    $ipv -a -t $vip:80 -r $rs1:80 -g -w 3
    $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
    

    执行脚本:

    # bash /usr/local/sbin/lvs_dr.sh
    

    4、在2台 rs 上配置脚本:

    # vim /usr/local/sbin/lvs_dr_rs.sh
    #! /bin/bash
    vip=192.168.0.38
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    

    rs 上分别执行脚本:

    bash /usr/local/sbin/lvs_dr_rs.sh
    

    5、实验测试

    测试方式同上,浏览器访问 http://192.168.0.38

    注意:在 DR 模式下,2台 rs 节点的 gateway 不需要设置成 dir 节点的 IP 。

    参考链接地址:

     

    十一、LVS结合keepalive

    LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性。keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 keepalive 就是为 LVS 而生的。

    1、实验环境

    4台节点

    • Keepalived1 lvs1(Director1):192.168.0.48
    • Keepalived2 lvs2(Director2):192.168.0.58
    • Real server1:192.168.0.18
    • Real server2:192.168.0.28
    • IP: 192.168.0.38

    2、安装系统软件

    Lvs keepalived的2个节点安装

    # yum install ipvsadm keepalived -y
    

    Real server nginx服务的2个节点安装

    # yum install epel-release -y
    # yum install nginx -y
    

    3、设置配置脚本

    Real server节点2台配置脚本:

    # vim /usr/local/sbin/lvs_dr_rs.sh
    #! /bin/bash
    vip=192.168.0.38
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    
    2节点rs 上分别执行脚本:
    bash /usr/local/sbin/lvs_dr_rs.sh
    

    keepalived节点配置(2节点):

    主节点( MASTER )配置文件
    vim /etc/keepalived/keepalived.conf
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.38
        }
    }
    
    virtual_server 192.168.0.38 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP
    
        real_server 192.168.0.18 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    
        real_server 192.168.0.28 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
    

    从节点( BACKUP )配置文件

    拷贝主节点的配置文件keepalived.conf,然后修改如下内容:

    state MASTER -> state BACKUP
    priority 100 -> priority 90
    

    keepalived的2个节点执行如下命令,开启转发功能:

    # echo 1 > /proc/sys/net/ipv4/ip_forward
    

    4、启动keepalive

    先主后从分别启动keepalive
    service keepalived start
    

    5、验证结果

    实验1

    手动关闭192.168.0.18节点的nginx,service nginx stop 在客户端上去测试访问 结果正常,不会出现访问18节点,一直访问的是28节点的内容。

    实验2

    手动重新开启 192.168.0.18 节点的nginx, service nginx start 在客户端上去测试访问 结果正常,按照 rr 调度算法访问18节点和28节点。

    实验3

    测试 keepalived 的HA特性,首先在master上执行命令 ip addr ,可以看到38的vip在master节点上的;这时如果在master上执行 service keepalived stop 命令,这时vip已经不再master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点,这时客户端去访问 访问依然正常,验证了 keepalived的HA特性。

    学习LVS Keepalived必须阅读的三个文档。

    1、  《Keepalived权威指南》下载见 http://www.linuxidc.com/Linux/2012-05/60951.htm

    2、  《LVS手册》http://www.linuxidc.com/Linux/2016-03/129233.htm

    3、  《Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN》 http://www.linuxidc.com/Linux/2016-03/129234.htm

    4、 通过LVS实现WEB站点的MySQL高可用 http://www.linuxidc.com/Linux/2013-06/86390.htm

    5、 LVS Apache PHP MySQL读写分离 http://www.linuxidc.com/Linux/2012-12/77027.htm

    6、 LVS集群类型简介 http://www.linuxidc.com/Linux/2016-12/138709.htm

    企业Web高可用集群实战之LVS Keepalived MySQL HA http://www.linuxidc.com/Linux/2012-09/70097.htm

    Linux负载均衡软件LVS  http://www.linuxidc.com/Linux/2016-11/137435.htm

    本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140548.htm

    新葡亰496net 21

    3. 特点1的解决方案:

    • 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server
      存在问题:用户未必有路由操作权限,因为有可能是运营商提供的,所以这个方法未必实用
    • arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。这是由iptables提供的
    • 修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

    十一、LVS结合keepalived

    LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性。keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 keepalive 就是为 LVS 而生的。

    1、实验环境

    4台节点

    • Keepalived1 lvs1(Director1):10.10.172.191

    • Keepalived2 lvs2(Director2):10.10.172.192

    • Real server1:10.10.172.193

    • Real server2:10.10.172.194

    • VIP: 10.10.172.250

    2、安装系统软件

    Lvs

    • keepalived的2个节点安装

      # yum install ipvsadm keepalived -y

    Real server nginx服务的2个节点安装

    # yum install epel-release -y
    # yum install nginx -y
    

    3、设置配置脚本

    Real server节点2台配置脚本:

    # vim /data/sh/lvs_dr_rs.sh
    #! /bin/bash
    vip=10.10.172.250
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
     
    2节点rs 上分别执行脚本:
    bash /data/sh/lvs_dr_rs.sh
    

    keepalived节点配置(2节点):

    节点1配置文件内容如下所示:
    vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        nopreempt   
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.10.172.250
        }
    }
     
    virtual_server 10.10.172.250 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP
     
        real_server 10.10.172.193 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
     
        real_server 10.10.172.194 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
    

    节点2配置文件

    拷贝主节点的配置文件keepalived.conf,然后修改如下内容:

    state BACKUP-> state BACKUP
    priority 100 -> priority 90
    

    其实,谁先启动keepalived谁担任MASTER角色。

    keepalived的2个节点执行如下命令,开启转发功能:

    # echo 1 > /proc/sys/net/ipv4/ip_forward
    

    4、启动keepalived

    # service keepalived start;chkconfig keepalived on
    

    5、验证结果

    实验1

    手动关闭10.10.172.192节点的nginx,service nginx stop 在客户端上去测试访问  结果正常,不会出现访问192节点,一直访问的是193节点的内容。

    实验2

    手动重新开启 10.10.172.192节点的nginx, service nginx start 在客户端上去测试访问  结果正常,按照 rr 调度算法访问192节点和193节点。

    实验3

    测试 keepalived 的HA特性,首先在master上执行命令 ip addr ,可以看到38的vip在master节点上的;这时如果在master上执行 service keepalived stop 命令,这时vip已经不再master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点,这时客户端去访问  访问依然正常,验证了 keepalived的HA特性。

    十一、LVS结合keepalive

    LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性。keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 keepalive 就是为 LVS 而生的。

    1、实验环境

    4台节点

    • Keepalived1 lvs1(Director1):192.168.0.48
    • Keepalived2 lvs2(Director2):192.168.0.58
    • Real server1:192.168.0.18
    • Real server2:192.168.0.28
    • IP: 192.168.0.38

    2、安装系统软件

    Lvs keepalived的2个节点安装

    # yum install ipvsadm keepalived -y
    

    Real server nginx服务的2个节点安装

    # yum install epel-release -y
    # yum install nginx -y
    

    3、设置配置脚本

    Real server节点2台配置脚本:

    # vim /usr/local/sbin/lvs_dr_rs.sh
    #! /bin/bash
    vip=192.168.0.38
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    
    2节点rs 上分别执行脚本:
    bash /usr/local/sbin/lvs_dr_rs.sh
    

    keepalived节点配置(2节点):

    主节点( MASTER )配置文件
    vim /etc/keepalived/keepalived.conf
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.38
        }
    }
    
    virtual_server 192.168.0.38 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP
    
        real_server 192.168.0.18 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    
        real_server 192.168.0.28 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
    

    从节点( BACKUP )配置文件

    拷贝主节点的配置文件keepalived.conf,然后修改如下内容:

    state MASTER -> state BACKUP
    priority 100 -> priority 90
    

    keepalived的2个节点执行如下命令,开启转发功能:

    # echo 1 > /proc/sys/net/ipv4/ip_forward
    

    4、启动keepalive

    先主后从分别启动keepalive
    service keepalived start
    

    5、验证结果

    实验1

    手动关闭192.168.0.18节点的nginx,service nginx stop 在客户端上去测试访问 http://192.168.0.38 结果正常,不会出现访问18节点,一直访问的是28节点的内容。

    实验2

    手动重新开启 192.168.0.18 节点的nginx, service nginx start 在客户端上去测试访问 http://192.168.0.38 结果正常,按照 rr 调度算法访问18节点和28节点。

    实验3

    测试 keepalived 的HA特性,首先在master上执行命令 ip addr ,可以看到38的vip在master节点上的;这时如果在master上执行 service keepalived stop 命令,这时vip已经不再master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点,这时客户端去访问 http://192.168.0.38 访问依然正常,验证了 keepalived的HA特性。

    lvs 介绍:

     

    七、LVS/Tun原理和特点

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

    新葡亰496net 22

    (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
    (b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
    (c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
    (d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
    (e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
    (f) 响应报文最终送达至客户端

    LVS-Tun模型特性

    • RIP、VIP、DIP全是公网地址
    • RS的网关不会也不可能指向DIP
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持端口映射
    • RS的系统必须支持隧道

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

    八、LVS的八种调度算法

    1. 轮叫调度 rr

    这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

    2. 加权轮叫 wrr

    这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

    3. 最少链接 lc

    这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1

    4. 加权最少链接 wlc

    这个算法比 lc 多了一个权重的概念。

    5. 基于局部性的最少连接调度算法 lblc

    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

    6. 复杂的基于局部性最少的连接算法 lblcr

    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

    7. 目标地址散列调度算法 dh

    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

    8. 源地址散列调度算法 sh

    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

    九、实践LVS的NAT模式

    1、实验环境

    三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(172.16.254.200) 和一个内网ip(192.168.0.8),两个 real server 上只有内网 ip (192.168.0.18) 和 (192.168.0.28),并且需要把两个 real server 的内网网关设置为 director 的内网 ip(192.168.0.8)

    2、安装和配置

    两个 real server 上都安装 nginx 服务
    #yum install -y nginx
    
    Director 上安装 ipvsadm
    #yum install -y ipvsadm
    

    Director 上编辑 nat 实现脚本

    # vim /usr/local/sbin/lvs_nat.sh
    # 编辑写入如下内容:
    #! /bin/bash
    # director服务器上开启路由转发功能:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 关闭 icmp 的重定向
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
    # director设置 nat 防火墙
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    # director设置 ipvsadm
    IPVSADM='/sbin/ipvsadm'
    $IPVSADM -C
    $IPVSADM -A -t 172.16.254.200:80 -s wrr
    $IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.18:80 -m -w 1
    $IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.28:80 -m -w 1
    

    保存后,在 Director 上直接运行这个脚本就可以完成 lvs/nat 的配置
    /bin/bash /usr/local/sbin/lvs_nat.sh
    查看ipvsadm设置的规则
    ipvsadm -ln

    3、测试LVS的效果**

    通过浏览器测试2台机器上的web内容 nginx 的默认页修改一下:

    在 RS1 上执行
    # echo "rs1rs1" >/usr/share/nginx/html/index.html
    
    在 RS2 上执行
    # echo "rs2rs2" >/usr/share/nginx/html/index.html
    

    注意,切记一定要在两台 RS 上设置网关的 IP 为 director 的内网 IP。

    十、实践LVS的DR模式

    1、实验环境

    三台机器:

    • Director节点: (eth0 192.168.0.8 vip eth0:0 192.168.0.38)
    • Real server1: (eth0 192.168.0.18 vip lo:0 192.168.0.38)
    • Real server2: (eth0 192.168.0.28 vip lo:0 192.168.0.38)

    2、安装

    两个 real server 上都安装 nginx 服务
    # yum install -y nginx
    
    Director 上安装 ipvsadm
    # yum install -y ipvsadm
    

    3、Director 上配置脚本

    # vim /usr/local/sbin/lvs_dr.sh
    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/sbin/ipvsadm
    vip=192.168.0.38
    rs1=192.168.0.18
    rs2=192.168.0.28
    ifconfig eth0:0 down
    ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev eth0:0
    $ipv -C
    $ipv -A -t $vip:80 -s wrr 
    $ipv -a -t $vip:80 -r $rs1:80 -g -w 3
    $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
    

    执行脚本:

    # bash /usr/local/sbin/lvs_dr.sh

    4、在2台 rs 上配置脚本:

    # vim /usr/local/sbin/lvs_dr_rs.sh
    #! /bin/bash
    vip=192.168.0.38
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    

    rs 上分别执行脚本:
    bash /usr/local/sbin/lvs_dr_rs.sh

    5、实验测试

    测试方式同上,浏览器访问

    注意:在 DR 模式下,2台 rs 节点的 gateway 不需要设置成 dir 节点的 IP 。

    十一、LVS结合keepalive

    LVS可以实现负载均衡,但是:

    • 不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性,keepalive 软件可以:
    • 进行健康检查,
    • 同时实现 LVS 的高可用性,解决 LVS 单点故障的问题
      keepalive 简直就是为 LVS 而生

    1、实验环境

    4台节点

    • Keepalived1 lvs1(Director1):192.168.0.48
    • Keepalived2 lvs2(Director2):192.168.0.58
    • Real server1:192.168.0.18
    • Real server2:192.168.0.28
    • IP: 192.168.0.38

    2、安装系统软件

    Lvs keepalived的2个节点安装:
    # yum install ipvsadm keepalived -y
    Real server nginx服务的2个节点安装

    # yum install epel-release -y
    # yum install nginx -y
    

    3、设置配置脚本

    Real server节点2台配置脚本

    # vim /usr/local/sbin/lvs_dr_rs.sh
    #! /bin/bash
    vip=192.168.0.38
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    
    2节点rs 上分别执行脚本:
    bash /usr/local/sbin/lvs_dr_rs.sh
    

    keepalived节点配置(2节点):

    **主节点( MASTER )配置文件**
    vim /etc/keepalived/keepalived.conf
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.38
        }
    }
    
    virtual_server 192.168.0.38 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        persistence_timeout 0
        protocol TCP
    
        real_server 192.168.0.18 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    
        real_server 192.168.0.28 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 10
                nb_get_retry 3
                delay_before_retry 3
                connect_port 80
            }
        }
    }
    

    从节点( BACKUP )配置文件

    拷贝主节点的配置文件keepalived.conf,然后修改如下内容:

    state MASTER -> state BACKUP
    priority 100 -> priority 90
    

    keepalived的2个节点执行如下命令,开启转发功能:
    # echo 1 > /proc/sys/net/ipv4/ip_forward

    4、启动keepalive

    先主后从分别启动keepalive
    service keepalived start

    5、验证结果**

    实验1

    手动关闭192.168.0.18节点的nginx,

    service nginx stop
    在客户端上去测试访问
    结果正常,不会出现访问18节点,一直访问的是28节点的内容。

    实验2

    手动重新开启 192.168.0.18 节点的nginx,
    service nginx start
    在客户端上去测试访问 rr 调度算法访问18节点和28节点。

    实验3

    测试 keepalived 的HA特性,首先在master上执行命令 ip addr ,可以看到38的vip在master节点上的;这时如果在master上执行
    service keepalived stop命令,这时vip已经不再master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点,这时客户端去访问
    访问依然正常,验证了 keepalived的HA特性。

    Ref:
    https://www.cnblogs.com/liwei0526vip/p/6370103.html

    本文由新葡亰496net发布于电脑系统,转载请注明出处:新葡亰496net负载均衡原理,实现负载均衡原理及

    关键词:

上一篇:有线网卡配置,认证的安顿

下一篇:没有了