docker consul容器自动与注册

微服务(容器)注册与发现:是一种分布式的管理系统,定位服务的方法。
        在传统架构当中,应用程序之间直连到已知服务,设备提供的网络:IP地址,基于tcp/ip,端口;在现代的服务部署,服务的动态性,数量增加,传统的基于IP+端口的形式已经不太适用。
        服务注册以及发现:微服务的位置信息(ip+端口+健康状态)统一注册到一个中心化的服务注册表中,可以允许其他服务动态的查询和发现这些服务。

数据流程图

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

服务注册与发现和其他工具配合使用,负载均衡,健康检测,配置管理(一键同步)。微服务架构中非常重要的组件。

服务注册于发现的优点:

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

consul

consul:服务自动注册和发现的。
consul时HashiCrop公司开发的一套工具,主要用于服务发现与注册,配置管理,分布式的协调协调。


consul的主要特点:

1、服务自动注册和发现,位置信息(ip和端口+服务名称+健康状态)
2、健康检测,服务注册到consul,一旦加入系统的还有他的健康状态,定期发送一个心跳检查,如果服务挂了,consul会自动移除。
3、分布式锁: consul提供了一个分布式锁的功能,协调多个节点之间的操作,放在竞争条件和数据冲突。

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

4、KV存储:key-value分布式键值对存储系统,存储配置信息、锁、服务的特性。应用程序可以使用consul的键值对信息来动态地获取配置信息。
5、多数据中心注册:可以部署在多个低于部署,可以数据中心的发现和注册功能。
6、DNS和HTTP API:通过域名解析定位服务位置。http api:通过api用于接口,可以调用consul的信息。服务信息,健康检查等等。
7、时间通知,如有关键信息可以随时通知。

查看集群server成员

curl 127.0.0.1:8500/v1/status/peers

集群 server-leader

curl 127.0.0.1:8500/v1/status/leader

注册的所有服务

curl 127.0.0.1:8500/v1/catalog/services

查看 nginx 服务信息

curl 127.0.0.1:8500/v1/catalog/nginx

集群节点详细信息

curl 127.0.0.1:8500/v1/catalog/nodes

consul的部署和发现

consul服务器docker1 192.168.10.201consul docker-ce nginx 进制 consul-template (自动发现和自动配置)
registrator服务器docker2 192.168.10.202运行注册机制和微服务(容器)
consul服务器···多节点 docker3 192.168.10.204(加入到consul的集群中)

192.168.10.201

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

consul agent: 启动 Consul Agent。

-server: 指定该节点是 Consul 集群中的服务器节点。Consul 使用 Raft 算法来实现分布式一致性,服务器节点是集群的成员。

-bootstrap: 表示该服务器节点是引导节点(bootstrap)。在集群的启动阶段,需要有一个引导节点,
它将启动 Raft 领导者选举过程。在生产环境中,通常只有一个服务器节点配置为引导节点。在引导完成后,其他服务器节点会加入集群。

-ui: 启动 Consul 的用户界面(UI),使你可以通过浏览器访问 http://192.168.233.40:8500 来查看和管理 Consul 的状态和配置。

-data-dir=/var/lib/consul-data: 指定 Consul 存储数据的目录路径。

-bind=192.168.233.40: 指定 Consul 绑定的 IP 地址。该地址用于节点间的通信。

-client=0.0.0.0: 允许所有 IP 地址的客户端连接到 Consul。这是一个开发或测试环境中的设置。
在生产环境中,通常会限制只允许特定 IP 地址的客户端连接。

-node=consul-server01: 指定 Consul 节点的名称。每个节点在集群中都有唯一的名称。

&> /var/log/consul.log: 将 Consul 的日志输出到 /var/log/consul.log 文件中。

&: 在后台运行 Consul Agent。
启动consul后默认会监听5个端口:
8300: 用于Raft协议的端口。Consul使用Raft算法进行分布式一致性,这个端口用于处理复制、领导者选举等。

8301: 用于LAN Gossip的端口。LAN Gossip是Consul中用于在局域网内进行节点间通信和信息传播的协议。

8302: 用于WAN Gossip的端口。WAN Gossip用于在广域网(WAN)中进行节点间的通信和信息传播。

8500: 用于Web UI的端口。Consul提供一个用户界面,可以通过这个端口访问,用于可视化地查看和管理Consul的集群状态。

8600: 用于DNS查询的端口。Consul提供DNS接口,可以通过这个端口进行DNS查询,以获取节点和服务的信息。

192.168.10.202

docker run -d \
--name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.10.202 \
consul://192.168.10.201:8500

docker run -itd -p 81:80 --name test-1 -h test1 nginx
docker run -itd -p 82:80 --name test-2 -h test2 httpd

consul-template

192.168.10.201

consul operator raft list-peers
curl 127.0.0.1:8500/v1/catalog/services

配置template nginx模板文件

upstream http_backend {
  {{range service "nginx"}}
   server {{.Address}}:{{.Port}};
   {{end}}
}
server {
    listen 8000;
    server_name localhost 192.168.10.201;
    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;
    }
}

安装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/

//创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost

//创建日志文件目录
mkdir /var/log/nginx

//启动nginx
nginx


4. 配置并启动 template
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/

consul-template --consul-addr 192.168.10.201:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info

创建容器

docker run -itd -p 84:80 --name test-4 -h test4 nginx

查看轮询

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

consul多节点

192.168.10.204

mkdir /opt/consul
cp consul_0.9.2_linux_amd64.zip /opt/consul
cd 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=192.168.10.204 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.10.201 &> /var/log/consul.log &

加入集群

docker run -d \
--name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.10.202 \
consul://192.168.10.201:8500

实现与01同步

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

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

相关文章

Apache Flume(4):日志文件监控

1 案例说明 企业中应用程序部署后会将日志写入到文件中,可以使用Flume从各个日志文件将日志收集到日志中心以便于查找和分析。 2 使用Exec Soucre Exec Source Exec Source通过指定命令监控文件的变化,加粗属性为必须设置的。 属性名默认值说明chan…

借助文档控件Aspose.Words,在Java中比较 Word、PDF 和 PPT 文档

文档比较是各个领域的一项关键任务,包括法律、出版和内容管理。它确保准确跟踪和审查对合同、报告或法律协议等文档的更改。Java 开发人员经常寻求高效可靠的方法来执行文档比较,而Aspose提供了强大的解决方案。在这篇博文中,我们将探讨如何高…

npm详解

NPM(Node Package Manager)是Node.js的包管理工具,用于管理和共享被发布到模块仓库的JavaScript代码. NPM的定义 NPM是Node.js的默认包管理工具,它的功能包括安装、管理、卸载和发布开源模块。NPM提供了一个模块仓库,开…

牛客网BC100有序序列合并

思路: 运用归并排序: 假设给定我们两个都是升序的数组,要求我们要把这两个数组以升序的方式合并到一个数组中,则我们就可以在这两个数组中分别各拿取一个元素进行比较,将二者之间较小值先放在这个新数组中&#xff0c…

记一次clickhouse启动报错

clickhouse一次排错 clickhouse启动报错 报错: Application: Code: 210. DB::Exception: Listen [::]:8123 failed: Poco::Exception. Code: 1000, e.code() 0, DNS error: EAI: Address family for hostname not supported (version 23.3.1.2823 (official bui…

一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程

MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结…

腾讯科技Hi Tech Day暨2023数字开物大会:智能涌现将通往无数的未来

腾讯科技讯 12月14日,以“智能涌现 数开万物”为主题的腾讯科技Hi Tech Day暨2023数字开物大会在北京国家会议中心召开,腾讯科技邀请知名院士、知名经济学家、知名大学教授、研究院院长、产业大咖、互联网大厂高管、知名科技领域头部企业高管、产业数字化…

网络协议 - UDP 协议详解

网络协议 - UDP 协议详解 UDP概述UDP特点UDP的首部格式UDP校验 參考文章 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解。 UDP概述 UDP(User Datagram Protocol)即用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种…

【Spark精讲】Spark与MapReduce对比

目录 对比总结 MapReduce流程 ​编辑 MapTask流程 ReduceTask流程 MapReduce原理 阶段划分 Map shuffle Partition Collector Sort Spill Merge Reduce shuffle Copy Merge Sort 对比总结 Map端读取文件:都是需要通过split概念来进行逻辑切片&…

dbeaver导出数据为excel格式

dbeaver导出excel 目前数据的可选择只有这几种 恰好没有我们需要的excel模式,而我们需要数据一般都需要excel的 所以我们可以通过以下步骤得到我们的excel格式的数据集: 1.直接选csv模式,至于csv有陌生的小伙伴可以理解:CSV(Comma-Separated Values)是…

同时获取el-select的label和value

ui如下: 需求如下: 在点击确认的时候,将id和name都传给一个接口,但是ui只用展示name,name用v-model绑定给input框,但是id不知道怎么传给后端。 解决方法如下: vue中elementUi的el-select同时…

解决kernel32.dll丢失的修复方式,kernel32.dll预防错误的方法

kernel32.dll文件是电脑中的一个重要文件,如果电脑出现kernel32.dll丢失的错误提示,那么电脑中的一些程序将不能正常使用,那么出现这样的问题有什么解决办法呢?那么今天就和大家说说解决kernel32.dll丢失的修复方式。 一.kernel32…

MySql踩坑记录 DATE_FORMAT函数

使用场景:进行某一日期范围内的数据查询 查询结果:空,查询不到符合条件的数据。 Sql展示: SELECTa.dt_plan AS planDate,a.sd_status AS planStatus FROMc_hpl_plan a WHEREa.id_phr 6576727112f1a21849639530 -- 第一种写法…

STM32 寄存器配置笔记——I2C 读写AT24C02 EEPROM

一、简介 本文主要介绍STM32F10xx系列如何使用软件模拟I2C总线读写AT24C02的EEPROM数据。 二、概述 I2C协议是一种用于同步、半双工、串行总线(由单片机时钟线、单数据交换器数据线组成)上的协议。规定了总线空闲状态、起始条件、停止条件、数据有效性、字节格式、响应确认信号…

c# 为什么修改Font导致Location 变化

搜索引擎、各种人工智能,只有这个帮我解决了问题 然后我发现了这个 我就奇怪,一行行调试代码,最终发现设置Font,Location就变了,完全想不通

Linux 创建分区

要求 分一个区就行,用 ext4 文件系统,挂到 /data 目录。 查看 lsblk sdb 没有分区 创建分区 [rootlocalhost ~]# ll /dev/sd* brw-rw----. 1 root disk 8, 0 2月 27 15:10 /dev/sda brw-rw----. 1 root disk 8, 1 2月 27 15:10 /dev/sda1 brw-rw-…

【vue】jenkins打前端包时报错:第 8 行:cd: dist: 没有那个文件或目录

问题描述 jenkins打前端包时报错:第 8 行💿 dist: 没有那个文件或目录 Jenkins中 “Execute shell” 配置的脚本: echo $PATH node -v npm -v npm config set registry http://ued.edtsoft.com/ npm install npm run build:prod cd dist rm…

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

PostgreSQL向量数据插件--pgvector安装 一、版本二、数据库安装1. 在官网下载PostgreSQL14.0的安装包2.增加用户postgres3.解压安装 三、pgvector安装1. 从github上克隆下来2. 安装pgvector插件3. 开始使用pgvector启用pgsql命令行创建扩展 本文为本人在安装pgvector中踩过的坑…

Github2023-12-15 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-15统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3非开发语言项目3JavaScript项目1Python项目1Rust项目1PHP项目1 基于项目的学习 创建周期&am…

【通用】Linux,VSCode,IDEA,Eclipse等资源相对位置

正文 不论是 IDEA、Linux、VSCode、cmd等等吧,都遵循这个规则: 如果以斜杠开头,表示从根开始找: IDEA的根是classpath(classpath就是项目被编译后,位于 target下的 classes文件夹,或者位于ta…