docker consul容器自动与注册

news2024/9/24 13:25:02

微服务(容器)注册与发现:是一种分布式的管理系统,定位服务的方法。
        在传统架构当中,应用程序之间直连到已知服务,设备提供的网络: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同步

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

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

相关文章

关于linux 磁盘占用排查问题

1.关于磁盘 查看整体磁盘占用大小 df -h 2. 先排除mysql 数据大小 查询库的大小 SELECT table_schema AS "Database", ROUND(SUM(data_length index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema…

认识产品经理以及Axure简单安装与入门

目录 一.认识产品经理 1.1.项目团队 1.2.概述 1.3.认识产品经理 1.4.产品经理工作范围 1.5.产品经理工作流程 1.6.产品经理的职责 1.7.产品经理的分类 1.8.产品经理能力要求 1.9.产品工具 1.10.产品体验报告 二.Axure简介 三.应用场景 四.安装与汉化 4.1.安装 4…

Vue3-19-组件-定义和基本使用

组件的定义 个人理解 :1、组件,就是我们把某个功能模块进行封装,在使用时直接引入进行使用,极大的提高了代码的可复用性。2、在vue 中,一个 [.vue] 文件,就是一个组件。3、组件之间存在【引入】 与 【被引…

Vue.js 使用基础知识

Vue.js 是一款用于构建用户界面的渐进式框架,它专注于视图层。Vue.js 不同于传统的 JavaScript 框架,它采用了组件化的开发方式,使得开发者可以更加高效和灵活地构建交互式的 Web 应用程序。 目录 什么是 Vue.js安装 Vue.jsVue 实例模板语法插…

数据分析为何要学统计学(7)——什么问题适合使用t检验?

t检验&#xff08;Students t test&#xff09;&#xff0c;用于通过小样本&#xff08;样本容量n < 30&#xff09;对总体均值水平进行无差异推断。 t检验要求样本不能超过两组&#xff0c;且每组样本总体服从正态分布&#xff08;对于三组以上样本的&#xff0c;要用方差…

获取Java类路径

利用System.getProperty(“java.class.path”)可以获取Java类路径&#xff08;Java class path&#xff09;。 package com.thb;import java.io.IOException;public class Test5 {public static void main(String[] args) throws IOException {System.out.println(System.getP…

MySQL数据库 DDL

目录 一、DDL 二、操作数据库 三、操作表 四、数据类型 五、表操作案例 六、修改表 七、删除表 一、DDL Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 。 二、操作数据库 &#xff08;1&am…

Linux学习第47天:Linux音频驱动试验:能不能?不行也得行。

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 CAN 是目前应用非常广泛的现场总线之一&#xff0c;主要应用于汽车电子和工业领域&#xff0c;尤其是汽车 领域&#xff0c;汽车上大量的传感器与模块都是通过 C…

OceanMind海睿思案例入选第二届中国数据治理年会“DCMM百项优秀案例”

近日&#xff0c;中国电子信息行业联合会在北京成功举办“第二届中国数据治理年会”。 本届大会以“数据强基、智领未来”为主题&#xff0c;汇聚我国数据治理领域的资深专家、学者、企业大咖同台论道&#xff0c;共话数据未来的发展与创新。 中新赛克海睿思作为DCMM3级乙方代…

Python自动化批量篆刻Polygon动物铭文$ANTS

铭文介绍 Polygon马蹄链动物主题铭文 A N T S 总量 2100 w 张&#xff0c;当前还剩余 76 ANTS 总量2100w张&#xff0c;当前还剩余76%&#xff0c;成本很低0.003MATIC一张&#xff0c;可以打了防身。 BRC20比特币铭文生态有RATS老鼠大军&#xff0c;PRC20马蹄有ANTS蚂蚁大军&a…

浅析:智能化视频安全监管系统的设计与实现步骤

关于智能化视频监管方案&#xff0c;小编已经和大家分享了很多&#xff0c;今天就和大家来探讨一下关于智能化视频安全监管系统的设计与实现步骤。 首先需要分析需求。要与使用者和业务部门合作&#xff0c;明确系统的功能和需求&#xff0c;例如&#xff0c;确定监控区域、安…

vsftp 使用虚拟用户 —— 筑梦之路

很久之前写过一遍安装vsftp的文章&#xff1a; CentOS 7 vsftpd服务器搭建记录——筑梦之路-CSDN博客 安装一条命令就可以搞定&#xff0c;这里不再赘述。 配置vsftpd.conf # /etc/vsftpd/vsftpd.conf文件修改以下配置#不允许匿名用户认证 anonymous_enableNO #NO表示所有用…

天猫数据分析(天猫数据查询平台):11月天猫啤酒市场销售数据分析报告

在酒类市场中&#xff0c;被视作“气氛担当”的啤酒&#xff0c;是派对聚会或者自饮场景中的常客&#xff0c;消费人群广泛&#xff0c;如今&#xff0c;啤酒市场已进入存量时代&#xff0c;市场中啤酒的销售也在稳步增长。 鲸参谋数据显示&#xff0c;今年11月份&#xff0c;天…

【Lidar】基于Python格网法计算点云体积(eg.树木体积)

这两天一直不在状态&#xff0c;不是特别想分享文章&#xff0c;所以也没怎么更新。但是代码放在文件里始终不是它的归宿&#xff0c;只有被不断使用它才能进步&#xff0c;才能诠释它的意义。所以今天抽空给大家分享一下如何基于Python利用格网法计算点云的体积&#xff0c;我…

docker的资源限制及容器应用

一、docker资源限制 在使用 docker 运行容器时&#xff0c;一台主机上可能会运行几百个容器&#xff0c;这些容器虽然互相隔离&#xff0c;但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制&#xff0c;那么容器之间会互相影响&#xff0c;小的来说…

解决多卡机器CUDA Error Code 802(CUDA_ERROR_SYSTEM_NOT_READY)

解决多卡机器安装完CUDA后&#xff0c;出现802错误码&#xff1a;Fabric Manager需要和Driver具有完全一致的版本号。 现象 检查 查看service状态&#xff1a; 显示failed&#xff0c;查看nvidia-smi中的Driver版本&#xff1a; 切换版本 sudo yum list installed | grep…

BERT大模型:英语NLP的里程碑

BERT的诞生与重要性 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;大模型标志着自然语言处理&#xff08;NLP&#xff09;领域的一个重要转折点。作为首个利用掩蔽语言模型&#xff08;MLM&#xff09;在英语语言上进行预训练的模型&…

初学python的体会心得20字,初学python的体会心得2000

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;学了python的心得体会200字&#xff0c;初学python的体会心得20字&#xff0c;现在让我们一起来看看吧&#xff01; 本学期&#xff0c;我们学习了杨老师的《python语言程序设计》这门课程&#xff0c;其实早在大一期间…

【每日一题】【12.15】2415.反转二叉树的奇数层

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 2415. 反转二叉树的奇数层https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 今天终于碰到了一个mid题目&#x…

[Unity]关于Unity接入Appsflyer并且打点支付

首先需要去官方下载Appsflyer的UnityPackage 链接在这afPackage 然后导入 导入完成 引入此段代码 using AppsFlyerSDK; using System.Collections; using System.Collections.Generic; using UnityEngine;public class AppflysManager : MonoBehaviour {public static App…