Consul的集群部署很简单,开发环境搭建集群其实一个docker-compose.yml就搞定了。但是实际生产环境除非用k8s,我们手动部署还是得要一步一步来。但是通过Docker实现也非常的简单了。

下面是我本地搭建集群的操作方式,且适用于生产环境使用

拉取镜像:

docker pull consul:1.9.8

启动第一个节点

docker run -d --name consul-1 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 consul:1.9.8 agent -server -bootstrap-expect 1 -ui -bind 0.0.0.0 -client 0.0.0.0  -node node-1 -enable-script-checks=true

 -p 8300:8300:同一数据中心 Consul server 之间通过该端口通信

-p 8301:8301:同一数据中心 Consul client 通过该端口通信

-p 8302:8302:不同数据中心 Consul server 通过该端口通信

-p 8500:8500:提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务

-p 8600:8600:采用DNS协议提供服务发现功能

 agent:运行Consul 代理

-server:表示Consul 的server模式,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。Consul还有Client模式,Client模式下下所有注册到当前节点的服务会被转发到server,本身是不持久化这些信息。

bootstrap-expect 1:提供数据中心中预期服务器的数量,当服务器数量满足该值时,才能选举集群Leader

-bind 0.0.0.0:表示所有网口,如果不指定默认未127.0.0.1,则无法和容器通信

-client 0.0.0.0:Consul运行连接的客户端端口,包括HTTP和DNS服务器

-ui:运行 Web UI 控制台

-enable-script-checks=true:检查已注册的服务状态为可用,说白了就是心跳检测

-node node-1:节点名称

我们看到容器已经启动成功了!

docker samba启动命令 docker启动consul_docker samba启动命令

查看第一个节点IP

容器启动后可通过http://localhost:8500访问Web UI页面。

 

docker samba启动命令 docker启动consul_服务发现组件_02

我们的第一个节点启动成功 ,并且通过 Nodes我们可以看到,node-1节点已经是Leader了,因为bootstrap-expect 1,当数据中心有一个节点启动就可以选举Leader了

docker samba启动命令 docker启动consul_Docker_03

现在我们再启动两个容器,组成3各节点的Consul集群。

先获取节点1的IP

我们可以通过Docker命令也可以在Web UI里查看

docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul-1

启动第二个节点

docker run -d --name consul-2 -p 8501:8500 consul:1.9.8 agent -server -ui -bind 0.0.0.0 -client 0.0.0.0 -retry-join <consul-1 ip>  -node node-2  -enable-script-checks=true

-retry-join <consul-1 ip>:启动时加入的另一位代理的地址,组件集群。还有一个-join跟这个类似,单生产环境建议使用-retry-join,当第一次尝试失败时允许重试连接,更适合帮助缓解节点启动竞争条件

docker samba启动命令 docker启动consul_docker samba启动命令_04

启动第三个节点

其实启动第三个节点、第四、五个跟启动第二个节点操作一样

docker run -d --name consul-3 -p 8502:8500 consul:1.9.8 agent -server -ui -bind 0.0.0.0 -client 0.0.0.0 -retry-join <consul-1 ip>  -node node-3  -enable-script-checks=true

docker samba启动命令 docker启动consul_Consul_05

第四个节点(client)

前面我们提到Consul agent client模式,client模式是一个轻量级的Consul节点,它主要负责业务的转发,将提交至client模式节点的数据转发到server模式节点上,并且不持久化存储配置和服务信息。所以说Consul是C/S架构的。

docker samba启动命令 docker启动consul_服务发现组件_06

那么第四个节点我们就搭建一个client模式的吧。

其实启动client模式的Consul跟上面的命令差不多,只需要把 -server 改成 -client即可

docker run -d --name consul-cli -p 8503:8500 consul:1.9.8 agent -client -bind 0.0.0.0 -client 0.0.0.0 -retry-join <consul-1 ip>  -node node-cli  -enable-script-checks=true

docker samba启动命令 docker启动consul_docker samba启动命令_07

 到这里我们的基于Docker搭建Consul集群的目标已经完成。

到此结束。

有问题,或者建议请留言,谢谢。