我的编程空间,编程开发者的网络收藏夹
学习永远不晚

探析负载均衡器的实现原理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

探析负载均衡器的实现原理

LB的组成

图1 LB的构成组件

用户每创建一个LB集群,都至少生产两个负载均衡器节点(LB node),它的承载实体可以是虚拟机也可以是容器,容器具有轻量和高性能特性。LB的构成包含三部分,分别如下:

1.负载均衡器

负载均衡器主要接收client的传入流量,并按照负载均衡算法,将流量分发给LB node。

2.监听器

用户可以向负载均衡器添加一个或者多个监听器,监听器主要用来配置协议和端口,根据检查客户端的流量连接请求,按照定义的转发策略将请求的映射端口流量分发到后端真正承载业务的后端服务器和端口。

3.后端服务器

后端服务器就是业务的流量承载实体,可以是虚拟机、裸金属和容器。监听器会对后端服务器进行定期健康检查,如果后端服务器有问题,将会从监听器中摘掉异常服务器,如果后端服务器恢复正常,监听器会自动添加该服务器继续为业务提供服务器。负载均衡器按照用户设置的负载均衡算法(轮询/最少链接/源地址),将流量分发到后端服务器。

负载均衡器高可用集群

图2 LB集群

负载均衡器作为用户的网络服务入口,一旦发生故障将影响业务的整体可用性,所以负载均衡器集群的目的就是提供高可用的负载均衡器服务。负载均衡器集群中包含多个单独工作的LB node,这些节点保持一致的负载均衡配置,并且具备相同的服务IP地址,提供统一的对外服务。 LB对外服务的ip地址称之虚拟ip(一般称vip),负载均衡器集群会自动将vip映射到某个LB nodeIP地址。如图2所示,每个LB集群的LB node包括Keepalive、LVS和Haproxy服务,其中LB集群会选择两个LB node 组成一个Keepalive集群,一个作为master,一个作为slave,其中master 节点为vip所在节点,是client访问业务的入口ip。Keepalive集群是一个高可用集群,它通过VRRP协议来防止单点故障。如果master节点有问题,slave节点将转为master节点,对外提供服务。lb-node0作为Keepalive集群的master节点,上面的LVS服务通过默认的加权轮训算法,将入口流量分发到LB集群的3个node节点,而作为Keepalive  slave的lb-node1上的LVS服务会将流量按照加权轮训算法分发到 lb-node1和lb-node2上。HAProxy作为监听器的载体,在其配置中为监听器添加后端服务器。

LB后端网络拓扑

图1 LB的构成组件

用户每创建一个LB集群,都至少生产两个负载均衡器节点(LB node),它的承载实体可以是虚拟机也可以是容器,容器具有轻量和高性能特性。LB的构成包含三部分,分别如下:

1.负载均衡器

负载均衡器主要接收client的传入流量,并按照负载均衡算法,将流量分发给LB node。

2.监听器

用户可以向负载均衡器添加一个或者多个监听器,监听器主要用来配置协议和端口,根据检查客户端的流量连接请求,按照定义的转发策略将请求的映射端口流量分发到后端真正承载业务的后端服务器和端口。

3.后端服务器

后端服务器就是业务的流量承载实体,可以是虚拟机、裸金属和容器。监听器会对后端服务器进行定期健康检查,如果后端服务器有问题,将会从监听器中摘掉异常服务器,如果后端服务器恢复正常,监听器会自动添加该服务器继续为业务提供服务器。负载均衡器按照用户设置的负载均衡算法(轮询/最少链接/源地址),将流量分发到后端服务器。

图3 LB后端网络拓扑

每个LB node包括两个网卡,分别为eth0和eth1。其中eth0为私有网络地址,用于和后端服务通信,eth1为基础网络地址,用于接收client数据。Haproxy作为eth0和eth1数据通信的桥梁。根据图3所示,LB后端网络拓扑详细介绍了客户端流量如何通过负载均衡集群,转发流量到后端服务器,然后后端服务器将响应数据如何返回至client。

首先client 通过访问vip(1.2.3.252)到lb-node0,此时流量通过eth1网卡进入iptables规则,通过 PREROUTING 表的LUSTER_DIVERT 链上的规则,打上 fwmark。fwmark 的值是根据监听器的端口来分配,具体以 iptables 规则中的 fwmark 值为准,一般从 0x2710 (即10000) 开始分配,和keepalive中virtual_server_group中的值一致。

然后流量到达lvs后,lvs根据fwmark配置,按照lvs配置算法,选择一个LB node(1.2.3.9)接受流量,如图3所示lvs对应的配置。此时haproxy 已经开启端口监听,流量进入haproxy 的应用程序,按照RR算法,选择一个合适的后端服务器进行流量转发。

此时,通过查看LB node所在物理机hyper-1的arp信息和宿主机路由,流量到达br_vg_out网桥,按照bridge fdb流表配置,通过vxlan隧道,将请求数据发送至后端服务(1.2.3.6)所在的物理机hyper-3。hyper-3的内核对vxlan解包后,数据流入到sxxx网桥,然后根据bridge fdb信息,将数据交付给最终的后端服务器。此时需要注意是在hyper-1上后端服务1.2.3.6的mac地址(图中标红色)并不是其真正的mac地址,而是其所在物理服务器上网桥的一个网口pair的mac地址,它是封包流量的统一入口,最后会将流量转发到最终后端服务。

在hyper-3上的后端服务处理完client的请求后,响应数据是如何返回至client的呢?从LB-node0过来的数据包,进入hyper-3的iptables规则后,会对其打上fwmark,响应数据通过查找hyper-3上的策略路由的fwmark值进行路由匹配,然后将数据发送至hyper-3的br_vg_out网桥,通过vxlan隧道发送至LB-node0,此时数据不再经过lvs服务(lvs采用DR工作模式),而是直接将响应数据发送至client。

LB集群健康检查



1.LB node健康检查

每个计算节点上都有lxc-monitor守护进程,它监控着物理机上以LXC形式运行的LB node,当LB node 由于某些原因出现stop情况后,lxc-monitor会接收到lxc对应的停止消息,并将该消息发送至lxc-event-handler,lxc-event-handler发送release指令给compute_server, compute_server 服务将会重建该LB node。同理,当整个hyper意外宕机后,其pair-hyper探测到hyper网络中断后(hyper和pair-hyper 相互探活彼此),将会触发重建hyper上面所有的LB node,保障LB node正常工作。

2.Listener健康检查

Keepalive 的master节点配置misc_check,会对LB node里面 haproxy 启动的监听器的监听端口进行健康检查,探测流量走VBC网络,即eth1网卡。通过使用nc -vz命令定期对ip和端口进行探测,如果不通,则将它从lvs 后端摘掉,这样业务流量就不会转发到有问题监听器上了。

3.Haproxy对后端服务检查

开启健康检测后,负载均衡器会根据对应配置定期检查后端服务的运行状态,当某个后端服务出现异常时,会自动隔离该后端服务,并将请求转发给其他健康的后端服务,实现高可用性。

  • 健康检查方式:
  • TCP:通过向后端服务器发送 TCP 包来检测后端服务。
  • HTTP:通过向后端服务器发送 HTTP 请求来检测后端服务,你可以指定需要检测的 URI。负载均衡器会通过 HTTP 返回值是否为200来判断服务是否正常。
  • ICMP:通过向后端服务器发送 ICMP Echo Request 请求(即 ping)来检查后端网络是否可达。
  • UDP:UDP 方式会 结合 ICMP Echo Request 和 UDP port probe 两种方式来检查。
  • 健康检查选项:
  • 检查间隔:连续两次健康检查之间的时间间隔,单位为秒,范围为 2-60s。
  • 超时时间:等待健康检查请求返回的超时时间,检查超时将会被判定为一次检查失败,单位为秒,范围为 5 - 300s。
  • 不健康阈值:多少次连续检查失败之后,可以将后端服务屏蔽,范围为 2-10次。
  • 健康阈值:多少次连续检查成功之后,可以将后端服务恢复,范围为 2-10次。

结束语

本文介绍了LB的组成原理、高可用架构、网络流量模型分析和健康检查机制。只有全面深入了解负载均衡器的工作原理,才能快速定位业务在LB碰到的各种问题。LB可以为用户提供强大的功能和灵活配置,便于用户扩展和管理应用程序的基础架构,并且提高了服务的可用性和稳定性,为系统的构建和性能延伸提供了强有力的支持。                                                          

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

探析负载均衡器的实现原理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

探析负载均衡器的实现原理

本文介绍了LB的组成原理、高可用架构、网络流量模型分析和健康检查机制。只有全面深入了解负载均衡器的工作原理,才能快速定位业务在LB碰到的各种问题。

Nginx负载均衡原理与实现

引言:随着网站访问量的不断增加,服务器的负载压力也越来越大。为了解决这个问题,负载均衡应运而生。Nginx作为一款高性能的开源反向代理服务器,被广泛应用于负载均衡的场景中。本文将介绍Nginx负载均衡的原理和实现方法,并附上具体的代码示例。
2023-10-21

全面解析负载均衡原理

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。今天编程学习网就来和大家说说负载均衡的原理,有需要的小伙伴,可以参考一下。编程学习网教育
全面解析负载均衡原理
2024-04-23

dubbo负载均衡的实现原理是什么

Dubbo负载均衡的实现原理是通过在服务提供方和消费方之间选择合适的调用方式和节点来实现负载均衡。具体原理如下:服务提供方:在Dubbo中,服务提供方会将自身的服务注册到注册中心,并提供给消费方可以调用的服务节点列表。Dubbo支持多种负载
dubbo负载均衡的实现原理是什么
2024-04-09

IIS下的负载均衡与IIS+Nginx实现负载均衡、反向代理

在IIS下实现负载均衡可以使用Microsoft提供的Application Request Routing(ARR)模块。ARR可以将传入的请求分发到多个IIS服务器上,从而实现负载均衡。要实现IIS+Nginx的负载均衡和反向代理,可以
2023-09-01

Nginx负载均衡中的fair算法原理与实现

在分布式系统中,负载均衡是非常重要的一环。Nginx作为一款高性能的Web服务器和反向代理服务器,具备了负载均衡的功能。Nginx提供了多种负载均衡算法,其中fair算法是一种比较常用的算法。fair算法的原理fair算法是基于权重的负载均
2023-10-21

LVS实现负载均衡的原理与实践是怎样的

LVS实现负载均衡的原理与实践是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。负载均衡的原理这是1998年一个普通的上午。一上班,老板就把张大胖叫进了办公
2023-06-04

nginx负载均衡的原理是什么

Nginx负载均衡的原理是将客户端的请求分发给多个后端服务器,以实现请求的平衡分配和提高系统的性能和可扩展性。具体而言,Nginx负载均衡的原理包括以下几个步骤:1. 客户端发起请求:客户端将请求发送给Nginx服务器。2. Nginx接收
2023-09-02

负载均衡的实现方法

这篇文章主要讲解了“负载均衡的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“负载均衡的实现方法”吧! 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,
2023-06-20

ribbon负载均衡的原理是什么

Ribbon负载均衡的原理是通过在客户端发起请求时选择合适的服务实例来实现负载均衡。Ribbon通过与服务注册中心进行通信获取服务实例列表,并利用一定的负载均衡算法(如轮询、随机、加权轮询等)来选择合适的服务实例进行请求转发。这样可以有效地
ribbon负载均衡的原理是什么
2024-04-09

如何实现 Kubernetes 负载均衡器

“Kubernetes 负载均衡器”是一个非常宽泛的术语,可以指代多种事物。在本文中,我们将研究两种类型的负载均衡器:一种用于将 Kubernetes 服务暴露给外部世界,另一种被工程师用来平衡这些服务的网络流量负载。

Docker中Swarm服务发现和负载均衡原理分析

小编给大家分享一下Docker中Swarm服务发现和负载均衡原理分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用的技术docker 使用了 linux 内核 iptables 和 ipvs 的功能来实现服务发现和负载
2023-06-07

Nginx Tomcat负载均衡动静分离原理解析

这篇文章主要为大家介绍了Nginx Tomcat负载均衡动静分离原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

tomcat的负载均衡怎么实现

Tomcat的负载均衡可以通过以下几种方式来实现:1. 使用Apache HTTP Server:将Tomcat作为后端服务器,使用Apache作为反向代理服务器,通过配置mod_jk或mod_proxy_balancer模块来实现负载均衡
2023-09-04

Apache的负载均衡如何实现

Apache的负载均衡可以通过以下几种常见的方式来实现:使用Apache的内置模块mod_proxy和mod_proxy_balancer来实现负载均衡。mod_proxy_balancer模块可以将请求分发到多个后端服务器上,实现负载均衡
Apache的负载均衡如何实现
2024-07-05

kafka的负载均衡怎么实现

Kafka的负载均衡可以通过以下几种方式来实现:1. 分区:Kafka将每个主题划分为多个分区,每个分区可以在不同的Broker上进行复制。通过增加分区数量,可以增加Kafka集群的吞吐量和并发处理能力。2. 副本:Kafka使用副本机制来
2023-09-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录