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

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

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

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

已知的服务:设备提供的网络、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的名称不能重复,唯一,但是可用在一个数据中心。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webGL开发智慧城市流程

开发智慧城市的WebGL应用程序涉及多个方面,包括城市模型、实时数据集成、用户界面设计等。以下是一个一般性的流程,您可以根据项目的具体需求进行调整,希望对大家有所帮助。 1.需求分析: 确定智慧城市应用程序的具体需求和功能。考…

光学镜头市场研究:预计2029年将达到460亿元

随着终端产品应用领域的不断拓宽和深化,未来光学镜头设计和生产技术的重点是提高成像质量、增加功能并缩小体积。具体而言,光学镜头产品技术在不同的应用领域正呈现出不同的特点。如在数字安防领域,随着视频监控技术应用范围和场景的逐步扩展…

使用Pytorch从零开始构建StyleGAN2

这篇博文是关于 StyleGAN2 的,来自论文Analyzing and Improving the Image Quality of StyleGAN,我们将使用 PyTorch 对其进行干净、简单且可读的实现,并尝试尽可能地还原原始论文。 如果您没有阅读 StyleGAN2 论文。或者不知道它是如何工作…

python接口自动化测试(单元测试方法)

一、环境搭建 python unittest requests实现http请求的接口自动化Python的优势:语法简洁优美, 功能强大, 标准库跟第三方库灰常强大,建议大家事先了解一下Python的基础;unittest是python的标准测试库,相比于其他测试框架是python目前使用最广…

class083 动态规划中用观察优化枚举的技巧-下【算法】

class083 动态规划中用观察优化枚举的技巧-下【算法】 算法讲解083【必备】动态规划中用观察优化枚举的技巧-下 code1 1235. 规划兼职工作 // 规划兼职工作 // 你打算利用空闲时间来做兼职工作赚些零花钱,这里有n份兼职工作 // 每份工作预计从startTime[i]开始、e…

安装2023最新版Java SE 21.0.1来开发Java应用程序

安装2023最新版Java SE 21.0.1来开发Java应用程序 Install the latest version of Java SE 21.01 to Develop Java Applications By JacksonML 本文简要介绍如何下载和安装2023年最新版Java Development Kit (简称JDK,即Java开发工具包标准版)21.0.1&…

“一键调整尺寸,轻松完成视频批量剪辑:批量放大视频尺寸“

你是否曾经遇到过需要批量调整视频尺寸的情况?无论是为了适应不同的播放平台,还是为了满足客户的特定需求,批量调整视频尺寸都是一项繁琐而耗时的工作。但是,现在有一种方法可以让你轻松完成这项任务,那就是使用我们的…

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

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

linux的定时任务Corntab

安装crontab # yum安装crontab yum install -y crontab# 开机自启crond服务并现在启动 systemctl enable --now crondcron系统任务调度 系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。 在/etc/crontab文件,这…

【IEEE】2区SCI,接收领域广,稳定检索47年!

重点 本期推荐 区块链是一种新兴技术,很多行业和领域都以创新方式采用了此技术,如能源、金融、媒体和娱乐以及零售等。此外,区块链作为一门新兴的交叉学科, 涉及密码学应用(加密,隐私等), 分布式…

圈子社交文化系统,了解生活,更了解你!APP小程序H5三端源码交付,支持二开!

在这个快节奏的时代,圈子社交系统成为了我生活中不可或缺的一部分。通过这个系统,我不仅可以结识到志同道合的朋友,还可以参与各种有趣的活动和发布自己的心情和见解。在这个圈子里,我感受到了无限的可能性和温暖的人性。 首先&am…

MySQL如何进行Sql优化

(1)客户端发送一条查询语句到服务器; (2)服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据; (3)未命中缓存后,MySQL通过关键字将SQ…

leetcode 69. x 的平方根(优质解法)

代码&#xff1a; class Solution {public int mySqrt(int x) {long left0;long rightx;while (left<right){long midleft(right-left1)/2;//注意乘法操作和加法操作都很容易发生溢出if(mid*mid<x){leftmid;}else {rightmid-1;}}return (int)left;} } 题解&#xff1a;…

FM30H12G N通道沟槽电源MOS管 封装形式PDFN5*6

FM30H12G 是一款 N通道沟槽电源的场效应管&#xff08;MOS管&#xff09;&#xff0c;封装形式&#xff1a;PDFN5*6。 来百度APP畅享高清图片 FM30H12G应用&#xff1a; 1、液晶电视 2、笔记本 3、电梯 4、感应加热 5、电动工具

基于JAVA的校园电子商城系统论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此校园购物信息的…

Linux 非阻塞网络IO模式

非阻塞网络IO模式介绍 当用户线程发起一个 read 操作后&#xff0c;并不需要等待&#xff0c;而是马上就得到了一个结果。如果结果是一个 error 时&#xff0c;它就知道数据还没有准备好&#xff0c;于是它可以再次发送 read 操作。一旦内核中的数据准备好了&#xff0c;并且又…

如何用CHAT写启发感想

问CHAT&#xff1a;写篇劳动教育课程给我带来的启发和影响 CHAT回复&#xff1a;自从我参加了学校的劳动教育课程&#xff0c;我深深地意识到劳动的重要性。这门课程通过让我们体验和认识各种劳动形式&#xff0c;提醒我去珍惜每一份来之不易的成果。接下来我想分享几个显著的观…

IntelliJ IDEA无公网环境远程访问Linux服务器进行开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

C++数据类型以及函数设计学习记录

一、C类型转换原则 当表达式中出现了多种类型数据的混合运算时&#xff0c;往往需要进行类型转换。表达式中的类型转换分为两种&#xff1a;隐式转换和显式转换&#xff0c;但此处仅对隐式转换进行总结。 隐式转换分为算术转换和其它隐式类型转换两大类&#xff0c;其它隐式类型…

智慧港口解决方案:PPT全文69页,附下载

关键词&#xff1a;智慧港口解决方案&#xff0c;数字化港口&#xff0c;智慧港口发展现状与展望&#xff0c;智慧码头&#xff0c;智慧港口发展趋势 一、智慧港口建设背景 随着数字经济、智慧交通发展&#xff0c;强调“要大力发展智慧交通和智慧物流”“努力打造世界一流的…