基于 Docker 搭建 Consul 多数据中心集群
本文介绍了在 Windows 10 上基于 Docker 搭建 Consul 多数据中心集群的步骤,包括 Consul 镜像的拉取和容器的创建,每个数据中心对应服务端节点和客户节点的创建,节点之间相互加入组成集群,数据中心之间进行关联。多数据中心集群建立之后,通过 Consul 提供的 WEB UI 可以对集群中每个节点健康状况和服务的监控。最后列出了几个常用的命令,用于查看数据中心和节点的状态,以及对节点进行一些操作。
1 准备工作
1.1 环境说明
操作系统:Windows 10
Docker:V18.06.1-ce, build e68fc7a
Consul:V1.2.2
1.2 准备环境
1.2.1 安装 Docker
在 Windows 10 中下载 Docker 并进行安装,安装过程请参考其他教程。
注意:
1、请确认你的 Windows 10 支持虚拟化(CPU 支持 VMX 指令集);
2、后面所述的集群搭建过程中,有些步骤不适用于其他版本的 Windows 系统,即使你安装的是 Docker Toolbox;
1.2.2 拉取 Consul 镜像
Docker 安装成功后,我们使用 Windows PowerShell 来拉取 Consul 镜像,你也可以使用其他任何命令行工具。
docker pull consul
2 搭建数据中心(dc1)
2.1 节点1
docker run -d -p 8500:8500 --name node1 consul agent -server -bootstrap-expect 3 -data-dir=/tmp/consul -client="0.0.0.0" -ui
启用 WEB UI,并将端口映射到 8500,方便通过 WEB 的方式查看群集状态,默认数据中心为 dc1
。
为了后续创建的节点能够加入到该节点,我们先获取节点 node1
的 IP 地址并绑定到 JOIN_IP
变量:
JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"
上述命令在 Windows 10 的 PowerShell 下运行时会报以下错误:
PS C:\Users\Administrator> JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"
JOIN_IP=$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1) : 无法将“JOIN_IP=$(docker inspect -f '{{.NetworkSe
ttings.IPAddress}}' node1)”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路
径正确,然后再试一次。
所在位置 行:1 字符: 1
+ JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (JOIN_IP=$(docke...dress}}' node1):String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
我们直接使用以下命令查看 node1
的 IP 地址:
docker inspect -f '{{.NetworkSettings.IPAddress}}' node1
PS C:\Users\Administrator> docker inspect -f '{{.NetworkSettings.IPAddress}}' node1
172.17.0.2
2.2 节点2
docker run -d --name node2 consul agent -server -join 172.17.0.2
如果 JOIN_IP
绑定成功,则可以使用以下命令创建:
docker run -d --name node2 consul agent -server -join $JOIN_IP
2.3 节点3
docker run -d --name node3 consul agent -server -join 172.17.0.2
2.4 节点4
docker run -d --name node4 consul agent -server -join 172.17.0.2
接下来查看一下数据中心 dc1
的节点
docker exec node1 consul members
PS C:\Users\Administrator> docker exec node1 consul members
Node Address Status Type Build Protocol DC Segment
227adc80c8e4 172.17.0.3:8301 alive server 1.2.2 2 dc1 <all>
d22c4d8ccc50 172.17.0.2:8301 alive server 1.2.2 2 dc1 <all>
e78cba259433 172.17.0.4:8301 alive server 1.2.2 2 dc1 <all>
f05abd19bb5f 172.17.0.5:8301 alive server 1.2.2 2 dc1 <all>
3 搭建数据中心(dc2)
3.1 节点5
docker run -d --name node5 consul agent -server -bootstrap-expect 2 -datacenter=dc2
使用以下命令查看 node5 的 IP 地址:
docker inspect -f '{{.NetworkSettings.IPAddress}}' node5
3.2 节点6
docker run -d --name node6 consul agent -server -datacenter=dc2 -join 172.17.0.6
注意一定要加上 -datacenter=dc2
,不然不能加入数据中心2
3.3 节点7
docker run -d --name node7 consul agent -server -datacenter=dc2 -join 172.17.0.6
3.4 节点8
这里我们添加一个客户端节点,注意没有 -server
参数。一个数据中心 Consul 一般建议 3~5 个 Server 节点,而客户端节点并没有限制,你可以添加数万个节点都没有问题。
docker run -d --name node8 consul agent -datacenter=dc2 -join 172.17.0.6
接下来我们查看一下数据中心 dc2
的节点:
docker exec node5 consul members
PS C:\Users\Administrator> docker exec node5 consul members
Node Address Status Type Build Protocol DC Segment
19ee3676f49b 172.17.0.6:8301 alive server 1.2.2 2 dc2 <all>
7859fe7002fe 172.17.0.7:8301 alive server 1.2.2 2 dc2 <all>
fce88e9c0ffc 172.17.0.8:8301 alive server 1.2.2 2 dc2 <all>
318fa22df7c9 172.17.0.9:8301 alive client 1.2.2 2 dc2 <default>
4 关联数据中心
这里我们选择数据中心2的节点 node5
关联到数据中心1中 IP 地址为 172.17.0.2 的 node1
节点,你也可以选择其他节点进行关联,只要这两个节点分别位于两个数据中心即可。
docker exec node5 consul join -wan 172.17.0.2
看到以下信息说明关联数据中心成功
PS C:\Users\Administrator> docker exec node5 consul join -wan 172.17.0.2
Successfully joined cluster by contacting 1 nodes.
5 在 WEB 界面查看
在浏览器中访问 http://127.0.0.1:8500
地址,即可看到所有的服务和节点,还可以通过切换数据中心查看其下的服务和节点,点击每个节点可以进一步查看具体节点的健康状况、运行的服务以及响应时间等信息。
6 常用命令
6.1 列出数据中心
docker exec node5 consul catalog datacenters
PS C:\Users\Administrator> docker exec node5 consul catalog datacenters
dc2
dc1
6.2 列出节点
docker exec node5 consul catalog nodes
PS C:\Users\Administrator> docker exec node5 consul catalog nodes
Node ID Address DC
19ee3676f49b 8f6b15db 172.17.0.6 dc2
318fa22df7c9 3d1d2c28 172.17.0.9 dc2
7859fe7002fe d49c88c2 172.17.0.7 dc2
fce88e9c0ffc fca52e5e 172.17.0.8 dc2
可以将 node5
换成其他节点名称,该命令会列出指定节点所在数据中心的所有节点。
6.3 移除节点
docker exec node8 consul operator raft remove-peer -id=172.17.0.9:8301
(该命令没有运行成功,先记录一下。)
6.4 查询群集中所有的 LAN 和 WAN 的 Server 节点
docker exec node5 consul members -wan
PS C:\Users\Administrator> docker exec node5 consul members -wan
Node Address Status Type Build Protocol DC Segment
19ee3676f49b.dc2 172.17.0.6:8302 alive server 1.2.2 2 dc2 <all>
227adc80c8e4.dc1 172.17.0.3:8302 alive server 1.2.2 2 dc1 <all>
7859fe7002fe.dc2 172.17.0.7:8302 alive server 1.2.2 2 dc2 <all>
d22c4d8ccc50.dc1 172.17.0.2:8302 alive server 1.2.2 2 dc1 <all>
e78cba259433.dc1 172.17.0.4:8302 alive server 1.2.2 2 dc1 <all>
f05abd19bb5f.dc1 172.17.0.5:8302 alive server 1.2.2 2 dc1 <all>
fce88e9c0ffc.dc2 172.17.0.8:8302 alive server 1.2.2 2 dc2 <all>
其中 `node5`` 可以换成关联数据中心中的其他任意节点名称
6.5 查看集群状态
docker exec node5 consul operator raft list-peers
PS C:\Users\Administrator> docker exec node5 consul operator raft list-peers
Node ID Address State Voter RaftProtocol
19ee3676f49b 8f6b15db-8b15-0853-390a-d0f71f7bb61f 172.17.0.6:8300 leader true 3
7859fe7002fe d49c88c2-744b-556f-f709-45c252158b7c 172.17.0.7:8300 follower true 3
fce88e9c0ffc fca52e5e-8d69-82c1-ae1e-dba9718d1e41 172.17.0.8:8300 follower true 3
可以添加 -stale
参数查看旧的集群状态
基于 Docker 搭建 Consul 多数据中心集群的更多相关文章
- 基于Docker的Consul服务发现集群搭建
在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...
- 一台虚拟机,基于docker搭建大数据HDP集群
前言 好多人问我,这种基于大数据平台的xxxx的毕业设计要怎么做.这个可以参考之前写得关于我大数据毕业设计的文章.这篇文章是将对之前的毕设进行优化. 个人觉得可以分为两个部分.第一个部分就是基础的平台 ...
- 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现
庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介 在第七篇文章<庐山真面目之七微服务架构Consul ...
- ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建
ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...
- Docker搭建MySQL的PXC集群
原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...
- 基于docker实现redis高可用集群
基于docker实现redis高可用集群 yls 2019-9-20 简介 基于docker和docker-compose 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫 ...
- centos7环境搭建Eureka-Server注册中心集群
目的:测试和线上使用这套独立的Eureka-Server注册中心集群,目前3台虚拟机集群,后续可直接修改配置文件进行新增或减少集群机器. 系统环境: Centos7x64 java8+(JDK1.8+ ...
- 基于 ZooKeeper 搭建 Spark 高可用集群
一.集群规划 二.前置条件 三.Spark集群搭建 3.1 下载解压 3.2 配置环境变量 3.3 集群配置 3.4 安装包分发 四.启 ...
- Spark学习之路(七)—— 基于ZooKeeper搭建Spark高可用集群
一.集群规划 这里搭建一个3节点的Spark集群,其中三台主机上均部署Worker服务.同时为了保证高可用,除了在hadoop001上部署主Master服务外,还在hadoop002和hadoop00 ...
随机推荐
- 【软件安装】CentOS7_直播服务搭建_nginx_nginx-http-flv-module
1.介绍 nginx-http-flv-module是在nginx-rtmp-module基础上开发的一个直播模块. 感谢Arut创造了nginx-rtmp-module,它是Nginx的一个优秀的第 ...
- Arctic Code Vault Contributor 上榜了 go-admin v1.1 beta 版本发布
Arctic Code Vault Contributor 上榜了,内心比较喜悦,谢谢开源社区的支持,也谢谢广大 coder 的支持: go-admin 是一个基于 Gin + Vue + Eleme ...
- 太慢不能忍!CPU又拿硬盘和网卡开刀了!
总线技术 我是CPU一号车间的阿Q,最近为了一件事儿搞得我挺烦的. 当初我们CPU工厂刚刚来到主板上建厂时,那时候主板上的单位还不多,跟我们打交道最多的就是内存那家伙了. 后来,键盘.鼠标.硬盘.网卡 ...
- JAVA集合三:几种Set框架
参考链接: HOW2J.CN HashSet简单讲解 HashSet HashSet与C++STL中Set基本类似,具有的特点便是: 集合中元素不可重复 集合中元素顺序 ≠ 插入顺序 常用方法 功能 ...
- eclipse导入项目出现红叉
转载:原博客 导入web项目有红叉时可能是path环境不支持需要配置自己电脑的path,所以需要build path 出现java代码错误或者…jsp文件出错(https://img-blog.csd ...
- 015.Nginx重定向
一 重定向概述 1.1 重定向介绍 重定向(Redirect)指通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向.域名的重定向.路由选择的变化也是对数据报文经由路径的一种重定向). ...
- 题解 CF785E 【Anton and Permutation】
考虑用分块解决这个题,一次交换对当前逆序对个数的影响是,加上两倍的在区间\([l+1,r-1]\)中比\(a_r\)小的元素个数,减去两倍的在区间\([l+1,r-1]\)中比\(a_l\)小的元素个 ...
- .net core 自带分布式事务的微服务开源框架JMS
事务的统一性是微服务的一个重点问题,简洁有效的控制事务,更是程序员所需要的.JMS的诞生,就是为了更简单.更有效的控制事务. 先看一段调用微服务的代码: using (var ms = new JMS ...
- 手动触发浏览器resize
今天做echarts图表 发现饼图不能居中,resize之后才会居中. 于是想手动触发resize方法,但是不改变浏览器窗口 JQ $(window).trigger('risize'); JS ...
- 【vagrant】第一次安装添加box报错:The box failed to unpackage properly....
报错信息 The box failed to unpackage properly. Please verify that the box file you're trying to add is n ...