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编译器快速介绍 编译过程ÿ…...
如何安装chromadb
下载最新版本的python3.10 因为chromadb需要sqlite3的最小版本是3.35.0 使用如下命令安装 pip install chromadb 安装完毕后在python3的命令行窗口输入 import chromadb 如果不报错代表成功,如果报错sqlite3的最小版本是3.35.0,使用如下方式解决 …...
vue实现把字符串中的所有@内容,替换成带标签的
前言: 目前有个需求是,要把输入框里面的还有姓名高亮。 要求: 1、必须用 v-html ,带标签的给他渲染 2、把字符串中的全部查找出来,替换掉,注意要过滤已经替换好的,不然就是无限循环了 实现方法:…...

「MySQL-00」MySQL在Linux上的安装、登录与删除
目录 一、安装MySQL 0. 安装前请先执行一遍删除操作,把预装或残留的MySQL删除掉 1. 安装yum源 (解决了在哪里找MySQL的问题) 2. 安装哪个版本的MySQL 二、启动和登录MySQL 三、删除MySQL / MariaDB 安装与卸载前,建议先将用户切换…...
8月29-31日上课内容 第五章
第一章...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...