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

1、微服务(容器)、容器的注册和发现:是一种分布式管理系统,用于定位服务的方法

(1)在传统的架构中,应用程序之间直连到已知的服务,设备提供的网络(ip地址、基于tcp/ip的端口)
2由于现代微服务的部署,服务的动态性,数量增加了,传统的只基于ip+端口的形式已经不太适用
3服务注册和发现:把微服务的位置信息(包括ip+端口+健康状况)统一注册到一个中心化的服务注册表中,可以允许其他服务动态的查询和发现这些服务

2、服务注册和发现的工作机制

1服务注册:当一个服务启动时,会把自己的元数据(ip+端口+服务名称+健康状态(服务是否在正常运行))统一注册到服务注册表中
(2)这个注册表的服务(consul、zookeeper),也可以在云平台部署
(3)服务发现:其他服务需要和这个服务通信时,只需要向注册表查询服务位置信息(ip+端口),这样可以直接在服务注册表中直接获取需要的信息,不需要到静态配置查看

3、服务注册和发现的优点

1动态性:可以在运行时动态添加和移除服务,不需要额外的人工操作和配置
2弹性:一旦某个服务不可用,服务注册表可以及时更新,通知其他服务避免请求失败
3可扩展:可以适应不断变化的服务数量
4透明性:服务方调用时,前端和后端实现解耦(降低两个服务之间的依赖关系)

4、服务注册和发现机制与其他工具配合使用(微服务架构中非常重要的组件)

1负载均衡
2健康检查
3配置管理:一键同步,只要有变化,及时同步变化

5、consul

1consul是hashiCrop公司开发的一套工具,主要用于实现服务发现与注册、配置管理以及分布式系统协调

6、consul的主要特点

1服务发现与自动注册:保存位置信息(ip+端口+服务名称)
2健康检查:服务注册到consul之后,一并加入系统的还有他的健康状态,定期发送一个心跳检查,如果服务挂了,consul会自动移除
3分布式锁:consul提供了一个分布式锁的功能,用于协调多个节点之间的操作,防止竞争条件和数据冲突
①每一个服务的发现和注册都是一个会话session
②创建锁:微服务1在注册到consul的时候,consul会和这个服务的会话创建一个锁,锁用来标识具体的服务器,会话和锁之间关联
③获取锁:微服务2,建立会话、获取锁,如果申请的锁没有被使用,客户端成功获取,如果已经存在,表示已有其他的服务在占用,会给你分配一个新的锁(KV存储)
④释放锁:任务完成或者服务断开了连接,会把锁释放,删除会话和锁之间的关系,删除与锁关联的键,实现资源的释放
4KV存储:key-value,分布式的键值对存储系统,存储配置信息、锁、特性;应用程序可以使用consul的键值对信息来动态的获取配置信息
5多数据中心支持:consul可以在多个地域部署,可以实现数据中心之间的发现和注册功能
6DNS和http、API:consul可以支持DNS接口,可以通过域名解析定位服务的位置;http和API:通过API应用接口,可以调用consul的信息,服务信息、健康信息等等
7事件通知:如有关键信息可以随时获取通知

7、consul部署和服务发现

consul服务器

docker1:20.0.0.61

consul组件、docker-ce、nginx服务(二进制部署)、consul-template(自动发现和自动配置)

registrator服务器

docker2:20.0.0.62

运行注册机制和微服务(容器服务)

consul服务器

docker3:20.0.0.63

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

1部署consul

①启动consul

consul agent

开启监听服务

-server

指定集群中的服务器接节点,使用consul的RAFT算法实现分布式结构中节点的一致性,集群中的成员,直接成为集群的leader,后续加入的服务器都是follower(选举过程)

-bootstrap

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

-ui

启动图形化界面

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

consul存储数据的路径

-bind=20.0.0.61

服务端绑定的IP地址,节点当中进行通信

-client=0.0.0.0

客户端地址,所有主机都可以和server建立通信(生产中是指定的服务器)

-node=consul-server01

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

&> /var/log/consul.log

混合重定向输出到consul.log

&

后台运行

8300

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

8301

LAN Gossip的端口,在局域网内部进行节点的通信和信息传播的协议(了解)

8302

WAN Gossip的端口,广域网内的节点的通信和信息传播协议(了解)

8500

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

8600

DNS解析的端口

②查询集群信息:consul members

③查看集群的状态:consul operator raft list-peers

④API接口查询:

查看集群的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部署集群自动发现和自动注册
①创建自动注册的容器(registrator)

--name=registrator

指定名称

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

docker.sock

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

--ip=20.0.0.62

注册在consul的ip地址

consul://20.0.0.61:8500

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

②运行容器,测试能否被自动发现和注册
docker run -itd -p 81:80 --name test-1 -h test1 nginx
docker run -itd -p 82:80 --name test-2 -h test2 httpd
-h:指定创建主机的主机名

③访问:20.0.0.61:8500

④测试

(3)一键化自动发现和自动配置:consul-template

consul-template:用于consul集成,自动更新配置文件,实现配置管理的自动化

consul-template的作用:

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

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

consul是一个中间件:本地nginx服务通过consul-template获取模版(反向代理),consul-template通过consul server获取注册服务的ip和端口,然后nginx调用发现的服务来实现负载均衡

①自动化更新配置文件

{{range service nginx}}  

hyde1的反向代理的方法会遍历由consul注册的所有服务名称为nginx的服务

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

将发现和注册的nginx服务的ip地址和端口,添加到hyde1的upstream的方法中

②编译安装nginx
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd /opt/nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j 4 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

③修改nginx的配置文件

创建虚拟主机目录mkdir /usr/local/nginx/conf/vhost
创建日志文件目录mkdir /var/log/ngin

④配置template

在前台启动 template 服务
consul-template --consul-addr 20.0.0.61: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 20.0.0.61:8500

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

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

第一部分:/opt/consul/nginx.ctmpl——配置文件大的模版的位置

第二部分:/usr/local/nginx/conf/vhost/test.conf——给予模版生成配置文件的位置

第三部分:/usr/local/nginx/sbin/nginx -s reload

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

--log-level=info——设置consul-template的日志级别为info

⑤测试
创建nginx容器:docker run -itd -p 83:80 --name test-3 -h test3 nginx

关闭容器:

重启容器:

⑥配置轮询——配置访问页面

(4)实现consul的多节点部署
①部署consul

②启动consul
consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=20.0.0.63 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true  \
-datacenter=dc1  \
-join 20.0.0.61 &> /var/log/consul.log &

-enable-script-checks=true

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

-datacenter=dc1

加入到61的数据中心

-join 20.0.0.61 

加入到已有的集群当中去

③加入集群
docker run -d \
--name=registrator1 \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.62 \
consul://20.0.0.63:8500

④查看集群状态:consul operator raft list-peers

⑤脱离集群:consul leave

8、总结

(1)docker-consul的核心作用:发现自动生成的微服务,可以动态的管理
(2)docker-consul:查、看(元数据—ip+端口+健康状态+服务名称)
(3)consul-template:自动化管理配置文件的工具,获取consul当中注册的服务信息,可以自动的添加到配置文件中,即时生效,无需重启服务
(4)consul的多节点,一旦选举出了leader,后续的服务器都是follower。server的名称不能重复,是唯一的,但是可以在一个数据中心

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

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

相关文章

android 13.0 去掉recovery模式UI操作页面的菜单选项

1.概述 在13.0进行系统rom定制化开发中,在进行一些定制化开发中,会根据需要在进入recovery模式的时候,去掉recovery模式的一些菜单选项, Reboot to bootloader,Enter rescue等菜单项,经过分析得知, 就是在device.cpp去掉一些菜单选项就可以了,接下来就来分析实现相关功…

《PySpark大数据分析实战》-04.了解Spark

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

python进行描述性统计分析,python怎么做描述性统计

大家好,小编来为大家解答以下问题,python语言的描述错误的选项,python描述算法的方法有几种,今天让我们一起来看看吧! 一、描述符是什么 描述符:是一个类,只要内部定义了方法__get__, __set__, …

strtok()的用法及实现哦

1. 用法 1. 声明:char *strtok(char *str, const char *delim) str -- 要被分解成一组小字符串的字符串。第一次调用 strtok() 时,这个参数应该是你想要分割的字符串。随后的调用应该将此参数设置为NULL,以便继续从上次的位置分割。delim -- …

接口自动化测试框架搭建

一、原理及特点 参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。测试报告这里用到第三方的包ReportNG 项目组织用Maven 二、准备 使用工具&#xff1…

SecureCRT设置log保存路径和格式

SecureCRT设置log保存路径和格式 D:\CRT.log%S%Y%M%D-%h%m%s.log [%Y%M%D_%h:%m:%s] [%h:%m:%s]

AJAX练习题:加强你的异步通信技能!

学习目标: 创建一个AJAX请求,从服务器获取一个JSON对象,并将其显示在网页上。 创建一个AJAX请求,向服务器发送数据并获取响应。使用获取到的响应数据更新网页上的内容。 创建一个AJAX请求,从服务器获取一个XML文件&a…

HBase 详细图文介绍

目录 一、HBase 定义 二、HBase 数据模型 2.1 HBase 逻辑结构 2.2 HBase 物理存储结构 ​2.3 数据模型 2.3.1 Name Space 2.3.2 Table 2.3.3 Row 2.3.4 Column 2.3.5 Time Stamp 2.3.6 Cell 三、HBase 基本架构 架构角色 3.1 Master 3.2 Region Server 3.3 Zo…

【DC-DC】世微 AP9166 降压恒压芯片 18V 2A同步降压转换器

600KHz,18V,2A同步降压转换器 概述 AP9166是一款完全集成的效率2A同步整流降压转换器。AP9166运行在宽输出电流上以高效率 负载范围。此设备提供两个操作模式、PWM控制和PFM模式切换控制,允许更宽范围的高效率 负载AP9166至少需要现成标准的…

基于ssm的汽车服务商城系统设计与实现论文

摘 要 本课题是根据用户的需要以及网络的优势建立的一个基于Vue的汽车服务商城系统,来更好的为用户提供服务。 本基于Vue的汽车服务商城系统应用Java技术,MYSQL数据库存储数据,基于SSMVue框架开发。在网站的整个开发过程中,首先对…

坚持创新驱动,超卓航科入选为“新一批国家知识产权优势企业”!

近日,根据《国家知识产权局关于确定2023年新一批及通过复核的国家知识产权示范企业和优势企业的通知》精神,经湖北省知识产权局组织测评、推荐,国家知识产权局审核,超卓航科入选为“新一批国家知识产权优势企业”。 超卓航科以金属…

IDEA debug窗口左边工具栏隐藏与显示

今天在debug排查代码的时候一不小心点到哪里,结果变成这样 我们可以这样恢复,右键Debug 点击show Toolbar

java的内存图

明确:jre jdk jvm关系 (详细去看这篇文章) 三者的大致结构是这样的,简单来说就是JDK包含JRE,JRE又包含JVM的关系。如下图所示: 从图中可以看出JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime E…

【ThemeStudio】安装报错A Javascript error occurred in the main process

报错内容: 问题原因:系统环境缺少microsoft visual c插件 解决方法: 下载 微软VC 地址

Docker——2. Docker基础

1. 常见命令 不用重复使用docker run命令,这是创建容器命令,启动容器应该是docker start; docker ps 查看进程运行状态; docker rmi 删除镜像、rm 删除容器; docker logs 查看日志、docker exec 执行命令进入容器内部&…

19.(vue3.x+vite)v-if和v-for哪个优先级更高

前端技术社区总目录(订阅之前请先查看该博客) v-if和v-for哪个优先级更高 (1)实践中不应该把v-for和v-if放一起,可以包一层template (2)在vue2中,v-for的优先级是高于v-if (3)在vue3中,v-for的优先级是低于v-if 组件代码 <template><div><!--包一…

[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity

文章目录 一、完整代码二、论文解读2.1 介绍2.2 Self-Attention is Low Rank2.3 模型架构2.4 结果 三、整体总结 论文&#xff1a;Linformer: Self-Attention with Linear Complexity 作者&#xff1a;Sinong Wang, Belinda Z. Li, Madian Khabsa, Han Fang, Hao Ma 时间&#…

浏览器输入URL再按下回车会经历哪些过程

目录 前言 一、解析URL 二、解析域名(DNS) 三、TCP三次握手建立连接 1.seq、syn、ack含义 2.三次握手 四、发送http/https请求 五、服务器响应请求 六、浏览器解析渲染页面 七、TCP四次挥手断开连接 总结 前言 看各种面经发现这个问题是一个高频出现的面试问题&#xff0c;但…

每日一题SQL

以下题目来源微信公众号【SQL数据库开发】 1、编写一个 SQL 查询来实现分数排名。如果两个分数相同&#xff0c;则两个分数排名&#xff08;Rank&#xff09;相同。请注意&#xff0c;平分后的下一个名次应该是下一个连续的整数值。换句话说&#xff0c;名次之间不应该有“间隔…

四十五、Redis主从

目录 1、数据同步原理 &#xff08;1&#xff09;全量同步 &#xff08;2&#xff09;增量同步 &#xff08;3&#xff09;优化Redis主从集群 &#xff08;4&#xff09;什么时候执行全量同步 &#xff08;5&#xff09;什么时候执行增量同步 2、流程 1、数据同步原理 &…