Docker-consul容器服务自动发现与注册

news2024/11/15 14:05:00

什么叫微服务或者注册与发现?

是一种分布式管理系统,定位服务的方法。

在传统的架构中,应用程序之间直连到已知的服务。

已知的服务:设备提供的网络、IP地址、基于tcp/ip端口

基于现微服务部署,服务的动态性,数量增加了,传统的基于IP+端口的形式已经不太适用了。

服务注册以及发现:微服务的位置信息(ip+端口+健康状况)统一注册到一个中心化的服务注册表中。

可以允许其他服务动态的查询和发现这些服务。

docker-consul的工作流程

1、 服务注册当一个服务启动时,会把自己的元数据(IP、端口、服务名称、健康状态也就是服务是否在运行)注册到服务注册表中。

这个注册表的服务(consul、zookeeper)也可以在云平台部署

2、 服务发现其他服务需要和这个服务通信时,只需要向注册表查询服务位置信息(ip地址+端口),这样的话可以在服务注册表中直接获取我要的信息。不需要到静态配置查看了

服务注册与发现的优点:

  1. 动态性:可以在运行时动态添加和移除服务,不需要额外的人工操作和配置。

  2. 弹性:一旦某个服务不可用,服务注册表可以及时更新,通知其他服务避免请求失败。

  3. 可扩展:可以适应不断变化的服务数量。

  4. 服务方调用时的透明性:前端和后端实现解耦

服务注册与发现机制和其它工具配合使用:负载均衡、健康检查、配置管理(一键同步)

服务注册与发现机制是微服务架构中非常重要的组件

consul是什么?

consul是HashiCrop公司开发的一套工具,用于实现服务发现与注册,配置管理,分布式的系统协调。

consul的特点

1、 服务发现与自动注册:保存位置信息(ip+端口+服务名称)

2、 健康检查:服务注册到consul时一并加入系统的还有他的健康状态,定期发送一个心跳检查。如果服务不存在,consul会自动移除。

3、 分布式锁机制:consul提供了一个分布式锁的功能,协调多个节点之间的操作。防止竞争条件和数据冲突

4、 KV存储(key-value):分布式的键值对存储系统,存储配置信息、锁、特性。应用程序可以使用consul的键值存储来动态地获取配置信息

5、 多数据中心支持:consul可以在多个地域部署,可以实现数据中心(机房)之间的发现和注册功能

6、 DNS和HTTP、API:consul支持DNS接口,通过域名解析定位服务的位置。http、api通过api的应用接口,可以调用consul的信息。如服务信息、健康检查等等。

7、 事件通知:如果有关键事件,可以随时获取通知。

分布式锁是什么?

每一个服务的发现和注册都是一个会话 session

创建锁:微服务在注册到consul的时候,consul会和这个服务端会话创建一个锁,分布式锁用来标识具体的服务,会话和锁之间相关联

获取锁:微服务2,建立会话,获取锁,如果申请的锁没有被占用,客户端成功获取,如果已经存在,表示已经有其他的服务在占用,会分配一个新的锁(KV存储)

释放锁:任务完成或者服务断开连接,会把锁释放,删除会话和锁之间的关系。删除与锁关联的键

docker-consul部署和搭建

实验准备

ocker1  20.0.0.41  docker-ce nginx二进制  consul-template(自动发现和自动配置)
docker2  20.0.0.42  registrator 运行注册机制和微服务容器服务
docker3  20.0.0.43  consul多节点服务器加入到consul集群中

docker1
mkdir consul
cp consul_0.9.2_linux_amd64.zip consul/
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=20.0.0.41 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
#-server:指定集群当中的服务器节点,consul的RAFT算法实现分布式结构中节点的一致性。集群当中的成员.直接成为集群的leader,后续加入的服务都是follower
#-bootstrap:表示该节点是引导接待你,引导选组过程,以及为后续加入的server做引导,加入集群。
#-ui:启动图形化界面
#-data-dir=/var/lib/consul-data:指定consul存储数据的路径
#-bind=20.0.0.41:指定consul服务端绑定的IP地址,实现在节点中通信
#-client=0.0.0.0:客户端的地址0.0.0.0:表示所有主机都可以和server建立通信。(生产中是指定的服务器)
#-node=consul-server01:指定consul节点的名称。在集群当中consul节点的名称都是唯一的不可以重复的。
# &> /var/log/consul.log:重定向混合的方式保存到log文件
#&:后台运行
netstat -antp | grep consul
#8300:raft协议的端口,保持分布式集群的一致性,端口处理复制和领导者选举
#8301:LAN Gossip的端口,局域网内部进行节点的通信和信息传播的协议
#8302:Wan Gossip的端口。广域网内节点的通信和信息传播的协议
#8500:webui的端口。用来访问consul的图形化界面
#8600:DNS解析的端口。
consul members
#查看集群信息
consul operator raft list-peers
curl 127.0.0.1:8500/v1/status/peers
#查看集群的server成员
curl 127.0.0.1:8500/v1/status/leader
#查看集群中的领导者
curl 127.0.0.1:8500/v1/catalog/services
#查看以及被集权发现和注册的服务
curl 127.0.0.1:8500/v1/catalog/nodes
#查看集群节点的详细信息。
consul info | grep leader
#查看领导者是否工作

docker2服务端
创建自动发现和注册的容器
docker run -d \
--name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.42 \
consul://20.0.0.41:8500
#-v /var/run/docker.sock:/tmp/docker.sock:docker.sock的是docker守护进程的UNIX的套接字文件,把他映射到容器当中,registrator容器可以监听docker的所有事件,并且完成自动注册服务。
#--ip=20.0.0.42:注册consul的ip地址
#consul://20.0.0.41:8500:所有发现的服务都会注册到指定的server节点。
如果网页查看不到可以使用这个命令
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.42 \
consul://20.0.0.41:8500

docker run -itd -p 81:80 --name tets-1 -h test1 nginx 
docker run -itd -p 82:80 --name tets-2 -h test2 httpd
到页面访问测试:20.0.0.41:8500

docker2

实现自动化更新文件

是HashiCrop公司开发的一个工具,用于consul集成,自动更新配置文件,实现配置管理的自动化。

作用:

1、 动态的配置更新。consul-template监控consul当中key-vlaue的存储键值对,键值对发生变化会自动更新配置文件,无需重启服务

2、 支持多种后端的模板:nginx配置,ETCD等等

docker2

回到docker1查看外部服务信息

负载均衡实现

docker3

回到docker1

回到docker2

回到页面查看

实验完成

 

总结

docker-consul和核心作用就是发现自动生成的微服务,可用动态的管理。

docker-consul:查、看,元数据:IP、端口、健康状态、服务名

consul-template:自动化管理配置文件的工具,获取consul当中注册的服务信息,可用自动的添加到配置文件当中,即使生效,无需重启服务

consul的多节点:一旦选举出了leader,后续的服务器都是follower,server的名称不能重复,唯一,但是可用在一个数据中心。

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

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

相关文章

在MDK开发调试过程中,发现程序正常运行,但是打断点无法进入。

在MDK开发调试过程中,发现程序正常运行,但是打断点无法进入。 打断点无法进入: 程序无法进行: 查找问题:这些都已经配置 上面都已经配置,最终发现: 勾选后进入断点成功。

以csv为源 flink 创建paimon 临时表相关 join 操作

目录 概述配置关键配置测试启动 kyuubi执行配置中的命令 bug解决bug01bug02 结束 概述 目标:生产中有需要外部源数据做paimon的数据源,生成临时表,以使用与现有正式表做相关统计及 join 操作。 环境:各组件版本如下 kyuubi 1.8…

Redis 过期删除策略、内存回收策略、单线程理解

不知从何开始Redis的内存淘汰策略也开始被人问及,卷!真的是太卷了。难不成要我们去阅读Redis源码吗,其实问题的答案,在Redis中的配置文件中全有,不需要你阅读源码、这个东西就是个老八股,估计问这个东西是想…

微信小程序识别小程序码并传参

一、场景 连续看到几个类似关于小程序生成二维码场景的问题,分销的场景和单商品购买的页面居多 二、思路 #mermaid-svg-8CjFXSzutuF1OvO8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8CjFXSzutuF1…

中小企业业财融合策略(2):财务赋能,如何支持业务经营?

上一文《中小企业业财融合(1):把财务从琐碎的凭证处理、核算中解放出来!》,我们提出了财务升级的背景以及必要性,本篇我们就财务赋能,如何支持业务经营?提出一些简要的看法,希望对大家有所帮助。 一、财务赋能&#x…

com.sun.org.apache.xerces.internal.impl.dv.util.Base64

com.sun.org.apache.xerces.internal.impl.dv.util.Base64 Access restriction: The type Base64 is not API (restriction on required library D:\Java\jdk1.8.0_341\jre\lib\rt.jar) Maven Update Project 虽然没错误了,但是有警告,好奇?…

TCL实业,在智能时代风中起舞

从惠州的一个磁带厂起步,成长为智能终端、半导体显示、新能源光伏三大业务齐头并进的制造业大鳄,TCL是中国制造业穿越周期的一面旗帜。而作为国内电视品牌中唯一拥有上游供应链自主权的企业,C端用户往往更熟悉那个总是在电视终端领域拿出好产…

RT-DETR优化:ASF-YOLO提取多尺度特征 | 2023年12月最新成果

🚀🚀🚀本文改进: ASF-YOLO一种新的特征融合网络架构,该网络由两个主要的组件网络组成,可以为小目标分割提供互补的信息:(1)SSFF模块,它结合了来自u;(2)TFE模块,它可以捕获小目标的局部精细细节等 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学…

网络协议 - TCP 协议详解

网络协议 - TCP 协议详解 简述TCP头格式TCP的状态机数据传输中的Sequence NumberTCP重传机制超时重传机制快速重传机制SACK 方法Duplicate SACK – 重复收到数据的问题示例一:ACK丢包示例二,网络延误 TCP的RTT算法经典算法Karn / Partridge 算法Jacobson…

记录 | Microsoft Remote Desktop for mac安装

Microsoft Remote Desktop for mac安装 网上一些教程的下载安装老是跳转来跳转去,而且下载了的也不一定适用于 mac, 这里直接提供 Microsoft Remote Desktop for mac 的安装包的下载地址: microsoft-remote-desktop-for-mac

f盘隐藏的文件夹怎么找出来?介绍几种有效方法

在计算机中,我们经常会遇到隐藏的文件或文件夹,在F盘中隐藏的文件夹也不例外。隐藏的文件夹可能是由系统生成的,或者是用户自行设定的隐私文件夹。无论是因为误操作还是出于其他原因,如果你想找出F盘中的隐藏文件夹,本…

用EXCEL计算NTC、BS、电压等AD参数

前言 之前计算NTC的AD值算得很麻烦,因为51内核的单片机不支持除法运算,更别说浮点运算了。 EXCEL自动算出参数就显得很方便了。 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 理论基础 参考这篇文章NTC热敏电阻温度采集…

数据常见的提取和筛选方法

平时对于一些不标准的数据,需要提取或者筛选其中的部分数据。本文主要分享一些常用的办法,同时也作为一个笔记的备份。 1. 正则表达式 正则表达式比较适合提取有明确类型的数据,比如字母,数字,汉字,日期等…

从GitHub下载的Android Studio项目,在较新版本AS打开出现版本不兼容问题的解决方法。

在GitHub下载了一个Android Studio计算器项目,打开项目后出现一系列问题,本文简单记录出现的问题及解决方法。 1、Gradle安装目录的路径出现错误 问题描述:The specified Gradle installation directory G:\Android\Android Studio\gradle\…

【腾讯云 HAI 域探秘】释放生产力:基于 HAI 打造团队专属的 AI 编程助手

文章目录 前言一、HAI 产品介绍二、HAI 应用场景介绍三、HAI 生产力场景探索:基于 HAI 打造团队专属的 AI 编程助手3.1 申请 HAI 内测资格3.2 购买 HAI 实例3.3 下载 CodeShell-7B-Chat 模型3.4 部署 text-generation-inference(TGI)推理服务3.4.1 下载 text-genera…

目标检测mAP计算以及coco评价标准

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 讲一下目标检测中的一些常见的指标 在我们使用目标检测网络训练时 最后在验证集上会得到一个coco的评价列表 就像我们图中给的这一系列参数列表一样 我们再进一步引入两个概念 第一个叫做precisi…

[已解决]HttpMessageNotReadableException: JSON parse error: Unexpected character:解析JSON时出现异常的问题分析与解决方案

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

标书明标的含义与制作要求

一、什么是标书明标? 在招投标过程中,标书明标是一种常见的招标方式,它是指招标人将招标文件公开进行公示,以吸引投标人参与竞标。在标书明标中,招标文件会明确列出项目的具体要求、投标人的资格条件、技术标准等&…

docker核心原理——unionfs、namespace、cgroup

docker 核心原理 docker的核心原理其实就是cgroupnamespaceunionfs 组合实现的隔离机制,资源控制等。 隔离机制 在容器进程启动之前重新挂载它的整个根⽬录“/”,⽤来为容器提供隔离后的执⾏环境⽂件系统通过Linux Namespace 创建隔离,决…

16--常用类和基础API--06

1、包装类 1.1 包装类概述 Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作&#xff0c…