docker consul容器的自动发现与注册

news2024/12/22 19:33:53

一、微服务(容器)的注册与发现——微服务架构中极其重要的组件

1、定义:是一种分布式管理系统以及定位服务的方法。传统架构中,应用程序之间直连到已知的服务,设备提供的网络(IP地址),基于TCP/IP协议:端口。由于现代微服务部署,服务的动态性、数量增加,传统的基于IP地址+端口的方式已不太适用,应运而生服务注册及发现

2、服务注册及发现核心:微服务的位置信息(IP地址+端口+服务名称+健康状态)统一注册到服务注册中心表中,可以允许其他服务动态的查询和发现这些服务(发现和查询机制)

3、工作机制

(1)服务注册:当一个服务启动时,会把自己的元数据【IP地址+端口+服务名称+健康状态(服务是否在运行)】注册到服务注册表(consul、zookeeper、云平台)中

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

注:一旦服务停止,会从服务注册中心表中移除该服务的所有信息

4、服务注册与发现的优点

(1)动态性:可以在运行时动态添加或移除服务,无需额外的人工操作和配置

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

(3)可扩展:适应不断变化的服务数量

(4)透明性:服务方调用时,前端和后端实现解耦

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

二、consul

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

2、特点

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

(2)健康检查:服务注册到consul,一并加入系统的还有其健康状态,定期发送一个心跳检查,若服务挂了,consul会自动解除

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

①创建锁:每一个服务的发现与注册都是一个会话session。微服务1注册到consul时,consul会和这个服务的会话创建一个锁,锁用来表示具体的服务,会话和锁之间进行关联

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

③释放锁:任务完成或服务断开连接,会把锁释放,删除会话和锁之间的关系,删除与锁关联的KV键,实现资源释放

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

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

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

(7)事件通知:若有关键信息可以随时获取通知

三、一键化自动管理以及自动发现和管理(consul-template工具)

1、定义:用于consul集成,自动更新配置文件,实现配置管理的自动化

2、作用

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

②支持多种后端的模板:比如nginx配置、ETCD等

四、容器自动发现与注册、配置实验

主机名

作用

IP地址

组件

docker1

consul服务器

20.0.0.16

consul、docker-ce、nginx二进制、sonsul-template(自动发现与自动配置)

docker2

registrator服务器

20.0.0.26

运行注册机制和微服务

docker3

consul服务器

20.0.0.36

多节点服务器,加入到consul集群中

1、consul部署和服务发现docker1

(1)安装consul

consul agent \

> -server \

> -bootstrap \

> -ui \

> -data-dir=/var/lib/consul-data \

> -bind=20.0.0.16 \

> -client=0.0.0.0 \

> -node=consul-server01 &> /var/log/consul.log &

(2)启动consul

consul agent

开启监听服务

-server

指定集群当中的服务器节点,consul的RAFT算法实现分布式结构中节点的在一致性。集群中的成员,直接成为集群的leader,后续加入的服务器都是follower

-bootstrap

表示该节点是引导节点,引导选举过程,以及为后续加入的server做引导,加入集群

-ui

表示启动图形化界面

-data-dir=/var/lib/consul-data

consul存储数据的路径

-bind=20.0.0.16

服务端绑定的IP地址,用于节点通信

-client=0.0.0.0

所有主机都可以和server建立通信(生产环境中指定IP地址)

 -node=consul-server01

指定consul节点的名称(在集群中,名称是唯一且不可重复的)

&> /var/log/consul.log

混合重定向输出到/consul.log中

&

后台运行

(3)查看consul端口

8300

RAFT协议的端口,保持分布式集群的一致性,端口处理复制和领导者选举

8301

LAN Gossip的端口,局域网内进行节点通信和信息传播的协议

8302

Wan Gossip的端口,广域网内进行节点通信和信息传播的协议

8500

web ui的端口,用来访问consul的图形化界面

8600

DNS解析的端口

①查询集群信息

consul members

②查看集群状态

consul operator raft list-peers

③查看集群的server成员

curl 127.0.0.1:8500/v1/status/peers

④查看集群的leader

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

2、自动发现与配置【docker2】

(1)创建自动注册的容器

docker run -d \

> --name=registrator \

> --net=host \

> -v /var/run/docker.sock:/tmp/docker.sock \

> --restart=always \

> gliderlabs/registrator:latest \

> --ip=20.0.0.26 \

> consul://20.0.0.16:8500

docker run -itd -p 81:80 --name test-1 -h test1 nginx

docker run -itd -p 82:80 --name test-2 -h test1 httpd

--name=registrator

容器名称

-v /var/run/docker.sock:/tmp/docker.sock

docker.sock是docker守护进程的套接字文件,把它应色号到容器中,registrator容器可以监听docker的所有事件,且完成自动注册服务

--ip=20.0.0.26

注册在consul的IP地址

consul://20.0.0.16:8500

所有发现的服务都会注册到指定的server节点

(2)浏览器访问20.0.0.16:8500

(3)模拟服务停止,consul是否能自动移除

docker stop test-2

(4)恢复服务,consul是否会自动发现

(5)查看集群中已经被注册与发现的服务【docker1】

curl 127.0.0.1:8500/v1/catalog/services

3、自动发现与配置【docker1】

(1)创建自动化更新nginx配置文件

range service "nginx"

在这个配置中,test1的反向代理的方法会遍历由consul注册的所有服务名称为nginx的服务

server {{.Address}}:{{.Port}}

将发现和注册的nginx服务的IP地址和端口添加到test1的方法中

(2)编译安装nginx

(3)虚拟主机创建目录

(4)解压template源码包

(5)启动template服务,启动后不要按 ctrl+c 中止 consul-template 进程

consul-template --consul-addr 20.0.0.16:8500 \

--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" \

--log-level=info

consul-template --consul-addr 192.168.233,40:8500

指定consul的地址,告诉consul-template从server节点获取数据

/opt/consul/nginx.ctmpl:

配置文件的模板位置

/usr/local/nginx/vhost/test,conf

基于模板生成配置文件的位置

/usr/local/nginx/sbin/nginx -s reload

只要集群中服务发生变化,可以随时更新到配置文件中

--log-level=info

设置consul-template的日志级别为info

consul是一个中间件,nginx服务通过consul-template获取模板,反向代理,consul-template,consul来获取服务的IP地址和端口,然后nginx调用发现的服务实现负载均衡

4、添加多个consul节点【docker3】

(1)解压consul源码包

(2)在集群中添加节点服务器【docker2】

docker run -d --name=registrator3 -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest --ip=20.0.0.26 consul://20.0.0.36:8500

(3)启动consul

consul agent-server \

-ui \

-data-dir=/var/lib/consul-databind=20.0.0.36 \

client=0.0.0.0 \

-node=consul-server02 \

-enable-script-checks=true \

-datacenter=dc1 \

-join 20.0.0.16 &> /var/log/consul.log &

-enable-script-checks=true

设置检查服务为可用,也可以发现原集群中的服务

-datacenter=dc1

加入到40的数据中心

-join 192.168.233.40

加入到已有的集群中

(4)查看集群状态

consul operator raft list-peers

查询集群信息consul members

(5)脱离集群consul leave

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

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

相关文章

揭开机器学习转换器架构的神秘面纱

自2017年推出以来,转换器(Transformers)已成为机器学习领域的一支突出力量,彻底改变了专业翻译和自动完成服务的能力。 最近,随着OpenAI公司的ChatGPT和Meta公司的LLama等大型语言模型的出现,转换器的受欢…

保障线程安全性:构建可靠的多线程应用

目录 引言 为什么线程安全性如此重要? 1. 竞态条件(Race Conditions) 2. 死锁(Deadlocks) 3. 数据竞争(Data Races) 4. 内存可见性(Memory Visibility) 面临的挑战…

【网络安全技术】电子邮件安全PGP,SMIME

一、PGP(Pretty Good Privacy) PGP是一种邮件加密手段,他在发邮件一方加密,然后发给发送方邮件服务器,发送方邮件服务器再发送给接收方邮件服务器,然后接收方再从接收方邮件服务器pop出来,这整…

Axure动态面板的应用与ERP系统登录界面、主页左侧菜单栏、公告栏的绘制

目录 一、动态面板 1.1 简介 1.2 使用动态面板的原因 二、动态面板之轮播图实现案例 2.1 完成步骤 2.2 最终效果 三、动态面版之多方式登录案例 四、动态面板之后台主界面左侧菜单栏 五、ERP登录界面 六、ERP主界面菜单栏 七、ERP公告栏 八、登录页面跳转公告栏 一…

OpenAI开源超级对齐方法:用GPT-2,监督、微调GPT-4

12月15日,OpenAI在官网公布了最新研究论文和开源项目——如何用小模型监督大模型,实现更好的新型对齐方法。 目前,大模型的主流对齐方法是RLHF(人类反馈强化学习)。但随着大模型朝着多模态、AGI发展,神经元…

【专栏目录】

摘要 本专栏是讲解如何改进RT-DETR的专栏。改进方法采用了最新的论文提到的方法。改进的方法包括:增加注意力机制、更换卷积、更换block、更换backbone、更换head、更换优化器等;每篇文章提供了一种到N种改进方法。 评测用的数据集是我自己标注的数据集…

【设计模式--行为型--中介者模式】

设计模式--行为型--中介者模式 中介者模式定义结构案例实现优缺点使用场景 中介者模式 定义 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立的改变它们之间的交互。 结构 抽象中介者角色…

【Vue】elementUI表格,导出Excel

系列文章 【Vue】vue增加导航标签 本文链接:https://blog.csdn.net/youcheng_ge/article/details/134965353 【Vue】Element开发笔记 本文链接:https://blog.csdn.net/youcheng_ge/article/details/133947977 【Vue】vue,在Windows IIS平台…

Linux系统编程(二):标准 I/O 库(下)

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 1. 标准 I/O 库简介 标准 I/O 库是指:标准 C 库中用于文件 I/O 操作(如:读、写文件等)相关的一系列库函数的集合 标准 I/O 库函数相关的函数定义都在头文件 &…

压缩包文件暴力破解 -Server2005(解析)

任务五十一: 压缩包文件暴力破解 任务环境说明:Server2005 1. 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机服务版本信息,将 Telnet 版本信息字符串 作为 Flag 提交; flag:Microsoft Windows XP telnetd 2. 通过本地PC中渗透测试平台Kali对服务器场景Windows进行渗透测…

工业交换机的组网方式有哪些?

工业交换机也称作工业以太网交换机,即应用于工业控制领域的以太网交换机设备,由于采用的网络标准,其开放性好、应用广泛以及价格低廉、使用的是透明而统一的TCP/IP协议,以太网已经成为工业控制领域的主要通信标准。 工业交换机的…

JieLink+智能终端操作平台存在弱口令漏洞

产品简介 捷顺JeLink智能终端操作平台(JSOTC2016 fJeLink)是捷顺历经多年行业经验积累,集智能硬件技术视频分析技术、互联网技术等多种技术融合,基于B/S架构,实现核心业务处理模型(用户中心、投权中心财务中心中心值班室、 运维中心车行客户…

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/services/itcBulletin 路由发送特殊构造的数据包,利用报错注入获取数据库…

【Spring】07 懒加载

文章目录 1.定义2. 作用3. 配置方式1)XML配置2)Java配置3)注解方式 4. 应用场景5. 注意事项总结 1.定义 懒加载(Lazy Initialization)是Spring 框架中的一项强大的特性,它允许我们推迟 Bean 的初始化&…

威睿三合一电驱动系统斩获“2023汽车新供应链百强-金辑奖”

10月19日,2023第五届“金辑奖”颁奖盛典在上海圆满落幕。威睿公司“高效低噪碳化硅电驱动系统”在动力总成电气化领域脱颖而出,荣获“2023中国汽车新供应链百强”荣誉称号。 “金辑奖”由盖世发起,旨在“发现好公司推广好技术成就汽车人”&a…

C#基础——类、对象和属性

类:是具有相同属性和行为特征的集合 对象:对象是类的实例化,它具有类定义的所有特征和行为。 类的语法格式: 访问修饰符 class关键字 类名 两种创建类的方式 第一种方式就是在类的下面再创建一个类 第二种方式是在文件中添加一个…

Selenium自动化(上)

Selenium 安装 环境准备 第一种方式 Python 自带的 pip 工具安装。 pip install selenium4.12.0安装完成后,查看安装的 Selenium 版本号。 pip show selenium第二种方式 安装 Selenium 的前提是拥有 Python 开发环境(推荐使用 PyCharm)。…

【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建

文章目录 一. kafka kraft 集群介绍1. KRaft架构2. Controller 服务器3. Process Roles4. Quorum Voters5. kraft的工作原理 ing 二. 集群安装1. 安装1.1. 配置1.2. 格式化 2. 启动测试2.1. 启功节点服务2.2. 测试 本文主要介绍了 kafka raft集群架构: 与旧架构的不…

linux(centos7)离线安装mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar

1. 卸载mariadb相关rpm # 查找 rpm -qa|grep mariadb rpm -qa|grep mysql# 卸载 rpm -e --nodeps mariadb... rpm -e --nodeps mysql...2. 删除mysql相关文件 # 查找 find / -name mysql# 删除 rm -rf /var/lib/mysql...3. 查看是否有相关依赖,没有需安装 rpm -q…

联想王传东:AI PC迈入AI Ready 即将开启AI On

“AI PC已经正式迈入AI Ready 阶段,接下来会逐渐进入到AI On阶段。”12月16日,英特尔人工智能创新应用大赛启动仪式在深圳举办。作为独家AI PC合作伙伴,联想集团副总裁、中国区首席市场官王传东代表公司出席仪式并致辞。 王传东认为AI PC的发…