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

目录

什么叫做微服务(容器)注册于发现

docker consul数据流程图

服务注册于发现的优点

什么是consul?

consul的主要特点

Consul部署和服务发现

架构

docker1

docker2

实现管理配置自动化

作用

自动化更新配置文件

配置template并启动

页面访问

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提供了一个分布式锁的功能,协调多个节点之间的操作,防止竞争条件和数据冲突

1、每一个服务的发现和注册都是一个会话session
创建锁   微服务在注册到consul的时候,consul会和这个服务的会话创建一个锁,锁用来标识具体的服务器,会话和锁之间关联
获取锁:微服务2,建立会话,获取锁,如果申请的锁没有被使用,客户端成功获取,如果已经存在,表示已有其他的服务在占用,会给你分配一个新的锁(KV存储)
释放锁:任务完成或者服务断开了连接,会把锁释放,删除会话和锁之间的关系,删除与锁关联的键,实现资源的释放

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

5、多数据中心支持,consul可以在多个地域,可以数据中心之间的发现和注册功能

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

7、事件信息,如有关键信息可以随时获取通知

Consul部署和服务发现

架构

Consul服务器:docker1 20.0.0.31 组件 Consul docker-ce nginx二进制 Consul-temple(自动发现和自动配置)

registrator服务器:docker2 20.0.0.32 运行注册机制和微服务(容器)

Consul服务器:多节点 docker3 20.0.0.33 加入到Consul的集群中

docker1

所有服务关闭防火墙和安全机制
把Consul包拖到opt目录下

mkdir consul
cp consul_0.9.2_linux_amd64.zip /opt/consul
cd /opt/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.31 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

consul agent	开启监听服务
-server	指定集群当中的服务器节点,consul的RAFT算法实现分布式结构中节点的一致性,集群当中的成员,直接成为集群的leader,后续加入的服务器都是follower
-bootstrap	表示该节点是引导节点,引导选举过程,以及为后续加入的server做引导,加入集群
-ui	启动图形化界面
-data-dir=/var/lib/consul-data	consul存储数据的路径
-bind=20.0.0.31	服务端绑定的IP地址,节点当中通信
-client=0.0.0.0	客户端的地址,所有主机都可以和server建立通信(生产中是指定的服务器)
-node=consul-server01	指定consul节点的名称,在集群当中consul节点名称都是唯一的,不可以重复的
& >/var/log/consu.log 混合重定向输出到consul.log
&	后台运行

netstat -antp | grep  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

查看集群的领导者
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
docker2
docker run -d \
--name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.32 \
consul://20.0.0.31:8500


/var/run/docker.sock:/tmp/docker.sock \
docker.sock的是docker守护进程的UNIX的套接字文件,把它映射到容器中,registrator容器可以监听dockerdev所有事件,并且完成自动注册服务
--ip=20.0.0.32 注册在consul的IP地址
consul://20.0.0.31:8500	所有发现的服务都注册到指定server节点

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

docker run -itd -p 82:80 --name tets-2 -h test2 httpd

页面访问

实现管理配置自动化

consul-template

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

作用

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

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

自动化更新配置文件

docker1

cd /opt/consul
vim nginx.ctmpl
upstream test1 {
    {{range service "nginx"}}
    server {{.Address}}:{{.Port}};
        {{end}}
}
server {
    listen 8000;
    server_name localhost 20.0.0.31;
    access_log /var/log/nginx/test1-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;
    }
}
在这个配置当中, {{range service "nginx"}} test1的反向代理的方法会遍历由consul注册的所有服务名称为nginx的服务
server {{.Address}}:{{.Port}}; 将发现和注册的nginx服务的IP地址和端口,添加到test1的upstream的方法当中
安装依赖环境
yum -y install pcre-devel zlib-devel gcc gcc-c++ make


useradd -M -s /sbin/nologin nginx
把nginx的源码包拖到opt目录下
解压
tar 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 && make install


ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

重启服务
查看端口
cd /usr/local/nginx/conf

vim nginx.conf
18行
include  vhost/*.conf;

nginx -t
mkdir /usr/local/nginx/conf/vhost
mkdir /var/log/nginx

nginx -s stop

netstat -antp | grep 80

nignx

netstat -antp | grep 80



配置template并启动
把源码拖到opt目录下
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/

mv consul-template /uar/local/bin

consul-template --consul-addr 20.0.0.31: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.31: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	只要集群中服务发生变化,可以随时更新到配置当中



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

docker2 

docker1

cat /usr/local/nginx/conf/vhost/test.conf 

页面访问

consul的多节点
把Consul包拖到opt目录下

mkdir consul
cp consul_0.9.2_linux_amd64.zip /opt/consul
cd /opt/consul
unzip consul_0.9.2_linux_amd64.zip  
mv consul /usr/local/bin

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


-enable-script-checks=true \	设置检查服务为可用,他也可以发现源集群当中的服务
-datacenter=dc1	加入到31的数据中心
-join 20.0.0.31	加入到已有的集群当中去

页面访问

docker3 同步docker1

docker2


docker run -d \
> --name=registrator1 \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> --ip=20.0.0.32 \
> consul://20.0.0.33:8500

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

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

相关文章

01|LangChain系统安装和快速入门

01|LangChain系统安装和快速入门 什么是大语言模型 大语言模型是一种人工智能模型,通常使用深度学习技术,比如神经网络,来理解和生成人类语言。这些模型的“大”在于它们的参数数量非常多,可以达到数十亿甚至更多&am…

漏洞复现-iDocview doc/upload接口存在任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

虾皮Shopee商品详情API:电商实时数据获取的关键

随着互联网的普及和电子商务的快速发展,电商行业已经成为全球范围内最具影响力和前景的产业之一。在电商行业中,商品详情API接口是实现快速、准确获取商品信息的关键技术之一。本文将介绍获得虾皮Shopee根据ID取商品详情 API在电商行业里的重要性&#x…

通话状态监听-Android13

通话状态监听-Android13 1、Android Telephony 模块结构2、监听和广播获取通话状态2.1 注册2.2 通话状态通知2.3 通话状态 3、通知状态流程* 关键日志 frameworks/base/core/java/android/telephony/PhoneStateListener.java 1、Android Telephony 模块结构 Android Telephony…

智能水印相机微信小程序源码 简单易上手

水印相机前端源码,该程序无需后端支持,只需直接导入前端即可使用,未添加流量主功能,如有需要可自行开通并添加。 请注意在小程序后台进行隐私权限设置,用户需授权后才能使用。 利用真实的时间和地点信息拍摄照片&…

〖Python网络爬虫实战㊸〗- 极验滑块介绍(五)

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,订阅本专栏前必读关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明作者&#xff1…

一级浪涌保护器的行业应用解决方案

一级浪涌保护器是防雷系统中最重要的一环,它主要用于建筑物总配电柜、低压变压器进线柜等位置,防止浪涌电压直接从外部传导进入内部,使系统设备免遭雷击损坏。一级浪涌保护器的规范要求、应用、作用和原理以及国标,本文将分别进行…

隆道姚锐:数字技术赋能企业采购和供应链管理

12月15日,“2023龙江数实融合发展大会”在黑龙江省哈尔滨市举办,北京隆道网络科技有限公司总裁助理姚锐出席本次会议的“数字生物医药创新发展论坛”,并分享以数字技术赋能企业采购和供应链管理的实践经验。 本届大会以“聚数智力量 创万物互…

智能优化算法应用:基于风驱动算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于风驱动算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于风驱动算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.风驱动算法4.实验参数设定5.算法结果6.参考文…

Domino 14.0消灭密码(一)

大家好,才是真的好。 今天的篇幅会有点长,因为涉及到的概念有点多,总而言之就是为了安全系统登陆为目的,来讲述Domino 14中的新功能:无密码登录。 需求要从很早的时候说起,在网络中为了保证安全和识别用户…

如何搭建企业管理系统Odoo并远程访问管理界面【内网穿透】

文章目录 前言1. 下载安装Odoo:2. 实现公网访问Odoo本地系统:3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件,是一个一站式全功能ERP及电商平台。 开源性质:Odoo是一个开源的ERP软件,这意味着企…

chatchat知识库对话接口修改成sse流式输出方案

在chatchat结合chatGLM搭建的私有化知识库中,使用原生的webUI画面是可以流式输出的,而直接调用api接口,不管stream为true还是false,都是阻塞式输出的,也就是一口气返回给接口。 我们的解决方案是修改StreamingRespons…

【面向对象】C++/python/java的多态比较

一、面向对象的主要特点 封装:封装是把数据和操作数据的方法绑定在一起,对数据的访问只能通过已定义的接口。这可以保护数据不被外部程序直接访问或修改,增强数据的安全性。继承:继承是一种联结类的层次模型,并且允许…

记录 | 安装Qt6的方法

安装 Qt6 的方法 # 安装依赖 sudo apt install libxcb-xinerama0清华源 Qt6 下载器链接: https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/qt-unified-linux-x64-online.run # 安装 > 用下面的命令 ./qt-unified-linux-x64-onli…

设计模式-单例设计模式详解

生命无罪,健康万岁,我是laity。 我曾七次鄙视自己的灵魂: 第一次,当它本可进取时,却故作谦卑; 第二次,当它在空虚时,用爱欲来填充; 第三次,在困难和容易之…

如何在Windows系统上部署VisualSVN并实现远程访问管理界面【内网穿透】

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

如何将文档秒变仿真翻页电子书

文档太多,存放起来又乱的朋友们,可以看看这个方法能不能帮助你。将文档里的图片或是PPT、Word等一键转换成仿真翻页的电子书。既不占内存,客户也能方便观看各种信息等。 先看看我制作的仿真翻页电子书的效果吧! 怎么样&#xff1…

七、 Shell 变量名规范

在 Shell 编程中,变量是用于存储和引用数据值的名称。 定义变量时,变量名不需要添加美元符号($),如: my_name"chaoqing" 注意,变量名和等号之间不能有空格,同时需要遵守…

vue3 使用 element-plus 侧边菜单栏多开收起时 出现 迟滞、卡顿的问题

遇到问题 vue3 使用 element-plus 侧边菜单栏多开收起时 出现 迟滞、卡顿的问题 这里多开二级,当点击上面的回收时,出现了卡顿现象,找了很久才发现是因为引入了icon图标 具体原因不详!!!!坑啊 …

XUbuntu22.04之Wx公众号排版工具mdx-editor(二百)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…