Docker容器化部署Consul集群

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker系列

部署环境

实验场景信息:

软件 版本
主机 CentOS Linux 7 (Core)
内核 3.10.0-1160.15.2.el7.x86_64
docker 20.10.4
Consul镜像 consul:latest -> 1.9.1

通过Docker自动化部署Consul集群

最近一直在学习Consul,因此可能会随时的拉起和销毁Consul集群,因此写了一个简单的脚本,通过Docker拉取consul集群: 创建集群脚本:start_consul_cluster.sh

#!/bin/bash
# 创建数据目录
mkdir /data/consul
docker pull consul
# 以下运行角色为server的agent节点
# 节点1
echo "staring consul_server_1"
docker run -d -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 consul agent -server -bootstrap -ui -node=1 -client='0.0.0.0'
# 查看consul节点名为consul_server_1的运行IP
JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' consul_server_1)"
# 其他两个server角色的节点
for i in 2 3;do echo "starting consul_server_$i" && docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_$i consul agent -server -node=$i  -join=$JOIN_IP;done

# 以下运行角色为client的agent节点
for client in {4..6};do echo "starting consul_server_$client" && docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_$client consul agent -client -node=$client -join=$JOIN_IP -client='0.0.0.0';done
echo "当前集群状态信息"
docker exec consul_server_1 consul members

销毁删除集群delete_consul_cluster.sh,默认不会删除你的数据文件

#!/bin/bash
for i in {1..6};do docker stop consul_server_$i && docker rm consul_server_$i;done
echo "Archiving Data Directory..."
mv /data/consul /data/consul_`date +%F-%H.%M.%S`

使用上面脚本完成consul集群创建之后,可以直接通过角色为server绑定的8500端口访问,此处我们手动添加一个client角色,然后用HTPP API请求试一下:

# 获取leader角色的IP
docker exec consul_server_1 consul members
# 手动创建一个将端口映射到宿主机的角色为client的consul节点
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_7 -p 8510:8500 consul agent -client -node=7 -join=172.17.0.3 -client='0.0.0.0'
# 查看集群节点状态,也可以通过宿主机上的consul二进制管理远程集群。
[root@node1 ~]# consul members -http-addr=192.168.99.3:8500
Node          Address          Status  Type    Build  Protocol  DC   Segment
1             172.17.0.3:8301  alive   server  1.9.1  2         dc1  
2             172.17.0.4:8301  alive   server  1.9.1  2         dc1  
3             172.17.0.5:8301  alive   server  1.9.1  2         dc1  
721d401b9555  172.17.0.6:8301  alive   client  1.9.1  2         dc1  
7966e61b62e0  172.17.0.9:8301  alive   client  1.9.1  2         dc1  
7d83d412ccfe  172.17.0.7:8301  alive   client  1.9.1  2         dc1  
c318470ac6bb  172.17.0.8:8301  alive   client  1.9.1  2         dc1  
[root@node1 ~]# consul members -http-addr=192.168.99.3:8510
Node          Address          Status  Type    Build  Protocol  DC   Segment
1             172.17.0.3:8301  alive   server  1.9.1  2         dc1  
2             172.17.0.4:8301  alive   server  1.9.1  2         dc1  
3             172.17.0.5:8301  alive   server  1.9.1  2         dc1  
721d401b9555  172.17.0.6:8301  alive   client  1.9.1  2         dc1  
7966e61b62e0  172.17.0.9:8301  alive   client  1.9.1  2         dc1  
7d83d412ccfe  172.17.0.7:8301  alive   client  1.9.1  2         dc1  
c318470ac6bb  172.17.0.8:8301  alive   client  1.9.1  2         dc1  

我们在运行节点1的时候将端口映射到宿主机上了,同时开启了Dashboard,此处可以通过hostIP:8500访问即可:

Consul Cluster Dashboard

API测试集群功能

集群维护常用操作

  1. 查看集群Server节点当前的状态
[root@node1 ~]# consul operator raft list-peers -http-addr=192.168.99.3:8510
Node  ID                                    Address          State     Voter  RaftProtocol
1     c1f3c9fe-8552-b507-a88e-2829a6d1e5a6  172.17.0.3:8300  leader    true   3
2     6e400de1-6736-6861-6dc5-96c126c87b73  172.17.0.4:8300  follower  true   3
3     208eb38e-abc7-809c-1571-53b8672e34a6  172.17.0.5:8300  follower  true   3

通过Consul集群的/v1/agent/members接口查看集群成员

[root@node1 ~]# curl --location --request GET 'http://192.168.99.3:8510/v1/agent/members'
[{"Name":"721d401b9555","Addr":"172.17.0.6","Port":8301,"Tags":{"acls":"0","build":"1.9.1:ca5c3894","dc":"dc1","id":"2f036436-03a1-d56a-9e40-ef6d8ed0256d","role":"node","segment":"","vsn":"2","vsn_max":"3","vsn_min":"2"},"Status":1,"ProtocolMin":1,"ProtocolMax":5,"ProtocolCur":2,"DelegateMin":2,"DelegateMax":5,"DelegateCur":4},...]

多数据中心的模拟

构建多数据中心,网络需要满足如下要求:

  1. 所有的Server节点都是互通,否则,基于gossip协议的RPC转发将无法工作。如果服务发现是可以跨数据中心,网络必须能够跨区域之间的路由的IP地址以及。
  2. 如果使用服务发现,那么所有的数据中心都是互通的,或者基于VPN或其他隧道机制是互通的。Consul不能处理VPNaddress rewritting,或者NAT traversal
mkdir /data/dc3
[root@node1 ~]# docker run -d -p 8530:8500 -v /data/dc3:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_dc3_1 consul agent -server -bootstrap -ui -node=consul_server_dc3_1 -datacenter dc3 -client='0.0.0.0'
da5cfc5c4489f586262f0f5698cc7ff5721e9758427342987e04d9f6dc155f3b
[root@node1 ~]# consul members -http-addr 192.168.99.3:8530
Node                 Address           Status  Type    Build  Protocol  DC   Segment
consul_server_dc3_1  172.17.0.11:8301  alive   server  1.9.1  2         dc3  
[root@node1 ~]# docker exec consul_server_dc3_1 consul join -wan 172.17.0.3
Successfully joined cluster by contacting 1 nodes.
[root@node1 ~]# consul members -wan -http-addr 192.168.99.3:8500
Node                     Address           Status  Type    Build  Protocol  DC   Segment
1.dc1                    172.17.0.3:8302   alive   server  1.9.1  2         dc1  
2.dc1                    172.17.0.4:8302   alive   server  1.9.1  2         dc1  
3.dc1                    172.17.0.5:8302   alive   server  1.9.1  2         dc1  
consul_server_dc3_1.dc3  172.17.0.11:8302  alive   server  1.9.1  2         dc3  

Consul Multi Data Center

相关文章
|
23天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
177 77
|
4天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
71 35
|
3天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
9天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
63 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
6天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
53 19
|
15天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
40 3
实战~如何组织一个多容器项目docker-compose
|
9天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
36 4
|
存储 安全 Go
Golang 语言微服务的服务注册与发现组件 Consul
Golang 语言微服务的服务注册与发现组件 Consul
129 0
|
8月前
|
存储 网络协议 数据中心
服务注册中心Consul
服务注册中心Consul
108 1
|
8月前
Consul安装教程和注册
Consul安装教程和注册
86 0

相关产品

  • 容器服务Kubernetes版