nodejs微服务:Consul集群

如何构建一个 NodeJS 影院微服务并使用 Docker 部署 微服务是一个单独的自包含单元,与其他许多单元一起构成一个大型应用程序。通过将应用程序拆分为小单元,每个部分都可以独立部署和扩展,可以由不同的团队和不同的编程语言编写,并且可以单独进行测试。微服务架构意味着应用程序由许多较小的、独立的应用程序组成,这些应用程序能够在自己的内存空间中运行,并且可以在可能的多个独立计算机上独立扩展。应用程序启动更快,这使得开发人员更具生产力,并加快了部署速度。每个服务可以独立于其他服务部署 — 更容易频繁部署服务的新版本。更容易扩展开发,也可能具有性能优势。 阅读详情

Consul 集群


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
consul集群搭建教程 - 多机集群 搭建consul集群 阅读详情

相关推荐

NodeJS 集群模块: 为App创建集群实例

Node.js默认情况下是单线程的运行时。这意味着运行中的 Node.js 仅利用计算机的一个核心(CPU 单元),即使任何一台计算机都有多个处理器。例如,如果您在一台有 4 个处理器的计算机上运行 Node.js 应用程序,则只使用其中一个。然而,Node.js 允许您使用集群,充分利用多核处理器,并将您的 Node.js 应用程序扩展到新的水平。

欧阳天涵的专栏 1728

nodejs微服务:单体架构与微服务架构

微服务是微服务架构具体的实现方案,是通过微服务架构设计方法拆分出来的一个独立的组件化的小应用。

Wang的专栏 1657

Nodejs分布式解析

摘要 本文探讨了分布式系统的基础概念及其在Node.js环境中的应用。首先介绍了分布式系统的核心要素,包括节点、集群、网络分区等概念,并深入解析了CAP定理和BASE理论在系统设计中的指导作用。随后分析了Node.js在分布式环境中的关键角色,涵盖微服务架构、负载均衡、服务发现、数据分片、消息队列等技术实现。文章还详细阐述了分布式解析的需求与挑战,包括大规模数据处理、高并发应对、容错机制等需求,以及数据一致性、负载均衡、通信开销等技术难点。通过Redis、Nginx、Consul等工具的代码示例,展示了No

天涯学馆 552

在 Node JS 中实现微服务架构

🙂正如我们在之前的博客“单体与微服务:一种实用方法”中讨论的那样。但是今天我们要在 NodeJS 中实现微服务架构。👉您可以使用任何技术,如 Spring、Python 等。但我们将使用 NodeJS 进行演示。📍。

u010291330的博客 2724

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1212

数据仓库建模的步骤-从需求分析到模型优化的全面指南

数据仓库建模是一个系统化的过程,旨在设计和构建一个高效、可扩展的数据存储和分析环境。它的目标是将来自不同源系统的数据整合到一个统一的、面向主题的、随时间变化的数据集合中,以支持企业的决策制定过程。数据仓库建模不仅仅是创建表格和定义关系,它更是一门艺术,需要平衡业务需求、技术限制和未来的可扩展性。提供快速的查询性能支持复杂的分析需求适应业务的变化和增长保持数据的一致性和准确性接下来,让我们深入探讨数据仓库建模的每个主要步骤。

一个8年大数据开发工程师的碎碎念 2104

部署consul+nodejs+docker集群

Jenkins安装:https://www.jianshu.com/p/845f267aec52 JenkIns配置:https://www.cnblogs.com/vipzhou/p/7890016.html Consul配置:http://www.imooc.com/article/289385

Nodejs 1666

AI漫剧实战:MiniMaxH3本地部署+ComfyUI工作流,6G显存出长视频

随着AI视频生成技术的普及,创作者开始追求在有限硬件条件下的本地化部署。本地部署不仅降低使用成本,更能获得对生成流程的完全可控性,这为高频次的内容生产提供了基础。以开源工作流引擎ComfyUI为依托,通过量化模型与显存优化,即便是6G显存的中端显卡也能流畅运行MiniMaxH3视频生成模型,输出60秒级别的AI漫剧片段。本文从视频生成原理出发,讲解模型选择、节点搭建、参数调优与提示词结构化设计,并延伸到剧本拆分、角色一致性控制、后期合成及平台变现路径,为AI漫剧创作者提供一套低成本、可复制的工程化方案。无论

weixin_29051149的博客 161

nodejs微服务:微服务集群

当一台微服务挂掉,我们怎么让服务仍然正常运行,需要在客户端调用微服务前进行负载均衡的处理。我们同时借助了consul集群,保证了服务的稳定运行,但是我们还应当实现API网关的集群。在调用前基于健康的服务进行随机选择微服务机器进行调用,实现了微服务集群的负载均衡。这样,微服务集群已经配置好了,但是上述调用写法可以抽离出一个公共的方法包出来。consul 负载均衡微服务代码如下。

Wang的专栏 777

从零构建安全通信:mbedtls与ECDSA在嵌入式系统中的实战指南

本文详细介绍了如何在嵌入式系统中使用mbedtls和ECDSA实现安全通信,重点探讨了ECDSA相比RSA的优势、mbedtls的模块化裁剪策略、密钥安全存储方案以及完整的签名验签流程。通过实战案例和优化技巧,帮助开发者在资源受限环境下构建高效可靠的安全通信系统。

weixin_28338005的博客 685

Ghidra逆向工具入门:从安装到实战分析baby.exe(附详细配置截图)

本文详细介绍了Ghidra逆向工具的安装配置与实战应用,通过破解CTF题目baby.exe的全过程展示其强大功能。从Java环境搭建到插件配置,再到反编译技巧与动态调试方法,帮助读者快速掌握这款免费开源的反编译神器,有效替代收费的IDA Pro工具。

weixin_29252171的博客 353

nodejs微服务:服务发现与Consul

我们在做微服务开发的时候,客户端的一个接口可能需要调用N个服务,客户端必须知道所有服务的网络位置(ip+port)

Wang的专栏 1211

如何在Vitis 2023.1上快速搭建LWIP Echo Server(附YT8521S PHY调试心得)

本文详细介绍了在Vitis 2023.1开发环境下,基于Xilinx MPSoC平台快速搭建LWIP Echo Server的完整实战流程。内容涵盖从Vivado硬件工程配置、Vitis软件工程创建,到关键代码剖析与定制化修改,并重点分享了调试非标准PHY芯片(如YT8521S)的宝贵心得与常见问题排查方法,旨在帮助开发者高效实现FPGA与上位机间的可靠网络通信验证。

weixin_29250403的博客 137

nodejs微服务:Consul的角色、命令与使用

完成consul的安装后,必须运行agent,agent可以运行为 server模式、client模式或者dev模式,每个数据中心至少必须拥有一台server,建议在一个集群中有3或者5个server,部署单一server,在出现失败时,会不可避免的出现数据丢失

Wang的专栏 830

[毕设项目-大模型微调]现代文翻译文言文【基于LLaMA3.1-8B微调】

教你基于LLaMA3.1-8B微调如何做到现代文翻译文言文

逐梦苍穹的博客 2297

RD算法(一)初出茅庐 —— 算法原理

在《SAR成像概述》的第4节已经对各种SAR成像算法进行了一个简要的概述,本文就直接从RD算法讲起了。

5288

flatend部署指南:如何在2美元/月的服务器上运行生产级P2P微服务

flatend 是一个基于 P2P 网络的微服务框架,支持 NodeJS 和 Go 两种语言,能让你用一台 2美元/月的廉价云服务器,快速搭建并部署生产级 P2P 微服务集群。本文将为你提供一份完整的 flatend 部署指南,从购买服务器、编译网关、编写服务到配置自动 HTTPS,一步步带你完成生产环境搭建,全程无需复杂运维经验。 ## 什么是 flatend?为什么它适合低成本部署? fl

gitblog_01039的博客 353

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

小白入门微服务(5) - 服务注册发现实战(docker+registrator+consul+nodejs+python)

概述 前言 源码 registrator API gateway web 服务 运行 后记 前言 这篇文章真是等了挺久才写,让小伙伴们久等了。这篇文章旨在带你走一下微服务的流程,真实的微服务远不止这些东西。详细的介绍敬请关注我后面的文章。**如果我的文章对你有帮助,欢迎关注、点赞、转发,这样我会更有动力做原创分享。**OK,进入正题! 源码 首先甩出源码吧,因为这对于刚接触的小伙伴来说这可能还...

zone_的博客 1382

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

vue3+nodejs基于微服务架构的校内电动车租赁系统的设计与实现

Vue 采用组件化开发模式,开发者可以将页面拆分成一个个独立的组件,每个组件都有自己的 HTML、CSS 和 JavaScript 代码,实现了高度的复用性和可维护性。MySQL 是关系型数据库管理系统的代表, 因为MySQL是其免费开源的,而且MySQL的功能已经足够用对于学习和中小型企业来讲,所以开发中小型网站都会选择MySQL作为网站的数据库。毕设项目前端使用vue框架,后端使用js的node,满足用户的讯息接受,信息搜索,资讯查看的操作。需要成品或者定制,加我们的时候,不满意的可以定制。

wx_bishe288的博客 1308

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

nodejs微服务解决方案

前言 seneca是一个nodejs微服务工具集,它赋予系统易于连续构建和更新的能力。下面会逐一和大家一起了解相关技术入门以及实践。 这里插入一段硬广。小子再进行简单整合之后撸了个vastify框架 ---- 轻量级nodejs微服务框架,有兴趣的同学过目一下,欢迎顺手star一波,另外有疑问或者代码有毛病欢迎在博文下方留言。 环境 基础...

weixin_34062329的博客 524

consul 日志配置_微服务架构,配置中心的技术选型

目前公司内部微服务架构基础设施建设中,技术选型以Spring Cloud技术为主,也被大家俗称作“全家桶”。★因其具备微服务架构体系中所需的各个服务组件,比如服务注册发现(如Spring Cloud Eureka、Zookeeper、Consul)、API网关路由服务(Spring Cloud Zuul),客户端负载均衡(Spring Cloud Ribbon,Zuul默认集成了Ribbon)、服...

weixin_31301993的博客 227

独家|微服务网关组件在金融的实践

网关又称为API网关,是微服务系统的唯一流量入口。所有的客户端都通过网关访问微服务,API网关封装了系统的内部访问,同时提供了部分通用的功能,比如:身份验证、权限、负载均衡、限流、熔断、灰度发布等。以电影场景举例来说:顾客1观看3D电影,由检票员检票通过之后发放3D眼镜,并指引顾客进入3D观影厅;顾客2和顾客3观看2D电影,由检票员检票通过之后,指引顾客进入2D观影厅;在互联网领域中,顾客为流量,检票为身份鉴权,发放3D眼镜为对请求的扩展,指引顾客进入不同的观影厅为对请求的路由。

程序员高级码农的博客 1059

[Nodejs技术栈] 2020 精选原创文章合辑

作者简介:五月君,Software Designer,公众号「Nodejs技术栈」作者。公众号的文章相对较散,很早之前的文章需要号内搜索关键词才能快速定位到,也极为不方便,现将 2020 ...

weixin_44829437的博客 279

Python基于flask的微服务的手机商城管理系统

简单说,一个管安全规则,一个管身份凭证,组合起来为Web应用打造可靠防护。2、同时增加文字触发提醒,设置提醒语,有相同字段的数据,会触发弹框提醒,例如设置状态提醒:特急/加急/一般 增加自定义提醒语(如:库存不足,请补货)对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。

QQ188083800的博客 195

阿里微服务架构Spring Cloud Alibaba Nacos实战

Spring Cloud Alibaba Nacos一、Nacos1、常用特性2、注册中心、配置中心对比3、生态图4、安装5、名词解析6、代码实战注册中心配置中心 一、Nacos nacos官方文档:https://nacos.io/zh-cn/docs/quick-start.html 1、常用特性 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用D

ThisLX的博客 1722

架构设计之微服务注册中心选型

ZooKeeper、Consul、Eureka和新生的Nacos 都实现了注册中心的功能。那么从哪些方面进行对比,进而选型呢? 图1 服务发现 数据模型 注册中心的核心数据是服务的名字和它对应的网络地址,当服务注册了多个实例时,我们需要对不健康的实例进行过滤或者针对实例的一些特征进行流量的分配,那么就需要在实例上存储一些例如健康状态、权重等属性。随着服务规模的扩大,渐渐的又需要...

KHOST的博客 308
上一篇: nodejs微服务:Consul的角色、命令与使用
下一篇: nodejs微服务:微服务集群
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值