扫码订阅《 Go语言微服务理论课程》或入驻星球,即可阅读文章!

GOLANG ROADMAP · 知识星球

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go路线图
  • 👶 初级要求:负责一个模块

    • 📗 薪资·10-15k 技能梳理
  • 🧑 中高级要求:负责一个方向

    • 📘 薪资·15-25k 技能梳理
  • 🧔 资深要求:负责一个领域

    • 📒 薪资·25-40k 技能梳理
  • 🧙 专家要求:负责多个领域

    • 📕 薪资·40k以上 技能梳理
Go学院
  • Go小课
  • Go小考
  • Go宝典
Go资源
  • 推荐资源

    • 优质课程
    • 推荐图书
    • 开源项目
  • 资源下载

    • 视频资源
    • 文档资源
    • 帮找资源
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
更多
  • 用户中心

    • 我的信息
    • 我的消息
    • 我的返佣
author-avatar

GOLANG ROADMAP


首页
Go路线图
  • 👶 初级要求:负责一个模块

    • 📗 薪资·10-15k 技能梳理
  • 🧑 中高级要求:负责一个方向

    • 📘 薪资·15-25k 技能梳理
  • 🧔 资深要求:负责一个领域

    • 📒 薪资·25-40k 技能梳理
  • 🧙 专家要求:负责多个领域

    • 📕 薪资·40k以上 技能梳理
Go学院
  • Go小课
  • Go小考
  • Go宝典
Go资源
  • 推荐资源

    • 优质课程
    • 推荐图书
    • 开源项目
  • 资源下载

    • 视频资源
    • 文档资源
    • 帮找资源
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
更多
  • 用户中心

    • 我的信息
    • 我的消息
    • 我的返佣
  • 《Go语言微服务理论课程》

    • 课程介绍
  • 微服务简介

  • Protobuf通信协议

  • 微服务管理

    • 第1节:服务发现
    • 第2节:分布式与单点故障
    • 第3节:Consul服务发现原理
    • 第4节:Consul启动
    • 第5节:服务注册与查询
    • 第6节:Docker安装及运行consul节点
    • 第7节:Docker搭建Consul集群
    • 第8节:微服务定义
    • 第9节:微服务理论实践课程回顾

扫码订阅《 Go语言微服务理论课程》或入驻星球,即可阅读文章!

第7节:Docker搭建Consul集群


GOLANG ROADMAP

# 一台主机上搭建Consul集群并测试

借助Docker容器,已经启动了一个server节点,并能够与之通信。 接下来,希望借助Docker来搭建consul集群。以启动3个consul集群节点为例:

# 1、启动第一个节点

启动第一个节点的时候没有使用了 -bootstrap 参数, 而是使用了 -bootstrap-expect 3, 使用这个参数节点会等到所有三个端都连接到一起了才会启动并且成为一个可用的cluster。

$ docker run -d -p 8500:8500 -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 consul agent -server -bootstrap -ui -node=1 -client='0.0.0.0'
1

对如上的参数做如下说明:

  • ui:表示启动 Web UI 管理器,默认开放端口 8500,可以在浏览器进行访问。
  • –name

# 2、查看节点IP

我们需要知道这个container的内部IP, 使用下面的命令我们吧这个IP放到了环境变量 JOIN_IP 里。

$ JOIN_IP="$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' node1)"
1

也可以直接查看container的IP,如下命令:

$docker inspect -f '{{ .NetworkSettings.IPAddress }}' node1
1

# 3、启动第二个节点

启动 node2并且告诉他通过 $JOIN_IP 加入到 node1:

$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 consul agent -server -node=2  -join='172.17.0.2'
1

这里需要对参数作一下说明:

  • CONSUL_BIND_INTERFACE是consul镜像提供给我们的几个常用的环境变量,该常量与-bind作用相同。
  • name:为启动的节点命名
  • node:为起订的节点赋值一个id
  • agent:表示启动 Agent 进程。
  • server:表示启动Consul Server 模式。
  • join:表示加入到某一个集群中去。

# 4、启动第三个节点

按照同样的方法我们启动 node3:

$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 consul agent -server -node=3  -join='172.17.0.2'
1

现在我们就有了一个拥有3个节点的运行在一台机器上的集群。注意,根据Consul Agent的名字给container起了名字。

我们没有暴露出任何一个端口用以访问这个集群, 但是我们可以使用第四个agent节点以client的模式(不是用 -server参数)。这意味着他不参与选举但是可以和集群交互。而且这个client模式的agent也不需要磁盘做持久化。

$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_4 consul agent -client -node=4 -join='172.17.0.2' -client='0.0.0.0'

$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_5 consul agent -client -node=5 -join='172.17.0.2' -client='0.0.0.0'

$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_6 consul agent -client -node=5 -join='172.17.0.2' -client='0.0.0.0'
1
2
3
4
5

如果上述命令都能执行成功,就意味着我们的集群搭建成功了。

# 查看集群的状态

集群搭建完成以后,我们可以通过浏览器或者终端命令行的形式来查看,集群里面的节点的状态。

# 浏览器:

我们可以在浏览器中访问localhost:8500端口,可以看到如下效果:

  • 三个serve类型的节点集群节点: http://7xtcwd.com1.z0.glb.clouddn.com/WX20190712-152703@2x.png
  • 所有的Node节点(server和client): http://7xtcwd.com1.z0.glb.clouddn.com/WX20190712-152716@2x.png

# 命令行查看节点状态:

在终端下执行如下命令:

$consul members
1

或者是:

$docker exec consul_server_1 consul members
1

均可以看到如下输出效果: http://7xtcwd.com1.z0.glb.clouddn.com/WX20190712-153156@2x.png

# 停止节点

  • 活动容器状态查看 使用docker ps命令可以输出当前运行活动中的容器:

    $docker ps
    
    1

    http://7xtcwd.com1.z0.glb.clouddn.com/WX20190712-153542@2x.png

  • 停止容器活动 可以使用如下命令将目前正处于活动中的容器停止:

    $docker stop containerID 
    
    1

    http://7xtcwd.com1.z0.glb.clouddn.com/WX20190712-153839@2x.png 如果要停止多个,可以用空格隔开。

  • 移除容器 如果想要彻底移除启动的节点容器,可以通过rm命令来实现:

    $docker rm containerID
    
    1

    http://7xtcwd.com1.z0.glb.clouddn.com/WX20190712-154045@2x.png

  • 一台主机上搭建Consul集群并测试
  • 1、启动第一个节点
  • 2、查看节点IP
  • 3、启动第二个节点
  • 4、启动第三个节点
  • 查看集群的状态
  • 浏览器:
  • 命令行查看节点状态:
  • 停止节点