emqx 负载均衡配置 HAProxy 健康检查 轮询 haship

news2024/9/23 19:24:59

HAProxy配置文件

配置文件: 

/etc/haproxy/haproxy.cfg 

负载均衡参数: 

轮询方式轮询注解
roundrobin基于权重进行轮叫调度的算法,在服务器的性能分布比较均匀时,这是一种最公平合理,常用的算法。此算法使用较为频繁。
static-rr基于权重进行轮叫调度的算法,不过此算法为静态方法,在运行时调整期服务器权重不会生效,需要重启haproxy服务生效
source基于请求源IP的算法。此算法先对请求的源IP进行hash运算,可以使同一个客户端IP的请求始终被转发到某台特定的后端服务器
leastconn数据库负载均衡mysql+haproxy的常用轮询方式,不适用于http。此算法会将新的连接请求转发具有最少连接数目的后端服务器。
uri / uri_param / hdr根据url路径进行转发匹配后端服务器。hdr根据http头部进行转发

默认配置:

defaults 
	log  global		#集成全局配置中的日志格式
	mode http   		#所处理的类别(#7层 http;4层tcp) tcp模式一般用于,SSL,SSH,SMTP,MySQL等应用
	option  httplog   	#日志类别http日志格式
	option  http-server-close  #每次请求完毕后主动关闭http通道
	option  dontlognull  	   # 不记录健康检查的日志信息
	option  forwardfor   except 127.0.0.1	如果后端服务器需要获得客户端真实ip需要配置的参数
				       		可以从http  header中获得客户端ip
	option  redispatch 	#serverID对应的服务器挂掉后,强制定向到其他健康的服务器
	option  abortonclose  	#当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
	 
	maxconn 20480   	#最大连接数
	stats  refresh  30   统计页面刷新间隔
	retries  3    3次连接失败就认为该服务不可用
	balance  roundrobin 		  # rr 轮询负载均衡
	#balance  source		 #  source 轮询负载均衡
	#balance  leastconn 	 # 最小连接的负载均衡方式,推荐在Mysql、LDAP等情况下使用

	timeout connect  5000   连接超时
        timeout client  50000   客户端超时
        timeout server 50000   后端服务器超时

	timeout  check  2000  设置对后端服务器的检测超时时间,默认单位是毫秒
	timeout http-request     10s  请求报文的超时时长

HAproxy轮询方式+配置文件详解_haproxy轮询模式-CSDN博客 

负载均衡算法

静态算法

按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和响应速度等,且无法实时修改权重,只能靠重启HAProxy生效。

static-rr

基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动(慢启动是新增加的服务器会逐渐增加请求数,而不会一次性添加流量),其后端主机数量没有限制。

只能通过修改配置文件修改权重,修改完重启服务或者reload

动态算法

有 roundrobin,source,leastconn。基于后端服务器状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。

roundrobin

基于权重的轮询动态调度算法,支持权重的运行时调整,不完全等于lvs中的rr轮训模式,HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中(每个listen)最多支持4095个real server,roundrobin为默认调度算法,且支持对real server权重动态调整。 

source

源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持/缓存业务等场景。 用户第一次请求会通过hash被分配到一台服务器,第二次请求则也会通过对用户的源地址做hash运算,然后对后端服务器的总权重进行取模,根据取得的模,分配到对应权重的后端服务器,以此实现会话保持(取模的得数是不可能等于总权重的,如果取模的得数等于总权重,则会进1,就会取不到模,所以取模的得数只会小于总权重)。 源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法和一致性hash

leastconn

leastconn加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度(新客户端连接),比较适合长连接的场景使用,比如MySQL等场景。 

haproxy调度算法详解一

haproxy配置文件详解

HAProxy 和 Nginx 负载均衡

HAProxy专门部署在一台机器上,用来分发请求到后面的emqx服务所在的机器。

三、使用负载均衡LB

使用HAProxy或Nginx 作为 LB 部署 EMQ X 集群。这里用的HAProxy做为负载均衡:

1、安装HAProxy

       sudo apt-get install haproxy

2、编辑配置文件

       sudo vim /etc/haproxy/haproxy.cfg

 

用 HAProxy 负载均衡 EMQX 集群 | EMQX文档 

健康检查三种方式

1、通过监听端口进行健康检测 。这种检测方式,haproxy只会去检查后端server的端口,并不能保证服务的真正可用。

2、通过URI获取进行健康检测 。检测方式,是用过去GET后端server的的web页面,基本上可以代表后端服务的可用性。 

3、通过request获取的头部信息进行匹配进行健康检测 。这种检测方式,则是基于高级,精细的一些监测需求。通过对后端服务访问的头部信息进行匹配检测。 

HAproxy健康检查的三种方式 

Nginx健康检查 

Nginx健康检查可以用于监测后端服务的运行状态,一旦发现后端服务不正常,将自动切换到其它正常的后端服务,保证整个服务的可用性和稳定性。下面是一个配置Nginx健康检查的例子,并详细说明各参数的作用。

upstream backend {
    server backend1.example.com:8080 weight=5 max_fails=3 fail_timeout=30s;
    server backend2.example.com:8080 weight=10 max_fails=3 fail_timeout=30s;
    server backend3.example.com:8080 weight=10 max_fails=3 fail_timeout=30s;
    check interval=3000 rise=2 fall=3 timeout=2000 type=http;
}
  1. upstream backend:定义一个名为backend的upstream,表示后端服务的集群。
  2. server backend1.example.com:表示一个后端服务节点,8080为服务端口,weight=5表示该节点的权重为5,默认为1,max_fails=3表示最大连接失败次数为3,即如果该节点失败3次,将被视为down掉,fail_timeout=30s表示下线时间为30秒,30秒后尝试重新上线,如果成功则恢复服务,如果失败则继续下线。
  3. check interval=3000:表示检查间隔为3秒,默认为5秒。
  4. rise=2:表示如果在2次连续检查中都返回正常(http返回码为200),则将该节点的失败次数清零,即认为该节点恢复正常。
  5. fall=3:表示如果在3次连续检查中都返回失败(http返回码非200),则将该节点的失败次数加1,如果该节点失败次数达到max_fails,则认为该节点down掉并下线。
  6. timeout=2000:表示检查超时时间为2秒,默认为1秒。
  7. type=http:表示检查类型为http,其他类型还包括tcp、ssl、http_keepalive等。

​通过Nginx健康检查,可以自动发现后端服务的故障节点,并将请求转发到正常的服务节点,提高了整个服务的可用性和稳定性。

Nginx被动健康检查和主动健康检查

1.被动健康检查

 Nginx自带有健康检查模块:ngx_http_upstream_module,可以做到基本的健康检查。Nginx只有当有访问时后,才发起对后端节点探测。如果本次请求中,节点正好出现故障,Nginx依然将请求转交给故障的节点,然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。但是会影响效率,因为多了一次转发,而且自带模块无法做到预警。

2.主动健康检查(需使用第三方模块) 

主动地健康检查,nignx定时主动地去ping后端的服务列表,当发现某服务出现异常时,把该服务从健康列表中移除,当发现某服务恢复时,又能够将该服务加回健康列表中。淘宝有一个开源的实现nginx_upstream_check_module模块
官网:http://tengine.taobao.org/document_cn/http_upstream_check_cn.html

3.集成第三方模块部署 

 下载nginx_upstream_check_module模块,修改配置文件,让nginx_upstream_check_module模块生效,重载nginx。

udp反向代理时健康检查的问题,另一位大神在上面nginx_upstream_check_module的基础上作了修改,实现了在第4层的代理tcp和udp时的健康检查。

Nginx被动健康检查和主动健康检查

访问MQTT健康检查地址

使用NGINX Plus进行主动MQTT健康检查教程_nginx mqtt location-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

存储实验:Linux挂载iscsi硬盘与华为OceanStor创建LUN全流程

目录 目的环境规划实验实验流程Centos配置0. 关闭防火墙1. 设置网卡信息2. 配置路由3. iscsiadm连接存储 iSCSI LUN创建(以华为OceanStor为例)验证1. 验证是否成功2. 开启自动挂载 目的 实现Linux连接iscsi硬盘,同时实现开机自启挂载 环境规…

批量提取PDF中表格内容

1 背景 从PDF文件获取表格中的数据,也是日常办公容易涉及到的一项工作。比如我们想获取某公司年报里面的表格数据,PDF动辄上百页的数据。 2 传统方法 一个一个从PDF表格中复制,然后粘贴到Excel表格中,效率太低了。 3 办公自动…

读懂一本书

各位好,今天我们要分享的这本书叫作《读懂一本书》。 很不好意思,书的作者是我。并不是我写的所有的书我都一定要讲,我也有很多合辑类的书籍是从来不讲的,我讲过《可复制的领导力》,讲过《低风险创业》,还有今天的这本《读懂一本书》,都是我有一些原创的观点和价值在里…

仕考网:公务员考试的录取流程

公务员考试的录取流程分很多个阶段,以下是流程介绍: 1. 报名阶段:考生需根据公布的招聘信息和岗位要求进行报名。 2. 笔试阶段:公务员笔试,包括申论和行测两部分。 3. 成绩公布与面试资格:笔试合格者将获…

通过vagrant与VirtualBox 创建虚拟机

1.下载vagrant与VirtualBox【windows版本案例】 1.1 vagrant 下载地址 【按需下载】 https://developer.hashicorp.com/vagrant/install?product_intentvagranthttps://developer.hashicorp.com/vagrant/install?product_intentvagrant 1.2 VirtualBox 下载地址 【按需下载…

数据说话,效益为王:构建高效精益生产KPI监控体系

一、精益生产和KPI指标管理 在智慧工厂的蓝图中,精益生产已从抽象概念升华为一种深邃的经营哲学,它崇尚的是资源利用的极致效率——以最精简的投入,撬动最大化的产出价值。其核心精髓,在于不遗余力地剔除任何形式的冗余与浪费&am…

python基础语法 005 函数1-1

1 函数 1.1 什么是函数 指:输入一定的数据以后,能根据里面的执行步骤,算出一些数据的值;得到相关的数据,获取对于的输出值。 存储指定功能的程序,进行相应的复用 解释: 洗衣服 》输入值&…

【简历】兰州某大学一本硕士:面试通过率基本是为0

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一个一本硕士的Java简历,那这个简历因为学校本身,它是一个一本的硕士,我们一般认为这一本硕士&a…

数据结构之顺序存储线性表实现详解与示例(C,C#,C++)

文章目录 一、顺序存储线性表的基本概念二、顺序存储线性表的实现1、数据结构定义2、初始化3、添加元素4、访问元素5、修改元素6、删除元素7、销毁 三、示例C语言示例C#语言示例C语言示例 顺序存储线性表是一种基本的数据结构,它将线性表的元素按照一定的顺序存放在…

TCP协议的三次握手和四次挥手(面试)

三次握手 首先可以简单的回答: 1、第一次握手:客户端给服务器发送一个 SYN 报文。 2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYNACK 报文。 3、第三次握手:客户端收到 SYNACK 报文之后&#xf…

windows单机版mongodb安装

1、先从官网下载安装包官网下载地址 2.本地解压并创建目录 2.1创建data和log目录 2.2创建mongodb.cfg # mongod.conf# for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data. storag…

Docker基本管理1

Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自…

143. 最长同值路径(卡码网周赛第二十五期(23年B站笔试真题))

题目链接 143. 最长同值路径(卡码网周赛第二十五期(23年B站笔试真题)) 题目描述 给定一个二叉树的 root ,返回最长的路径的长度,这个路径中的每节点具有相同值。这条路径可以经过也可以不经过根节点。两个…

Wifi贴码推广怎么加入?如何提高收益

自Wifi贴码鼻祖微.火于2021年6月推出全球第一张共享WIFI贴码以来,wifi贴码项目便一直是有入局意向的创业者们的重点关注对象之一。在此背景下,以wifi贴码推广怎么加入为代表的问题更是成为了相关创业者社群中的讨论热点。 事实上,对于尚未入局…

端侧智能为什么有前途

年前陆续和很多小伙伴聊过端侧智能的价值,吹捧的、贬低的都有,各自也都有自己的理由。这里,谨作为利益相关方,分享一下自己对端侧智能的看法,尝试回答端侧智能有没有用、为什么有用和该怎么用的问题。文章不含技术干货…

Java BigInteger 类

目录 BigInteger 1. 如何获取一个BigInteger类型的对象? (1)构造方法 (2)静态方法 2. 常用方法 BigInteger 可以用来表示很大很大的数,有多大都可以。通过创建对象调用相应的方法。详见:…

2024年高职云计算实验室建设及云计算实训平台整体解决方案

随着云计算技术的飞速发展,高职院校亟需构建一个与行业需求紧密结合的云计算实验室和实训平台。以下是针对2024年高职院校云计算实验室建设的全面解决方案。 1、在高职云计算实验室的建设与规划中,首要任务是立足于云计算学科的精准定位,紧密…

文章范冰冰高调官宣入驻TikTok!“跨境“的风最终刮到了娱乐圈

在当前的跨境电商行业,我们正见证一个“多元化”时代的到来。特别是最近从国内聚光灯中消失好几年的范冰冰,迅速成为了跨境电商行业的焦点。 范冰冰宣布正式入驻 TikTok,希望为自己的美妆品牌 Fan Beauty Diary,铺开一条新路。 …

【逆向基础】十、工具分享之DIE(Detect It Easy)

一、简介 DIE(Detect It Easy)是一款可以轻松检测PE文件的程序;其主要作用是查壳,并将pe文件的内容解析出来,包括PE文件中包含的导入函数、导出函数的名称及地址,入口函数地址等,是技术人员分析…

A Low-Latency Metadata Service for Geo-Distributed File Systems——论文泛读

Journal of Systems Architecture 2022 Paper 分布式元数据论文阅读笔记整理 问题 地理分布式文件系统已被web服务广泛使用,但访问不同地理位置的服务器延迟不同,当用户访问远程服务器时,将出现不可容忍的服务延迟。目前的大多数分布式文件…