基于Docker搭建Consul的集群环境

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:节点名称

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

查看第一个节点IP

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

 

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

现在我们再启动两个容器,组成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 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

第四个节点(client)

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

Consul架构图

那么第四个节点我们就搭建一个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搭建Consul集群的目标已经完成。

到此结束。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值