当前位置: 首页 > news >正文

docker之 Consul(注册与发现)

目录

 一、什么是服务注册与发现?

二、什么是consul

三、consul 部署

3.1建立Consul服务

3.1.1查看集群状态

3.1.2通过 http api 获取集群信息

3.2registrator服务器

3.2.1安装 Gliderlabs/Registrator

3.2.2测试服务发现功能是否正常

3.2.3验证 http 和 nginx 服务是否注册到 consul

3.3consul-template

3.3.1准备 template nginx 模板文件

3.3.2编译安装nginx

3.3.3配置 nginx

3.3.4配置并启动 template

3.3.5访问 template-nginx

3.3.6增加一个 nginx 容器节点

3.4consul 多节点


黄色背影为重点知识点

 一、什么是服务注册与发现?

服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起初的解决手段是在服务前端负载均衡,这样前端必须要知道所有后端服务的网络位置,并配置在配置文件中。这里就会有几个问题:

  • 如果需要调用后端服务A-N,就需要配置N个服务的网络位置,配置很麻烦
  • 后端服务的网络位置变化,都需要改变每个调用者的配置

既然有这些问题,那么服务注册与发现就是解决这些问题的。后端服务A-N可以把当前自己的网络位置注册到服务发现模块,服务发现就以K-V的方式记录下来,K一般是服务名,V就是IP:PORT。服务发现模块定时的进行健康检查,轮询查看这些后端服务能不能访问的了。前端在调用后端服务A-N的时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。这样的方式就可以解决上面的问题了,前端完全不需要记录这些后端服务的网络位置,前端和后端完全解耦!

二、什么是consul

consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法,用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server 和 client。 每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。

在client模式下,所有注册到当前节点的服务会被转发到server节点,本身是不持久化这些信息。 在server模式下,功能和client模式相似,唯一不同的是,它会把所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。

server-leader是所有server节点的老大,它和其它server节点不同的是,它需要负责同步注册的信息给其它的server节点,同时也要负责各个节点的健康监测。

consul提供的一些关键特性:

  • 服务注册与发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
  • 健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
  • Key/Value存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
  • 多数据中心:无需复杂的配置,即可支持任意数量的区域。

安装consul是用于服务注册,也就是容器本身的一些信息注册到consul里面,其他程序可以通过consul获取注册的相关服务信息,这就是服务注册与发现。

三、consul 部署

3.1建立Consul服务

1. mkdir /opt/consulcp consul_0.9.2_linux_amd64.zip /opt/consulcd /opt/consulunzip consul_0.9.2_linux_amd64.zipmv consul /usr/local/bin///设置代理,在后台启动 consul 服务端consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.23 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
  • -server: 以server身份启动。默认是client。
  • -bootstrap :用来控制一个server是否在bootstrap模式,在一个数据中心中只能有一个server处于bootstrap模式,当一个server处于 bootstrap模式时,可以自己选举为 server-leader。
  • -bootstrap-expect=2 :集群要求的最少server数量,当低于这个数量,集群即失效。
  • -ui :指定开启 UI 界面,这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。
  • -data-dir :指定数据存储目录。
  • -bind :指定用来在集群内部的通讯地址,集群内的所有节点到此地址都必须是可达的,默认是0.0.0.0。
  • -client :指定 consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务,默认是 127.0.0.1。 -node :节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
  • -datacenter :指定数据中心名称,默认是dc1。
netstat -natp | grep consul

启动consul后默认会监听5个端口:

8300:replication、leader farwarding的端口

8301:lan cossip的端口

8302:wan gossip的端口

8500:web ui界面的端口

8600:使用dns协议查看节点信息的端口

3.1.1查看集群状态

#查看members状态
consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.10.23:8301  alive   server  0.9.2  2         dc1#查看集群状态
consul operator raft list-peersconsul info | grep leaderleader = trueleader_addr = 192.168.10.23:8300

3.1.2通过 http api 获取集群信息

curl 127.0.0.1:8500/v1/status/peers 			#查看集群server成员
curl 127.0.0.1:8500/v1/status/leader			#集群 server-leader
curl 127.0.0.1:8500/v1/catalog/services			#注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx			#查看 nginx 服务信息
curl 127.0.0.1:8500/v1/catalog/nodes			#集群节点详细信息

3.2registrator服务器

3.2.1安装 Gliderlabs/Registrator

Gliderlabs/Registrator 可检查容器运行状态自动注册,还可注销 docker 容器的服务到服务配置中心。目前支持 Consul、Etcd 和 SkyDNS2。

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.10.13 \
consul://192.168.10.23:8500

--net=host :把运行的docker容器设定为host网络模式。

-v /var/run/docker.sock:/tmp/docker.sock :把宿主机的Docker守护进程

(Docker daemon)默认监听的Unix域套接字挂载到容器中。

--restart=always :设置在容器退出时总是重启容器。

--ip :刚才把network指定了host模式,所以我们指定ip为宿主机的ip。

consul :指定consul服务器的IP和端口。

3.2.2测试服务发现功能是否正常

docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd	 httpd			#-h:设置容器主机名

3.2.3验证 http 和 nginx 服务是否注册到 consul

3.3consul-template

Consul-Template是基于Consul的自动替换配置文件的应用。Consul-Template是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,可以选择运行 shell 命令执行更新操作,重新加载 Nginx。

Consul-Template可以查询Consul中的服务目录、Key、Key-values 等。这种强大的抽象功能和查询语言模板可以使 Consul-Template 特别适合动态的创建配置文件。例如:创建Apache/Nginx Proxy Balancers 、 Haproxy Backends等。

3.3.1准备 template nginx 模板文件

//在consul服务器上操作

vim /opt/consul/nginx.ctmpl
#定义nginx upstream一个简单模板
upstream http_backend {{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}#定义一个server,监听8000端口,反向代理到upstream
server {listen 8000;server_name localhost 192.168.10.23;access_log /var/log/nginx/kgc.com-access.log;							#修改日志路径index index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;}
}

3.3.2编译安装nginx

2. yum -y install pcre-devel zlib-devel gcc gcc-c++ makeuseradd -M -s /sbin/nologin nginxtar zxvf nginx-1.12.0.tar.gz -C /opt/cd /opt/nginx-1.12.0/./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make -j && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

3.3.3配置 nginx

3. ......http {include       mime.types;include  vhost/*.conf;       				#添加虚拟主机目录default_type  application/octet-stream;......//创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost //创建日志文件目录
mkdir /var/log/nginx//启动nginx
nginx

3.3.4配置并启动 template

4. unzip consul-template_0.19.3_linux_amd64.zip -d /opt/cd /opt/mv consul-template /usr/local/bin///在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。
consul-template --consul-addr 192.168.10.23:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info//另外打开一个终端查看生成配置文件
upstream http_backend {server 192.168.10.13:83;server 192.168.10.13:84;}server {listen 8000;server_name 192.168.10.23;access_log /var/log/nginx/kgc.cn-access.log;index index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;}
}

3.3.5访问 template-nginx

5. docker ps -aCONTAINER ID   IMAGE                           COMMAND                  CREATED       STATUS          PORTS                NAMES9f0dc08956f4   httpd                           "httpd-foreground"       1 hours ago   Up 1 hours      0.0.0.0:89->80/tcp   test-04a0bde07299da   httpd                           "httpd-foreground"       1 hours ago   Up 1 hours      0.0.0.0:88->80/tcp   test-034f74d2c38844   nginx                           "/docker-entrypoint.…"   1 hours ago   Up 1 hours      0.0.0.0:84->80/tcp   test-02b73106db285b   nginx                           "/docker-entrypoint.…"   1 hours ago   Up 1 hours      0.0.0.0:83->80/tcp   test-01409331c16824   gliderlabs/registrator:latest   "/bin/registrator -i…"   1 hours ago   Up 1 hours                        registratordocker exec -it 4f74d2c38844 bash
echo "this is test1 web" > /usr/share/nginx/html/index.htmldocker exec -it b73106db285b bash
echo "this is test2 web" > /usr/share/nginx/html/index.html

浏览器访问:http://192.168.10.23:8000/,并不断刷新。

3.3.6增加一个 nginx 容器节点

(1)增加一个 nginx 容器节点,测试服务发现及配置更新功能。

docker run -itd -p:85:80 --name test-05 -h test05 nginx

//观察 template 服务,会从模板更新/usr/local/nginx/conf/vhost/kgc.conf 文件内容,并且重载 nginx 服务

(2)查看/usr/local/nginx/conf/vhost/kgc.conf 文件内容 。

cat /usr/local/nginx/conf/vhost/kgc.conf
upstream http_backend {server 192.168.10.23:83;:去!server 192.168.10.23:84;server 192.168.10.23:85;server 192.168.10.23:86;}

(3)查看三台 nginx 容器日志,请求正常轮询到各个容器节点上

docker logs -f test-01
docker logs -f test-02
docker logs -f test-05
docker logs -f test-06

3.4consul 多节点

添加一台已有docker环境的服务器192.168.10.14/24加入已有的群集中

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

-enable-script-checks=true :设置检查服务为可用

-datacenter : 数据中心名称

-join :加入到已有的集群中

consul members
Node             Address             Status  Type    Build  Protocol  DC
consul-server01  192.168.10.23:8301  alive   server  0.9.2  2         dc1
consul-server02  192.168.10.14:8301  alive   server  0.9.2  2         dc1consul operator raft list-peers
Node             ID                  Address             State     Voter  RaftProtocol
Node             ID                  Address             State     Voter  RaftProtocol
consul-server01  192.168.10.23:8300  192.168.10.23:8300  leader    true   2
consul-server02  192.168.10.14:8300  192.168.10.13:8300  follower  true   2

相关文章:

docker之 Consul(注册与发现)

目录 一、什么是服务注册与发现? 二、什么是consul 三、consul 部署 3.1建立Consul服务 3.1.1查看集群状态 3.1.2通过 http api 获取集群信息 3.2registrator服务器 3.2.1安装 Gliderlabs/Registrator 3.2.2测试服务发现功能是否正常 3.2.3验证 http 和 ng…...

用NeRFMeshing精确提取NeRF网络中的3D网格

准确的 3D 场景和对象重建对于机器人、摄影测量和 AR/VR 等各种应用至关重要。 NeRF 在合成新颖视图方面取得了成功,但在准确表示底层几何方面存在不足。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 我们已经看到了最新的进展,例如 NVIDIA 的…...

权限提升-Windows本地提权-AT+SC+PS命令-进程迁移-令牌窃取-getsystem+UAC

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的? 后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等 2、以上常见权限获取方法简要归类说明? 后台权限:SQL注入,数…...

深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)

目录 Docker 和 k8s 简介1、kubernetes 组件及其联系1.1 Node1.2 Pod1.3 Service 2、安装docker3、单节点 kubernetes 和 KubeSphere 安装3.1 安装KubeKey3.2 安装 kubernetes 和 KubeSphere3.3 验证安装结果 4、集群版 kubernetes 和 KubeSphere 安装5、kubectl 常用命令6、资…...

Oracle的学习心得和知识总结(二十九)|Oracle数据库数据库回放功能之论文三翻译及学习

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…...

新版100句学完7000雅思单词

新版100句学完7000雅思单词 1. As the medical world continues to grapple with what’s acceptable and what’s not, it is clear that companies must continue to be heavily scrutinized for their sales and marketing strategies.(剑桥雅思6) 随着医学界持续努力解决…...

MATLAB图论合集(三)Dijkstra算法计算最短路径

本贴介绍最短路径的计算,实现方式为迪杰斯特拉算法;对于弗洛伊德算法,区别在于计算了所有结点之间的最短路径,考虑到MATLAB计算的便捷性,计算时只需要反复使用迪杰斯特拉即可,暂不介绍弗洛伊德的实现 迪杰斯…...

MySQL 8.0.xx 版本解决group by分组的问题

因为版本升级5.7版本以下是没有这个问题的,8.0版本以上会出现分组问题 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column test1.sys_t.id which is not functionally dependent on columns in GROUP BY clause; t…...

设计模式—原型模式(Prototype)

目录 一、什么是原型模式? 二、原型模式具有什么优缺点吗? 三、有什么缺点? 四、什么时候用原型模式? 五、代码展示 ①、简历代码初步实现 ②、原型模式 ③、简历的原型实现 ④、深复制 ⑤、浅复制 一、什么是原型模式&…...

【pytorch】Unfold和Fold的互逆操作

1. 参数定义 Unfold https://pytorch.org/docs/stable/generated/torch.nn.Unfold.html#torch.nn.Unfold Fold https://pytorch.org/docs/stable/generated/torch.nn.Fold.html#torch.nn.Fold 注意:参数当中的padding是在四周边补零,而当fold后的尺寸…...

【AI】《动手学-深度学习-PyTorch版》笔记(二十一):目标检测

AI学习目录汇总 1、简述 通过前面的学习,已经了解了图像分类模型的原理及实现。图像分类是假定图像中只有一个目标,算法上是对整个图像做的分类。 下面我们来学习“目标检测”,即从一张图像中找出需要的目标,并标记出位置。 2、边界框 边界框:bounding box,就是一个方…...

畅捷通T+用户中locked勒索病毒后该怎么办?勒索病毒解密数据恢复

Locked勒索病毒是一种近年来在全球范围内引起广泛关注的网络安全威胁程序。它是一种加密货币劫持病毒,专门用于加密用户的数据并要求其支付赎金。Locked勒索病毒通过攻击各种系统漏洞和网络薄弱环节,使用户计算机受到感染并被加密锁定时,无法…...

神仙般的css动画参考网址,使用animate.css

Animate.css | A cross-browser library of CSS animations.Animate.css is a library of ready-to-use, cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and attention-guiding hints.https://animate.style/这里面有很…...

江西抚州新能源汽车3d扫描零部件逆向抄数测量改装-CASAIM中科广电

汽车改装除了在外观方面越来越受到消费者的青睐,在性能和实用性提升上面的需求也是日趋增多,能快速有效地对客户指定汽车零部件进行一个改装,是每一个汽车改装企业和工程师的追求,也是未来消费者个性化差异化的要求。下面CASAIM中…...

数据结构学习 --4 串

数据结构学习 --1 绪论 数据结构学习 --2 线性表 数据结构学习 --3 栈,队列和数组 数据结构学习 --4 串 数据结构学习 --5 树和二叉树 数据结构学习 --6 图 数据结构学习 --7 查找 数据结构学习 --8 排序 本人学习记录使用 希望对大家帮助 不当之处希望大家帮忙纠正…...

探索Kotlin K2编译器和Java编译器的功能和能力

文章首发地址 Kotlin K2编译器是Kotlin语言的编译器,负责将Kotlin源代码转换为Java字节码或者其他目标平台的代码。K2编译器是Kotlin语言的核心组件之一,它的主要功能是将Kotlin代码编译为可在JVM上运行的字节码。 K2编译器快速介绍 编译过程&#xff…...

如何安装chromadb

下载最新版本的python3.10 因为chromadb需要sqlite3的最小版本是3.35.0 使用如下命令安装 pip install chromadb 安装完毕后在python3的命令行窗口输入 import chromadb 如果不报错代表成功,如果报错sqlite3的最小版本是3.35.0,使用如下方式解决 …...

vue实现把字符串中的所有@内容,替换成带标签的

前言: 目前有个需求是,要把输入框里面的还有姓名高亮。 要求: 1、必须用 v-html ,带标签的给他渲染 2、把字符串中的全部查找出来,替换掉,注意要过滤已经替换好的,不然就是无限循环了 实现方法&#xff1a…...

「MySQL-00」MySQL在Linux上的安装、登录与删除

目录 一、安装MySQL 0. 安装前请先执行一遍删除操作,把预装或残留的MySQL删除掉 1. 安装yum源 (解决了在哪里找MySQL的问题) 2. 安装哪个版本的MySQL 二、启动和登录MySQL 三、删除MySQL / MariaDB 安装与卸载前,建议先将用户切换…...

8月29-31日上课内容 第五章

第一章...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

【AI学习】三、AI算法中的向量

在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率&#xff0c…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...