LVS基础知识

LVS介绍(Linux Virtual Server)

    负载调度器,已经集成到内核nginx

    工做原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS 算法

                      iptables/netfilter: 浏览器

                      iptables:用户空间的管理工具 服务器

                      netfilter:内核空间上的框架 网络

                      流入:PREROUTING --> INPUT 框架

                     流出:OUTPUT --> POSTROUTING 分布式

                     转发:PREROUTING --> FORWARD --> POSTROUTING   函数

                     DNAT:目标地址转换; PREROUTING 工具

 

  lvs集群类型中的术语   

    VS:Virtual Server,Director Server(DS) Dispatcher(调度器),Load Balancerspa

    RS:Real Server(lvs), upstream server(nginx) backend server(haproxy)

    CIP:Client IP

    VIP: Virtual serve IP     VS 的外网的IP

    DIP: Director IP            VS 的内网的IP

    RIP: Real server IP

    一个Virtual Server通常会有两个IP地址,一个公网IP地址,一个私网IP地址.全部的用户都是经过这个公网IP来访问相关服务,Virtual Server经过公网IP接收到用户请求后把数据转发到内网IP再经过调度算法把数据调度到内网不一样的主机上进行处理.内网主机处理完后把响应数据返回给Virtual Server.

   访问流程:CIP <--> VIP == DIP <--> RIP

 集群和分布式概念的区别

     集群系统:         许多机器都在执行一个相同的任务

     分布式系统:     许多机器中每台机器执行同一个大任务下的不一样的子任务

   

lvs: ipvsadm/ipvs 

     ipvsadm:用户空间的命令行工具,规则管理器   用于管理集群服务及RealServer

     ipvs:       工做于内核空间netfilter的INPUT钩子上的框架

     用户是经过lvs服务器的公网IP来进行访问的,当用户请求到达路由表后发现请求的地址是本身就会把数据包转向INPUT,若是数据经过了INPUT的话将直接到达本机进程空间,而lvs只是个调度器,不提供任何服务.因此lvs必须在数据到达INPUT以前对数据进行拦截处理.

 

 lvs集群类型

  lvs-nat模式 

 本质是多目标IP的DNAT,经过将请求报文中的目标地址和目标端口修改成某挑出的RS的RIP和PORT实现转发 (修改网络层的数据包)

 (1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP 这样的话RIP响应的报文才能流向到LVS服务器

 (2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈  Director就是LVS服务器

 (3)支持端口映射,可修改请求报文的目标PORT 

 (4)VS必须是Linux系统    RS能够是任意OS系统 

   详细说明:

       1.    互联网用户在浏览器中输入域名地址如http://www.yxh.com

       2.    浏览器经过向DNS服务器发起请求把www.yxh.com主机名解析成LVS服务器的公网IP地址

       3.    浏览器向LVS服务器的公网IP发起http请求

       4.    LVS服务器接收数据到内核后经过查看路由表发现数据是请求本身IP的因而转向INPUT链条,在数据到达INPUT钩子函数前LVS服务器中的IPVS会拦截数据

              IPVS会把数据包中的目标IP(即LVS服务器的公网IP)修改为某台内网服务器的IP  具体修改成哪一个内网IP由特定的调度算法决定

              IPVS把数据包的目标IP修改后再也不通过INPUT链条而是通过系统路由表转到POSTROUTING链上,最后转发到内网IP的主机上

       5.    内网IP的主机处理后封装响应报文  源地址是内网主机IP,目标地址是互联网用户IP 

       6.   由于内网IP的主机的网关都是设置成LVS服务器的内网IP   因此响应报文都会流向LVS服务器

       7.   LVS服务器在接收到内网IP主机发送的响应报文后会在数据到POSTROUTING链以前把响应报文的源IP(内网主机IP)改为本身的公网IP,而后经过互联网路由转发

       8.   数据最终到达的互联网用户的主机并显示

LVS-DR模式 (修改数据链路层报文头部)

      以一个路由器为示例,讲解详细步骤

请求数据包流向
      源地址                                                            目标地址
   ipclient   mac_client                                          vip        mac1(网关)
   ipclient   mac2(网关)                                         vip        maclvs (客户端数据到达LVS服务器)

   理论上LVS服务器收到数据包以后会经过路由表转到本身内核的INPUT链条而后把数据复制到本地的进程空间可是LVS服务的IPVS会在数据到达INPUT以前把数据报文的目标MAC地址进行修改,不让这些数据进入INPUT而是把它们转发到其它RS上

 

LVS服务器处理(修改源MAC和目标MAC)
  ipclient    maclvs                                              vip        macRS1(LVS服务器把数据调度给RS1)

 

响应数据包流向
       源地址                                                             目标地址
    vip     macRS1                                                 ipclient       mac2
    vip     mac1                                                      ipclient      mac_client(RS1直接把处理结果返回给客户端)

总结:
        只有请求报文通过了LVS服务器,响应报文直接由RS服务器直接转给路由器发送给客户端 下降了LVS的负载

        只要是请求报文都必须通过LVS服务器,而后经过LVS服务器转发给RS服务器.只要是响应报文都无需通过LVS服务器

        RealServer和LVS服务器必须在同一个网段,由于LVS须要发送arp广播经过IP地址找到RealServer的MAC地址

        不支持端口映射,由于这种模式没有修改IP报文 底层修改的是MAC地址

        LVS服务器必须使用LINUX操做系统(须要内核支持),RealServer可使用大多数操做系统

 

        

网络IP地址冲突原理

    在同一个网段如何给多台主机配置同一个IP地址

    缘由:

         当给某个主机分配好一个IP地址启动网络服务的时候,这台主机会经过arp协议向网络中发送arp广播询问当前本身的IP是否被其它主机所占用 若是有其它主机已经使用了此IP,那么就会回应此arp广播包.这样就形成的IP地址的冲突

   解决办法:

        1.当主机设置好IP后不进行arp广播询问地址是否被占用    /proc/sys/net/ipv4/conf/all/arp_announce 

        2.对网络中全部的arp询问IP是否占用广播包不进行任何回应                     /proc/sys/net/ipv4/conf/all/arp_ignore 

相关文章
相关标签/搜索