nodejs微服务:Consul集群
Consule集群
1 )概述
- Consul是HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置
- Consul是分布式的、高可用的、可横向扩展的, 完成consul的安装后,必须运行agent
- agent可以运行为 server模式、client模式, 每个数据中心至少必须拥有一台server, 建议在一个集群中有3或者5个server
- 部署单一server,在出现失败时,会不可避免的出现数据丢失
- Consul 集群主要实现server端的集群,client端压力比较小

- 首先我们要运行consul,运行有两种模式,分别是 client 和 server
- client 主要用于请求的转发和检查健康状态
- server 主要用于保存配置信息,用于微服务的查询,(ip + port), 实现高可用集群等
- 通过下面的命令开启:
- $
consul agent -server
- $
consul agent
- $
- 一个client是一个非常轻量级的进程,用于注册服务, 运行健康检查和转发对server的查询,每个数据中心至少必须拥有一个server
- agent必须在集群中的每个主机上运行
- 注意:server也可以用于注册服务,比如我们前面运行的 consul agent -dev
- 但是正式上线后我们一般通过client注册服务,使用保存配置信息、实现高可用集群、通过广域网与其他数据中心通讯等
2 ) 集群配置
- 2.1 ) 示例图
- 如下图所示,当上面三台consul server服务器中有一台挂掉了,微服务访问是不受影响的
- 而client只用于请求的转发,不容易挂掉, 如果一台client挂掉,而这个client被一个或多个微服务连接,那它只影响连接的微服务,不影响其他的微服务
- 如果三台server挂掉了,那client也没法转发了,这样也都没法访问了
- 如果三台server正常,但是某一台client挂掉了,比如clientA,没法实现集群
- 但是,我们有多台client的话,我们可以通过的其他client挂载clientA的备份微服务来实现连通,也就是微服务的集群

- 2.2 ) 启动服务端
- 需要先在/etc/下面创建consul.d目录
- 启动如下3台服务端
- $
consul agent -server -bootstrap-expect 3 -node=server_01 -bind=192.168.1.129 -ui -data-dir=/root/usr/local/consul/data -client 0.0.0.0
- $
consul agent -server -bootstrap-expect 3 -node=server_02 -bind=192.168.1.130 -ui -data-dir=/root/usr/local/consul/data -client 0.0.0.0
- $
consul agent -server -bootstrap-expect 3 -node=server_03 -bind=192.168.1.131 -ui -data-dir=/root/usr/local/consul/data -client 0.0.0.0
- 参数意义
- -server:定义agent运行在server模式
- -bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap
共用(注意:bootstrap-expect值必须是server的数量) - -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是 0.0.0.0
- -node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
- -ui:启动web界面:8500
- -rejoin:使consul启动的时候加入集群中
- -config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
- -client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
- data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
- 2.3 ) 启动客户端
- 运行cosnul agent 以client模式启动
- $
consul agent -data-dir=/root/usr/local/consul/data -node=client_01 -bind=192.168.1.132 -ui -client 0.0.0.0
- $
consul agent -data-dir=/root/usr/local/consul/data -node=client_02 -bind=192.168.1.133 -ui -client 0.0.0.0
3 )关联集群
- 分别在server_02、server_03、client_01节点上面运行下面命令建立集群关系
- $
systemctl stop firewalld
注意:分别关闭对应服务器的防火墙,或者允许对应端口(8500) - $
consul join 192.168.1.129
这台129的主机是 server_01,就是我们选中的leader服务器
- $
- 这时候,192.168.1.129 这台consul_server被选为leader
- 访问:http://192.168.1.129:8500 会重定向到 http://192.168.1.129:8500/ui/dc1/nodes
- 在这个web管理界面可以看到
- 点击左侧:Services 有一个consul,里面有3个实例,里面已经实现了负载均衡
- 点击左侧:Nodes 有4个Node: client_01, server_01, server_02, server_03, 其中 server_01被标识为 Leader
4 )注意相关调用地址
- 客户端,也就是API调用服务器上部署的客户端代码,其中连接consul的地址为consul客户端的地址,也就是 192.168.1.132 或 192.168.1.133
- 即:
new Consul
时,填写的配置中的host的ip,如上二选一
- 即:
- 微服务端,也就是右侧的微服务的服务器中,其中连接consul的地址也为consul客户端的地址,也就是 192.168.1.132 或 192.168.1.133
- 即:
new Consul
时,填写的配置中的host的ip,如上二选一 - 但是,consul.agent.service.register时,填写的 address 以及 check.tcp 中的地址,不要写 127.0.0.1
- 要写成对应当前提供微服务的服务器对外ip地址,比如: 192.168.1.11, 注意:check.tcp 中需要填写 ip + port, 如:192.168.1.11:8080
- 即:
5 ) 查看consul成员和集群状态
$ consul members
# 节点 网络地址 状态 类型 版本 协议 数据中心 分管 部分
Node Address Status Type Build Protocol DC Partition Segment
server_01 192.168.1.129:8301 alive server 1.11.4 2 dc1 default <all>
server_02 192.168.1.130:8301 alive server 1.11.4 2 dc1 default <all>
server_03 192.168.1.131:8301 alive server 1.11.4 2 dc1 default <all>
client-01 192.168.1.132:8301 alive client 1.11.4 2 dc1 default <default>
client-02 192.168.1.133:8301 alive client 1.11.4 2 dc1 default <default>
- 停止server_01 测试程序是否正常
- $
consul leave
这里在当前server服务器上执行
- $
6 ) 停止agent
- 使用ctrl + c优雅的关闭agent
- 中断agent之后可以看到它离开了集群并关闭
- 在退出中,Consul提醒其他集群成员,这个节点离开了
- 如果你强行杀掉进程, 集群的其他成员应该能检测到这个节点失效了
- 当一个成员离开, 它的服务和检测也会从目录中移除
- 当一个成员失效了, 它的健康状况被简单的标记为危险, 但是不会从目录中移除
- Consul会自动尝试对失效的节点进行重连,允许他从某些网络条件下恢复过来
- 离开的节点则不会再继续联系.
- 此外, 如果一个agent作为一个服务器, 一个优雅的离开是很重要的, 可以避免引起潜在的可用性故障影响达成一致性协议
- Consul优雅的退出:$
consul leave
相关文章:

nodejs微服务:Consul集群
Consule集群 1 )概述 Consul是HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置Consul是分布式的、高可用的、可横向扩展的, 完成consul的安装后,必须运行agentagent可以运行为 server模式、client模式, 每个数据中心至少…...

spring事务处理
系列文章目录 Spring中事务的处理相关内容的学习 文章目录系列文章目录前言一、Spring事务简介二、案例:银行账户转账1.题目要求和思路分析2.实现步骤3.实现结构三、spring事务角色四、spring事务相关配置五、案例:转账业务追加日志1.题目要求和思路分析…...
2023 年博客之星的入围规则
目的 感谢各位博主和社区的大力支持,我们的博客之星活动成为了 IT界非常知名的博主荣誉的象征,博主在这个过程中也给大家贡献了很多优质内容。 在过去的几年中,博主们给我们博客之星活动提了很多建议,其中最强烈的一点就是&#…...

【新2023Q2押题JAVA】华为OD机试 - 查找树中的元素 or 查找二叉树节点
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:查找树中的元素 or 查找二叉树…...

MySQL 日志:undo log、redo log、binlog 有什么用?
目录一、bin log1.作用2.刷盘时机3.日志格式二、redo log1.为什么需要redo log2.基本概念3.作用3.刷盘时机三、undo log1.作用四、Mysql的时机顺序五、redo log 与 binlog 的两阶段提交六、总结一、bin log 1.作用 MySQL的bin log日志是用来记录MySQL中增删改时的记录日志。 …...

ETL 与 ELT的关键区别
ETL 和 ELT 之间的主要区别在于数据转换发生的时间和地点 — 这些变化可能看起来很小,但会产生很大的影响! ETL 和 ELT 是数据团队引入、转换并最终向利益干系人公开数据的两种主要方式。它们是与现代云数据仓库和 ETL 工具的开发并行发展的流程。 在任…...
Thinkphp 6.0模版的杂项和表单令牌
本节课我们来学习一下模版的杂项和表单令牌的功能。 一.模版的杂项 1. 有时,我们需要输出类似模版标签或语法的数据,这时会被模版解析; 2. 此时,我们就使用模版的原样输出标签{literal}; {literal} 变量标…...
linux常问
查看当前进程 ps -l 列出与本次登录有关的进程信息; ps -aux 查询内存中进程信息; ps -aux | grep * 查询 *进程的详细信息; top 查看内存中进程的动态信息; kill -9 pid 杀死进程。...

ToBeWritten之物联网MQTT、Z-Wave等协议
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...

C# 行为型模式之责任链模式
责任链模式:请求从链中的一个对象传递到下一个对象,直到请求被响应为止。通过这种方式在对象之间去除耦合。 用途:请假审批、采购审批等。 案例介绍:以公司采购东西为例子来实现责任链模式。公司规定,采购架构总价在…...
layui实现请求前添加一个加载 loading 的效果,并在请求成功后关闭
1.使用 layui 的 layer 组件来实现请求前添加一个加载 loading 的效果,并在请求成功后关闭。 $("#switch").click(function() {layer.confirm(确认切换至英文环境?, function(index) {var loadingIndex layer.load(1, {shade: [0.1,#fff] //0.1透明度的…...

iostat / sar 命令详解
作用 iostat主要用于监控系统设备的IO负载情况,根据这个可以看出当前系统的写入量和读取量,CPU负载和磁盘负载。 iostat属于sysstat软件包。可以用yum install sysstat 直接安装。 iostat用法 1.用法:iostat [选项] [<时间间隔>] […...

2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。 答案2023-04-06: 见moonfdd/ffmpeg-go库。 这段代码是一个示例程序,用于将音频 PCM 数据编码为 MP2 格式的音频文件。下面是代码的详细…...

归排、计排深度理解
归并排序:是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法&#…...
设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则单一职责原则(SRP)从三大特性角度看原则:应用的设计模式:开放封闭原则(OCP)从三大特性角度看原则:应用的设计模式:里氏替换原则(LSP)从三大特性角度看原则:应用的设计模式:依赖倒置原则(DIP)从三大特性角度看原则:应用的设计模式&…...
好像模拟了一个引力场
( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 做一个网络让输入只有3个节点,每个训练集里有4张图片,让B的训练集全为0,排列组合A,观察迭代次数平均值的变化。 A-B 迭代次数 0 1 0 2*0*0*7-0*0*0*0 12957.31 0 0 0 2*0*0*7-0*0…...

MySQL优化——Explain分析执行计划详解
文章目录前言一. 查看SQL执行频率二. 定位低效率执行SQL三. explain分析执行计划3.1 id3.2 select_type3.3 table3.4 type3.5 key3.6 rows3.7 extra四. show profile分析SQL前言 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能…...
xcode 14.3 file not found libarclite_iphoneos.a
最近升级到xcode 14.3 版本的同学,会遇到这个一个问题 File not found: /Users/johnson/Downloads/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a 解决方法(亲测有效) 在podfile文件中,增…...

基于AI+数据驱动的慢查询索引推荐
目前,美团内部每天产生的慢查询数量已经超过上亿条。如何高效准确地为慢查询推荐缺失的索引来改善其执行性能,是美团数据库研发中心面临的一项挑战。为此,我们与华东师范大学开展了科研合作,在AI领域对索引推荐进行了探索和实践&a…...
【ESP32】嵌入式FreeRtos--Task
FreeRTOS中文数据手册:https://www.freertos.org/zh-cn-cmn-s/RTOS.html 任务函数 任务函数描述xTaskCreate()使用动态的方法创建一个任务xTaskCreateStatic()使用静态的方法创建一个任务xTaskCreatePinnedToCore指定任务运行的核心(最后一个参数)vTaskDelete()删…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...