参考文档:http://blog.csdn.net/ioy84737634/article/details/44916241

目录

lvs的调度算法

lvs的四种模式

四层均衡负载和七层的区别

1、lvs调度算法(最常用的四种)

  • 轮叫调度(rr)
调度器通过外部请求的顺序轮流分配到集群中的真实服务器上,对每台服务器都是均等的;但是这样调度器不会考虑服务器上实际的连接数和系统负载,导致服务器处理请求慢,系统负载增大。
  • 加权轮叫(wrr)
调度器通过一个算法根据真实服务器的不同处理能力来分配访问请求,这样可以保证服务器的处理能力。
  • 最少连接(lc)
调度器将访问请求自动的分配到已建立连接最少的服务器上,如果在集群中每台服务器的性能差不多的话,则这种算法可以较好的均衡负载。
  • 加权最小连接(wlc)
主要用于集群中服务器性能差异大的情况下,调度器可以优化负载性能,具有较高权值的服务器可以将承受较大的活动连接。

2、lvs的四种模式

LVS 是四层负载均衡,建立在 OSI 模型的第四层——传输层之上,LVS 支持 TCP/UDP 的负载均衡。
LVS 的转发主要通过修改 IP 地址(NAT 模式,分为源地址修改 SNAT 和目标地址修改 DNAT)、修改目标 MAC(DR 模式)来实现。

LVS 的工作模式主要有 4 种:

    1. DR(最常用)(也称直接路由模式)
    2. NAT
    3. TUNNEL(不用)
    4. Full-NAT(了解即可)

1、DR模式

请求由 LVS 接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过 LVS。
DR 模式下需要 LVS 和绑定同一个 VIP(RS 通过将 VIP 绑定在 loopback 实现)。
一个请求过来时,LVS 只需要将网络帧的 MAC 地址修改为某一台 RS 的 MAC,该包就会被转发到相应的 RS 处理,注意此时的源 IP 和目标 IP 都没变。
RS 收到 LVS 转发来的包,链路层发现 MAC 是自己的,到上面的网络层,发现 IP 也是自己的,于是这个包被合法地接受,RS 感知不到前面有 LVS 的存在。
而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回即可,不再经过 LVS。
DR 模式是性能最好的一种模式。

2、NAT模式

NAT(Network Address Translation)是一种外网和内网地址映射的技术。
NAT 模式下,网络报的进出都要经过 LVS 的处理。LVS 需要作为 RS 的网关。
当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。
RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。
这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。客户端无法感知到后端 RS 的存在。

3、Full-NAT()

在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。
内网 IP 之间可以通过多个交换机跨 VLAN 通信。
当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。
LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。
Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。

4、四层负载均衡和七层的区别

  1、四层负载均衡

     通过报文中的目标地址和端口,再加上负载均衡设备设置的调度算法,决定选择哪台内部服务器与请求客户端建立TCP连接,然后发送Client请求的数据。 

  2、七层负载均衡

    是基于虚拟的URL或主机IP的负载均衡:在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。

5、四层负载均衡和七层的优缺点

  1、四层负载均衡:

(1)抗负载能力强,可以支持高并发数万

(2)配置性比较低,不宜出人为配置错误

(3)无流量,LVS只分发请求,而流量并不从它本身出去

(4)应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库等

缺点:软件本身不支持正则表达式处理,不能做动静分离

  2、七层负载均衡:

(1) 使整个网络更“智能化”,能把对图片类的请求转发到图片服务器,对文字的请求转发到文字服务器
            (2) 可以有效防止 SYN Flood攻击,使网站更安全

缺点:对设备要求高

6、四层、七层软件(已知常用)

四层:LVS   F5

七层:Nginx     Haproxy

总的来说,一般是lvs做4层负载;nginx做7层负载;haproxy比较灵活,4层和7层负载均衡都能做。

LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)的更多相关文章

  1. 阿里云负载均衡SLB 七层https协议 nginx 获取真实IP

    https://www.cnblogs.com/baylorqu/p/8565667.html https://help.aliyun.com/document_detail/54007.html

  2. MGW——美团点评高性能四层负载均衡

    转自美团点评技术博客:https://tech.meituan.com/MGW.html 前言 在高速发展的移动互联网时代,负载均衡有着举足轻重的地位,它是应用流量的入口,对应用的可靠性和性能起着决定 ...

  3. day11 四层负载均衡和http协议

    day11 四层负载均衡和http协议 四层负载均衡和七层负载均衡的区别 四层和七层负载均衡的区别 四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发.由此可以看出,七层负 ...

  4. 14、Nginx四层负载均衡

    1.Nginx四层负载均衡基本概述 1.1.什么是四层负载均衡 四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都 ...

  5. Nginx 四层负载均衡

    目录 四层负载均衡概述 配置七层负载均衡 配置四层负载均衡 四层负载均衡概述 四层负载均衡是基于IP+端口的负载均衡,七层负载均衡是基于URL或主机名等应用层信息的负载均衡. 其他层负载均衡(转载): ...

  6. LVS的四种模式的实现

    LVS 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之上,传输层上有我们熟悉的 TCP/UDP,LVS 支持 TCP/UDP 的负载均衡. LVS 的转发主要通过修改 IP 地址(N ...

  7. Hibernate 查询MatchMode的四种模式

    Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...

  8. Android 文件访问权限的四种模式

    Linux文件的访问权限* 在Android中,每一个应用是一个独立的用户* drwxrwxrwx* 第1位:d表示文件夹,-表示文件* 第2-4位:rwx,表示这个文件的拥有者(创建这个文件的应用) ...

  9. 对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

    一. AES对称加密: AES加密 分组 二. 分组密码的填充 分组密码的填充 e.g.: PKCS#5填充方式 三. 流密码:   四. 分组密码加密中的四种模式: 3.1 ECB模式 优点: 1. ...

随机推荐

  1. 【LeetCode题解】160_相交链表

    目录 160_相交链表 描述 解法一:哈希表 思路 Java 实现 Python 实现 解法二:双指针(推荐) 思路 Java 实现 Python 实现 160_相交链表 描述 编写一个程序,找到两个 ...

  2. windows 系统安装 IIS 以及配置 web

    Win7系统或win8自带了IIS和framework,不需要单独去下载,只需要开启后就可以运行asp.net程序 由于时间关系,先分享两个关于这个的链接: win7安装iis及web配置教程 htt ...

  3. sql中替换换行符和空格的示例

    select DiscussID,L.Name as LocationName , C.Name as ClientName, REPLACE(BrandName,' ','') BrandName ...

  4. Deep Q-Network 学习笔记(六)—— 改进④:dueling dqn

    这篇同样是完全没看懂 Orz,这里只做实现记录.. 要改动的地方只是在神经网络的最后一层做下调整即可. def create(self): neuro_layer_1 = 3 w_init = tf. ...

  5. [C#]简单离线注册码生成与验证

    本文使用RSA非对称加密和Base64简单地实现离线注册码的生成与验证功能. 主要思路就是提供者持有密钥,通过RSA加密客户机标识或时间标识,再通过Base64加密成不太难看的注册码,然后分发给客户机 ...

  6. Spring 核心组件总结

    spring核心组件总结 spring介绍 spring概念 IOC: Inverse Of Control 控制反转 ​ 将我们创建对象的方式反转了,以前创建对象是由我们开发人员自己维护,包括依赖注 ...

  7. SpringBoot集成Jersey

    SpringBoot集成Jersey 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> & ...

  8. js遇到的问题

    一些开发前台时遇到的小问题: ----------------------------------------- 一眼看出页面使用html还是html5: html有三种声明方式:<!DOCTY ...

  9. C# 如何在Linux操作系统下读取文件

    发布在Window环境上的微服务需要部署在Linux环境上,本以为没有什么问题,结果因为一处读取文件路径的原因报错了,在此记录一下两个问题:1.C#如何判断当前运行环境是什么操作系统:2.C#读取文件 ...

  10. git之回退

    1:本地已commit,未push到远程仓库          1)git log: 查看commit日志,获取commit的id 2)  git reset  --hard  commit_id: ...