在Docker中配置Consul集群

Posted 李公子lm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Docker中配置Consul集群相关的知识,希望对你有一定的参考价值。

Docker中部署Consul集群

在微服务架构中,为了保证各个节点的高可用,最常用的做法就是集群,服务实例做集群, 网关,服务发现等也需要做集群,接下来就来实践一下,在Docker中给Consul做集群。
在这里插入图片描述
部署之前,先来了解一下Consul的集群,Consul中分为Client节点和Server节点,Client节点数量无限制,Server节点需要大于等于3个,这样才可以通过投票选举算法选出Leader,由Leader节点负责数据的同步,若Leader节点挂了,则会在剩下的两个节点继续用投票选举算法选出Leader,若Leader再挂了,只剩下一个节点,则无法在投票了,集群崩溃。

正常在配置Consul集群之后,Consul也是有多个Ip和端口的,Api Geteway也不知道该调用哪一个,所在在Api Gateway和Consul之间,还需要用nginx做路由转发,图如下,本篇内容不涉及那么多,只部署下Consul的集群,以及演示下基于consul 的分布式存储。
在这里插入图片描述
下载Consul的镜像,命令如下

docker pull consul

在这里插入图片描述

接下来开始启动容器。
启动Node1(Server)

docker run --name node1 -d \\
-p 8500:8500 \\
-p 8300:8300 \\
-p 8301:8301 \\
-p 8302:8302 \\
-p 8600:8600  \\
--restart=always  consul agent  -server \\
-bootstrap-expect 3 -ui \\
-bind=0.0.0.0 -client=0.0.0.0

打印node1的IP地址。

docker inspect --format '{{.NetworkSettings.IPAddress}}' node1
docker inspect --format '{{.NetworkSettings.IPAddress}}' node 1 | awk '{FS=" "} {print $1}'

启动Node2(Server)

docker inspect --format '{{.NetworkSettings.IPAddress}}' \\
node1 | awk '{FS=" "} {print $1}' | xargs -n 1 \\
docker run \\
--name node2 -d  \\
-p 9500:8500 \\
--restart=always consul agent -server \\
-ui -bind=0.0.0.0 -client=0.0.0.0 -join $1

启动Node3(Server)

docker inspect --format '{{.NetworkSettings.IPAddress}}'  \\
node1 | awk '{FS=" "} {print $1}' | xargs -n 1 \\
docker run --name node3  -d \\
-p 10500:8500  \\
--restart=always consul agent -server \\
-ui -bind=0.0.0.0 -client=0.0.0.0 -join $1

启动node4(Client)

docker inspect --format '{{.NetworkSettings.IPAddress}}'  \\
node1 | awk '{FS=" "} {print $1}' | xargs -n 1 \\
docker run -d --name=node4  --restart=always \\
-p 11500:8500 \\
consul agent -ui -bind=0.0.0.0 -client=0.0.0.0  -join $1 

都启动完成之后,使用命令ps查看一下正在运行的容器。

docker ps

在这里插入图片描述从上面可以看出来4个容器都已经启动了。

查看节点信息.

docker exec -t node1 consul members

在这里插入图片描述
从上面图中可以看出来,我们一共启动了4个节点,其中三个Server节点,1个Client节点。

查看主从信息

docker exec -t node1 consul operator raft list-peers

在这里插入图片描述可以看出来有一个leader节点和两个follower节点。

注意事项:这里我的用是阿里云的ECS,若想在本地访问,则需要提前在安全组规则中配置好相应的入方向的端口信息。

在这里插入图片描述
页面中可以正常访问Consul了。
在这里插入图片描述

consul中的分布式存储

在Consul集群中,我们选择任意一个端口,选择Key/Value,并点击create,去创建一个键值对。
在这里插入图片描述
比如我这里key输入name ,value输入Alice,然后点击Save。

在这里插入图片描述
然后,我打开其他的页面。发现其他三个页面中的key/value都已经有刚才的输入值了。
在这里插入图片描述
这就是Consul集群中的分布式存储,这里只是简单做一下演示,Consul都提供了相应的api可以去调用,感兴趣的同学可以继续去研究。

以上是关于在Docker中配置Consul集群的主要内容,如果未能解决你的问题,请参考以下文章

docker-Consul概述及集群搭建

docker上搭建consul集群全流程

docker-Consul的概述及consul集群环境的搭建

docker-Consul的概述及consul集群环境的搭建

docker-Consul的概述及consul集群环境的搭建

docker-Consul概述以及集群环境搭建