【Docker】Docker Consul
docker consul
Docker Consul 是一个用于服务发现和配置的开源工具,它是 HashiCorp 公司推出的一个项目。Consul 提供了一个中心化的服务注册和发现系统,可以帮助开发人员轻松地在 Docker 容器和集群之间进行服务发现和配置管理。
Consul 使用基于 HTTP 的 API 和 DNS 接口来实现服务注册和发现。它提供了一个集中式的服务注册表,可以存储和管理各种不同类型的服务。当一个服务启动时,它会向 Consul 注册自己的元数据和网络地址。其他服务可以通过查询 Consul 来发现注册的服务,并通过元数据了解服务的健康状况和其他相关信息。
除了服务发现外,Consul 还提供了一些其他的功能,例如健康检查、键值存储、事件发布和服务配置。这些功能可以帮助开发人员更好地管理和监控他们的容器和集群。
使用 Docker Consul 可以帮助开发人员构建可扩展的微服务架构,实现容器化应用程序的自动化部署和管理。它可以与 Docker Swarm、Kubernetes 和其他容器调度器集成,提供全面的服务发现和配置管理功能。
!](https://i-blog.csdnimg.cn/direct/11dade3e558f4ec3ac817303983ec5a8.png)
Docker Consul 工作流程
Docker Consul 是一种基于Docker容器的服务发现和配置管理工具。它可以将应用程序的不同组件注册到集群中,并自动发现和管理这些组件之间的连接和依赖关系。
以下是Docker Consul的工作流程:
-
安装和配置:首先需要在主机上安装Docker和Consul。然后,通过创建一个Consul配置文件来定义集群的节点和参数。
-
启动Consul集群:通过在主机上启动Consul容器来创建一个集群。启动多个Consul容器可以形成一个高可用的集群,可以容忍单个节点的故障。
-
注册服务:应用程序的不同组件(例如Web服务、数据库等)可以使用Docker Consul的API将自己注册到集群中。注册时需要提供服务的名称、IP地址和端口等信息。
-
发现服务:其他组件可以使用Docker Consul的API查询已注册的服务。它们可以根据服务的名称或标签来查找服务,并获取服务的IP地址和端口等信息。
-
健康检查:Docker Consul可以周期性地对已注册的服务进行健康检查,以确保它们正常运行。如果一个服务无法提供正常的响应,Consul将从注册表中删除该服务。
-
加载均衡:通过Docker Consul,应用程序可以实现负载均衡。当多个实例的服务被注册时,Consul可以自动将请求分发给这些实例,从而实现负载均衡。
-
配置管理:通过Docker Consul,应用程序可以获取其所需的配置信息。配置信息可以在Consul的Key-Value存储中定义,并根据需要进行更新。
-
事件通知:Docker Consul可以向应用程序发送事件通知,包括服务注册和注销、配置更新等。应用程序可以根据这些事件来做出相应的处理。
总结来说,Docker Consul通过注册、发现、健康检查和配置管理等功能,帮助应用程序实现了服务发现和配置管理的自动化。它可以简化应用程序的部署和扩展过程,并提高应用程序的可用性和可靠性。
1、搭建consul架构
案例环境
主机 | 操作系统 | IP地址 | 主要软件及版本 |
---|---|---|---|
consul | Centos 7 | 192.168.99.130 | Docker 、Consul、Consul-template |
registrator | Centos 7 | 192.168.99.132 | Docker、registrator |
1.1安装Consul
consul:192.168.99.130
安装consul
cd /opt
#放入安装包
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.99.130 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
1.2配置容器服务自动加入nginx集群
registrator:192.168.99.132
1.2.1.安装Gliderlabs/Registrator
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.99.132 \
consul://192.168.99.130:8500
1.2.2.测试服务
测试发现功能是否正常
docker run -itd -p:81:80 --name test-01 -h test01 nginx
docker run -itd -p:82:80 --name test-02 -h test02 nginx
docker run -itd -p:91:80 --name test-03 -h test03 httpd
docker run -itd -p:92:80 --name test-04 -h test04 httpd
1.3验证http和nginx服务是否注册到consul
浏览器192.168.99.130:8500
1.4安装consul-template
192.168.99.130
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin/
1.5配置consul-template
cat > /opt/consul/nginx.ctmpl << EOF
upstream backend {
{{range service "nginx"}}server {{.Address}}:{{.Port}};
{{end}}
}
server {listen 8000;server_name localhost 192.168.99.130;#修改日志路径access_log /var/log/nginx/nginx01.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://backend;}
}
EOF
1.6 部署nginx、启动consul-template
yum install -y gcc pcre-devel zlib-devel
useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz
cd 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/
vim /usr/local/nginx/conf/nginx.conf
......
http {include mime.types;include vhost/*.conf; #添加虚拟主机目录default_type application/octet-stream;
......
#创建虚拟主机目录
mkdir /usr/local/nginx/conf/vhost
#创建日志文件目录
mkdir /var/log/nginx#启动nginx
/usr/local/nginx/sbin/nginx
consul-template -consul-addr 192.168.99.130:8500 -template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/nginx01.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
重开一个consul终端
cat /usr/local/nginx/conf/vhost/nginx01.conf
查看三台nginx容器日志,请求正常轮询到各个容器节点上
registrator:192.168.99.132
docker logs -f test-01
docker logs -f test-02
docker logs -f test-05
……
2、在consul部署nginx,并且部署consul-template实现对两台服务器内的nginx服务进行自动发现,并且可以通过nginx负载均衡
客户端服务器1:n1和n2容器均在同一个network
192.168.99.132
docker network create --subnet=172.20.0.0/16 --driver=bridge mynetwork
docker run -itd -p:88:80 --name test-21 -h test21 --network mynetwork nginx
docker run -itd -p:89:80 --name test-22 -h test22 --network mynetwork nginx
docker logs test-21
docker logs test-22
客户端服务器2:n1和n2在不同的network内
192.168.99.144
/etc/docker/daemon.json
{"insecure-registries": ["192.168.99.130:5000"],"registry-mirrors": ["https://docker.1panel.live"]
}
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.99.144 \
consul://192.168.99.130:8500
docker network create --subnet=172.21.0.0/16 --driver=bridge mynetwork1
docker network create --subnet=172.22.0.0/16 --driver=bridge mynetwork2
docker run -itd -p:90:80 --name test-23 -h test23 --network mynetwork1 nginx
docker run -itd -p:91:80 --name test-24 -h test24 --network mynetwork2 nginx
99.130
cat /usr/local/nginx/conf/vhost/nginx01.conf
相关文章:

【Docker】Docker Consul
docker consul Docker Consul 是一个用于服务发现和配置的开源工具,它是 HashiCorp 公司推出的一个项目。Consul 提供了一个中心化的服务注册和发现系统,可以帮助开发人员轻松地在 Docker 容器和集群之间进行服务发现和配置管理。 Consul 使用基于 HTT…...

diamond安装与使用
1.前言 diamond是一款用于蛋白质和翻译后DNA搜索的序列比对工具,专为大规模序列数据的高性能分析设计。其主要特点包括: - 与BLAST相比,蛋白质和翻译后DNA的成对比对速度快100倍至10000倍。 2. 参考 https://github.com/bbuchfink/diamond …...

flume--数据从kafka到hdfs发生错误
解决: #1.将flume自带的依赖删除 mv /opt/installs/flume1.9/lib/guava-11.0.2.jar /opt/installs/flume1.9/lib/guava-11.0.2.jar.bak #2.将hadoop的依赖发送到flume下 cp /opt/installs/hadoop3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /opt/installs/f…...

Android笔试面试题AI答之Kotlin(14)
文章目录 64. Kotlin中定义函数还是属性场景?使用属性的场景使用函数的场景示例 65. 阐述Kotlin中变量初始化有几种?其中lateinit、by lazy、delegates.notNull有什么区别 ?Kotlin中变量初始化的几种方式lateinit、by lazy、Delegates.notNull的区别 66. Kotlin中…...

博弈论,CF 1600E - Array Game
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1600E - Array Game 二、解题报告 1、思路分析 记最长递增前缀长度为L&a…...

win10安装docker,打包python、java然后centos执行镜像
一、win10安装Docker Desktop docker官网(需要魔法)下载:https://www.docker.com/products/docker-desktop/ 安装方法参考:https://blog.csdn.net/beautifulmemory/article/details/137970794 下载完毕后界面安装,不勾…...

【数据结构入门】二叉树之堆的实现
文章目录 前言一、树1.1 树的概念1.2 树的相关概念 二、二叉树2.1 二叉树的概念2.2 特殊的二叉树2.3 二叉树的性质 三、堆3.1 堆的概念3.2 堆的性质3.3 堆的存储3.4 堆的实现3.4.1 堆的初始化3.4.2 堆的销毁3.4.1 堆向上调整算法3.4.2 堆向下调整算法3.4.3 堆的创建3.4.4 堆的插…...

智能微气候:精准调控背后的算法革命
( 于景鑫 国家农业信息化工程技术研究中心)当人工智能遇见现代农业,会擦出怎样的火花?随着数字农业、智慧农业的蓬勃发展,人工智能技术正以前所未有的速度渗透到农业生产的方方面面。其中,以深度学习为代表的前沿算法,尤其是大语言模型(LLM),正在成为驱…...

eNSP 华为交换机链路聚合
华为交换机链路聚合 链路聚合好处: 1、提高带宽 2、链路冗余 SW_2: <Huawei>sys [Huawei]sys SW_2 [SW_2]vlan batch 10 20 [SW_2]int g0/0/4 [SW_2-GigabitEthernet0/0/4]port link-type access [SW_2-GigabitEthernet0/0/4]port default vl…...

编译器揭秘
从上世纪50年代开始,编程语言五花八门,编译器和解释器层出不穷。此处只列出常见编程语言的编译器和解释器信息,不常见的编程语言有单独文章介绍。 C/C cc 此处代表Unix C编译器,其他平台可能借用cc软链接到真正的C编译器。MSVC 微…...

ubuntu下qt连接mysql出现 QMYSQL driver not loaded
1、首先检查是否重新安装了MySQL的驱动,可以使用命令: sudo apt-get remove libqt5sql5-mysql sudo apt-get install libqt5sql5-mysql 2、重新安装ibmysqlclient-dev即可解决 sudo apt-get remove libmysqlclient-dev sudo apt-get install libmysq…...

html 首行缩进2字符
1. html 首行缩进2字符 1.1. 场景 在Html开发中让一段文字(富文本等)首行缩进两个文字,可能在前面加上8个“ ”,因为过去对CSS不熟悉,这种方法实现虽然比较直接,但是文字多的时候会有很多“ ”充斥在代码中…...

什么是IP?
目录 简介 IP IP协议 IP地址 发展历程 IP地址类型 公有地址 私有地址 IP地址编址方式 A类IP地址 B类IP地址 C类IP地址 D类IP地址 特殊的网址 子网 超网 无类间路由 IP地址的分配 IP地址管理 手工管理模式 DHCP分配IP地址的管理模式 通过交换机管理IP 地址…...

js拖拽交换元素位置
摘要:最近在做会议系统,9宫格小画面要支持拖拽调整顺序,需求已经实现了,简单记录下当时的逻辑处理。 /* 关于拖拽逻辑处理 start */ // 当前在拖动的下标 const curDragIndex useRef<number>(-1); /* 拖拽元素事件* onDragStart_开始* onDragend_结束 */ const handleD…...

在 C++ 中实现自定义容器的实用指南
在 C 中实现自定义容器的实用指南 在 C 编程中,容器是存储和管理数据的基本工具。标准库提供了多种容器,如 std::vector、std::list 和 std::map,但在某些情况下,开发者可能需要实现自定义容器以满足特定需求。本文将详细介绍如何…...

《深入浅出WPF》读书笔记.4名称空间详解
《深入浅出WPF》读书笔记.4名称空间详解 背景 主要讲明名称空间概念,可以理解为命名空间的引用。 xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" 👆如x可以理解为一些列命名空间的引用。 不一一列举,只讲几个特殊的…...

电驱动总成
电驱动总成(Electric Drive Assembly)是电动汽车和混合动力汽车中关键的组成部分,主要负责将电能转化为机械能,以驱动汽车的轮胎。电驱动总成包括多个关键组件,通常可以分为以下几个主要部分: ### 主要组成…...

JavaScript class和正则
正则表达式练习 出生日期 年 月 日 ()表示一个整体 console.log(1909.match(^19\\d{2}$)); console.log(2024.match(^20(([01][0-9])|(2[0-4]))$)); //年 console.log(1909.match(^(19\\d{2})|(20(([01][0-9])|(2[0-4])))$)); // 月 console.log(12.match(^(0[1-9])|(1[0-2])…...

[Linux#42][线程] 锁的接口 | 原理 | 封装与运用 | 线程安全
互斥量 mutex • 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间 内,这种情况,变量归属单个线程,其他线程无法获得这种变量。 • 但有时候,很多变量都需要在线程间共享,这…...

奇异递归Template有啥奇的?
如果一个模版看起来很头痛,那么大概率这种模版是用来炫技,没啥用的,但是CRTP这个模版,虽然看起来头大,但是却经常被端上桌~ 奇异递归模板模式(Curiously Recurring Template Pattern, CRTP)是一…...

每天五分钟深度学习框架pytorch:神经网络工具箱nn的介绍
本文重点 我们前面一章学习了自动求导,这很有用,但是在实际使用中我们基本不会使用,因为这个技术过于底层,我们接下来将学习pytorch中的nn模块,它是构建于autograd之上的神经网络模块,也就是说我们使用pytorch封装好的神经网络层,它自动会具有求导的功能,也就是说这部…...

【办公软件】安全风险 Microsoft 已阻止宏运行,因为此文件的来源不受信任
Excel 2019版本,就出现安全风险 Microsoft 已阻止宏运行 因为此文件的来源不受信任的问题,宏直接就用不了了。 网上的解决方法,文件右键属性->取消安全锁。但存在没有安全锁这个选项。后查询到一个简单的解决方法。 打开Excel表格->文件…...

JavaScript语法基础之流程结构(顺序、选择、循环结构)
目录 1. 流程控制 1.1. 流程控制简介 1.1.1. 顺序结构 1.1.2. 选择结构 1.1.3. 循环结构 1.2. 选择结构:if 1.2.1. 单向选择:if… 1.2.2. 双向选择:if…else… 1.2.3. 多向选择:if…else_if…else… 1.3. 选择结构&#…...

集团数字化转型方案(四)
集团数字化转型方案通过全面部署人工智能(AI)、大数据分析、云计算和物联网(IoT)技术,创建了一个智能化的企业运营平台,涵盖从业务流程自动化、实时数据监控、精准决策支持,到个性化客户服务和高…...

【MySQL索引】索引失效场景
索引失效 1 全值匹配肯定不失效 2 最佳左前缀法则 索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。 3 主键插入顺序 页分裂,建议 让主键具有 AUTO_INCREMENT 4 计算、函数、类型转换(自动或手动)导致…...

基于MATLAB视觉的静态手势识别系统
一、课题介绍及思路 为了丰富手势识别方法的多样性,提高手势识别的正确率,提出了一种基于手势轮廓像素变化的手势识别方法。在Matlab环境下,设计并开发了一个基于视觉的静态手势识别系统。系统主要由两部分组成:手势分割与手势识…...

day02-作业题
一、简答题 请说出方法定义的全格式 访问修饰符 静态修饰符 返回值 方法名(参数列表){方法体;retrun 返回值;}请说出方法重载的概念 在一个类中,可以定义方法名相同,参数列表不相同(参数类型、参数个数或者参数顺序不同)的方法请简述什么是类…...

torch.cuda.set_divice()
我申请了两块GPU,然后看两张显卡的编号 import torch torch.cuda.set_device(0) # 设置当前cuda设备编号为1 print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备import torch torch.cuda.set_device(1) …...

<数据集>RSOD数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:936张 标注数量(xml文件个数):936 标注数量(txt文件个数):936 标注类别数:4 标注类别名称:[aircraft, oiltank, overpass, playground] 序号类别名称图片数框数1air…...

企业高性能web服务器之Nginx
文章目录 Apache经典的web服务端Apache prefork 模型Apache work 模型(适应市场)Apache event 模型 网络I/O网络I/O模型I/O模型网络I/O模型 Nginx架构和安装Nginx源码编译环境准备安装nginx Nginx的平滑升级及版本回滚 Nginx架构和进程Nginx进程结构Ngin…...