LVS介绍(Linux Virtual Server)

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

工作原理: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 Balancer

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

LVS基础知识的更多相关文章

  1. IT运维的五大基础知识

    IT运维的五大基础知识 | 浏览:331 | 更新:2014-09-25 11:36 IT运维对于很多企业都很重要,接下来运维的一些基础知识天天客服IT运维总监龙少文,就给大家介绍下IT运维的基础知识 ...

  2. 《两地书》--Kubernetes(K8s)基础知识(docker容器技术)

    大家都知道历史上有段佳话叫“司马相如和卓文君”.“皑如山上雪,皎若云间月”.卓文君这么美,却也抵不过多情女儿薄情郎. 司马相如因一首<子虚赋>得汉武帝赏识,飞黄腾达之后便要与卓文君“故来相 ...

  3. SpringCloud(1) 架构演进和基础知识简介

    一.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive 1.单体应用:开发速度慢.启动时间长.依赖庞大.等等 2.微服务:易开发.理 ...

  4. Kubernetes(K8s)基础知识(docker容器技术)

    今天谈谈K8s基础知识关键词: 一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机 ...

  5. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  6. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  7. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  8. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  9. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

随机推荐

  1. python模块和类的通用转换规则(2),三步转oo

    介绍模块和类怎么互相转换,不谈面向对象的继承 封装 多态等特点. 一个person_module模块,有人的基本属性和功能. person_module.py如下 # coding=utf8 name ...

  2. 一个整型数组里除了一个数字之外,其他的数字都出现了两次。要求时间复杂度是O(n),空间复杂度是O(1),如何找出数组中只出现一次的数字

    思路分析:任何一个数字异或它自己都等于0,根据这一特性,如果从头到尾依次异或数组中的每一个数字,因为那些出现两次的数字全部在异或中抵消掉了,所以最终的结果刚好是那些只出现一次的数字. 代码如下: #i ...

  3. connect()返回SOCKET_ERROR不一定就是连接失败

    connect()用于建立与指定socket的连接. 头文件: #include <sys/socket.h> 函数原型: int connect(int s, const struct ...

  4. iOS - DNS劫持

    ******科普** 1.DNS劫持的危害 不知道大家有没有发现这样一个现象,在打开一些网页的时候会弹出一些与所浏览网页不相关的内容比如这样奇(se)怪(qing)的东西 图一   或者这样 图二   ...

  5. Linux Kafka集群管理工具kafka-manager的安装使用

    一.kafka-manager简介 kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作.具体支持以下内容: 管理多个集群 ...

  6. php reids 单机命令

    一.Redis连接与认证 //连接参数:ip.端口.连接超时时间,连接成功返回true,否则返回false $ret = $redis->connect('127.0.0.1', 6379, 3 ...

  7. 初级ai思维导图,基础人工智能设计图

    2017年2月8日09:35:46 仅供代码和逻辑设计图纸,只提供一个参考设计,后面可能会更新具体实施说明

  8. {MySQL完整性约束}一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业

    MySQL完整性约束 阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业 一 ...

  9. HDU 5542 - The Battle of Chibi - [离散化+树状数组优化DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5542 Problem DescriptionCao Cao made up a big army an ...

  10. ArcEngine获取要素数据集的容差和分辨率

    /// <summary> /// 根据数据集获取容差 /// </summary> /// <param name="dataset">< ...