服务器集群负载均衡技术

LB:load balance负载均衡器。有时也叫做director。

DNS负载均衡

DNS负载均衡,最基础的是轮询方式,循环返回不同的服务器IP地址。可以同时返回多个服务器IP地址,但是IP地址顺序在变化。用户会首先使用第一个IP地址进行访问。

现在有了改进版本。比如AWS Route53 。

DNS服务器可以检测服务器的状态。如果服务器故障了,不会告诉用户使用这个服务器。

DNS服务器可以按照权重返回DNS应答。

DNS服务器可以返回时延最小的那个服务器。

DNS服务器可以根据用户的IP地址,返回最近的服务器。

GSBL

在不同地域的机房间进行负载均衡的这个方法,叫全局负载均衡GSBL(Global Server Load Balancing)。所以不同的运营商返回的服务器IP不一样。

CDN

静态内容放在CDN服务上。CDN源服务器向分布在各地的CDN节点同步内容。客户使用最近的CDN节点获取内容。客户做域名解析时,DNS服务器根据客户的IP地址,将离它最近的CDN节点的IP地址返回给他。DNS服务器可以设置在CDN中,所以DNS服务器甚至知道CDN节点的负载情况,从而优先返回负载轻的CDN节点。每个ISP内部都设置CDN。

二层负载均衡

二层负载均衡器通过虚拟MAC地址接收请求,然后修改报文的目的MAC地址为上游服务器MAC地址。源IP和目的IP不变。负载均衡服务器和真实服务器共享同一个VIP。后续相同源IP的报文固定使用这个上游服务器。

应答不用经过负载均衡设备。

可以使用LVS(Linux Virtual Server) DR(直接路由)工作模式实现二层负载分担。

三层负载均衡

根据IP地址进行三层负载均衡。三层负载均衡设备通过一个虚拟的IP地址接收请求,然后修改DIP地址为上游服务器的IP地址。后续相同源IP的报文固定使用这个上游服务器。

因为前端的负载均衡设备了修改了报文的DIP,所以应答要仍然经过负载均衡设备,将应答的SIP转换成原来的IP。

四层、七层负载均衡器如果只修改IP地址。就可以理解为是三层负载均衡。

四层负载均衡

四层负载均衡就是根据IP地址、端口将报文转发到不同的上游服务器(不同IP地址+端口)。四层负载均衡设备通过一个虚拟的IP地址接收请求,然后修改DIP地址为上游服务器的IP地址。上游服务器可以使用IP地址进行标识。也可以让一组提供相同服务的服务器使用同一个IP地址,这个时候可以通过目的端口标识组中的不同服务器。也可以让所有服务器都是用同一个IP地址,那么也是通过目的端口标识不同服务器。可以根据源IP标识用户,相同的源IP使用相同的服务器。源端口不能作为用户标识,因为同一个用户同一个会话可能经历多个TCP连接,每次使用不同的源端口。

因为前端的负载均衡设备了修改了报文的IP地址和端口号,所以应答要仍然经过负载均衡设备。

可以使用LVS NAT模式、F5或者HaProxy实现四层负载均衡。通常四层负载均衡后的上游服务器是nginx。

七层负载均衡

七层负载均衡是根据IP地址、端口号和应用层报文中的字段如HTTP报文中的URL、主机名、session-id、language,转发报文到不同的上游服务器。URL代表不同的服务。主机名代表实际的服务器。Session-id表示应用层会话。一个应用层会话活动期间可以会有多个TCP会话。所以通过TCP会话不能代表应用层会话。不同语言的服务可以由不同的服务器来提供。

可以使用Nginx或者Haproxy实现七层负载均衡。其中,Haproxy也可以用来实现redis、mysql、rabbitmq和zookeeper的负载均衡。F5也支持根据session-id进行负载分担。

LVS

可以使用ldirectord、keepalived进行服务器健康检查。

LVS支持DR、NAT和TUN三种模式。

DR模式修改DMAC。服务器直接将应答返回给客户。应答不用经过LVS。要求LVS和服务器都在同一网段。服务器配置为不响应ARP请求。LVS和server都连在同一个二层交换机上。

DR模式的拓扑:

RT-----SW-----server

|

LVS

TUN模式是使用IP in IP隧道来实现的。将原始报文添加一个外层IP头部,DIP是实际服务器。实际服务器收到报文后,剥除外层头部,得到原始的IP报文。返回的应答不用经过负载均衡器。服务器需要支持IP in IP隧道,需要安装相关内核模块。缺点是网络开销增大。DR模式拓扑也适用于TUN模式。但是LVS和server之间可以存在3层设备。

NAT模式不仅要转换IP层的IP地址、传输层的端口号。还要需要转换应用层报文中的IP地址和端口号。NAT模式下应答也要经过LVS,使得LVS容易成为瓶颈。

NAT模式使用拓扑RT----LVS----SW----server。

F5硬件负载均衡器

F5是硬件负载均衡器。可以工作在4层或者7层。支持双机热备。支持服务器健康检查。

Performance L4 + DNAT:

按照纯四层的方式处理数据包,只看源IP、源端口、目的IP和目的端口。数据包到达F5后,只改变目的IP和目的端口为后端服务器地址和端口进行转发。

后端操作:默认网关需要指向F5。返回的数据要经过F5。

Performance L4 + SNAT + DNAT:

F5按照纯四层的方式处理数据包,只看源IP、源端口、目的IP和目的端口。F5转发数据包时,改变源IP地址为为F5的VIP,同时也改变目的IP为后端地址和端口进行转发。返回的数据要经过F5。

后端操作:不需要任何操作。

standard + DNAT:

与Performance L4 + DNAT的不同是需要打断TCP连接。能够对应用层内容中的IP地址和端口号进行修改。但是性能降低。返回的数据要经过F5。

standard + SNAT + DNAT,与Performance L4 + SNAT + DNAT的不同是需要打断TCP连接。能够对应用层内容中的IP地址和端口号进行修改。但是性能降低。返回的数据要经过F5。

Nginx负载均衡:

按照轮询或者权重来分配负载。使用ip_hash选项让每个源IP定向到同一个服务器,解决session问题。使用url_hash选项让每个url定向到同一个后端服务器,使得后端服务器的缓存更加有效。使用fair选项,则nginx会考虑后端服务器的响应速度,给他们分配负载。

一般性话题

负载均衡器对服务器进行心跳检查,摘除故障服务器。

比如使用nginx进行负载均衡时,可以使用Consul将upstream server动态注册到nginx,从而实现upstream服务器的自动发现。Consul支持服务注册、服务发现。支持TCP、HTTP健康检查,自动摘除有故障的服务器。使用HTTP长轮询实现触发更新。支持优先消费本机房的服务。使用raft算法实现集群数据一致性。

不管是哪一种负载均衡,都要尽量不要打断用户层会话。

典型使用方式

使用F5/LVS进行四层负载均衡到nginx服务器,然后再由Nginx/Haproxy服务器七层负载均衡到tomcat。

一个应用服务器只访问一个数据库集群。

常见的服务器集群负载均衡技术:二三四七层负载均衡,DNS、LVS、F5、nginx负载均衡相关推荐

  1. Linux服务器集群系统(三)——LVS集群中的IP负载均衡技术

     原文地址:http://www.linuxvirtualserver.org/zh/lvs3.html 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载 ...

  2. 服务器集群负载均衡技术

    负载均衡 (Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. CD ...

  3. Tomcat服务器集群与负载均衡实现

    一.前言 在单一的服务器上执行WEB应用程序有一些重大的问题,当网站成功建成并开始接受大量请求时,单一服务器终究无法满足需要处理的负荷量,所以就有点显得有点力不从心了.另外一个常见的问题是会产生单点故 ...

  4. 服务器集群负载均衡原理

    当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力. 而我们讨论的负载均衡一般分为两种,一种是基于DNS,另一种基于IP报文. 利 ...

  5. 服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型

    服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型 下面是"黑夜路人"的<大型网站架构优化(PHP)与相关开源软件使用建议> =============== ...

  6. 利用LVS(Linux Virtual Server)系统实现Web服务器集群的负载均衡

    利用LVS(Linux Virtual Server)系统实现Web服务器集群的负载均衡 LVS系统结构与特点: 1. Linux Virtual Server:简称LVS.是基于Linux服务器集群 ...

  7. 使用LVS和Keepalived搭建高可用负载均衡服务器集群

    目录 1.什么是LVS和Keepalived 2.负载均衡服务器集群示例环境搭建及安装配置 2.1.环境网络拓扑结构 2.2.安装ipvsadm软件 2.3.安装keepalived 2.4.配置网络 ...

  8. 负载均衡集群以及相关技术介绍

    负载均衡集群最基本的基于三台服务器 数据库服务器 应用服务器 文件服务器何谓"集群"?近几年,人们越来越多的听到集群(Cluster)这个概念,并且有越来越多的集群在实际生活中得到 ...

  9. 运维企业专题(2)HTTP加速器——Varnish缓存机制后篇(后端服务器集群、负载均衡与CDN推送平台搭建)

    1.实验一:配置后端服务器集群 1)实验目的:定义不同域名站点的后端服务器,通过域名会访问不同的后端主机 2)实验过程: <1>在调度器server1上编写Varnish的配置文件 vim ...

最新文章

  1. GitHub 遭抵制!AI 代码生成神器竟成“抄袭工具”?
  2. Python基础教程:函数及其参数
  3. list操作 rediscluster_Redis集群批量操作
  4. Spartacus image alt属性的绑定实现
  5. feign和ajax,SpringCloud-feign 声明式服务调用
  6. math 向上取整_自我说明:关于Math和File类的具体说明.
  7. python用一行代码编写一个回声程序_使用Python的多回声测验
  8. cortex a7 a53_西昊人体工学椅A7开箱测评
  9. 谷歌:早在这个0day 补丁发布前几周,朝鲜国家黑客就已利用
  10. 面试字节跳动,我被怼了....
  11. 全网最全清理c盘大全
  12. java流程图平行四边形_编程技巧之流程图
  13. openwrt带宽测速
  14. cups支持的打印机列表_CUPS共享打印机服务
  15. Javaweb项目 SMBMS 超市订单管理系统:准备工作、登录与注销、修改密码、用户管理
  16. 请教 ANDROID 通信信号、网络信号图标的颜色问题
  17. ESP-IDF的下载,设置,编译,烧录和监控
  18. 联想拯救者系统重装?不求人教程
  19. C语言_求1到某个数之间的所有素数
  20. html排班表源码,大师排班表.html

热门文章

  1. 山东之谜 山东人的祖先原来是欧罗巴人种
  2. Word在试图打开文件时遇到错误。请尝试下列方法: ....
  3. Mysql中索引的最左前缀原则图文剖析(全)
  4. 验证码信息验证(不区分大小写)
  5. 王者荣耀用java_王者荣耀版Java教程第五期:Java类与对象(1)
  6. Gnocchi: 1、Gnocchi源码分析
  7. vtk中用到的一些Filter(1)
  8. (c语言)三角形判断
  9. 技术 优化 奇思异想 灵感 疑问 探索汇总
  10. 35个排版耳目一新的网站设计欣赏