在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的概述及consul集群环境的搭建
docker-Consul的概述及consul集群环境的搭建