站点图标 起风网

Docker – 容器部署 Consul 集群

简介

image_1d78seg768pbqmr1le6on71p0h19.png-172.3kB

了解 Consul

Consul 是一个支持多数据中心分布式高可用的 服务发现配置共享 的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 Consul 支持 健康检查,并允许 HTTPGRPCDNS 协议调用 API 存储键值对.
命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品.
一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制.

Consul 使用场景

Consul 优势

市面现在有很多类似的软件比如:zookeeperEtcddoozerdeureka,Consul 相比这些软件有什么优势呢?
官方出了相比较这些软件区别的一篇 Consul vs. ZooKeeper,doozerd,etcd 文章。

下面总结一下 Consul 的优势有那几点:

Consul 中的概念

image_1d78u4elv18glqtipc18f1aiv9.png-474.2kB

安装

准备 Consul 镜像

拉取 Consul 镜像到本地,我本次讲解的是 Consul V1.4.4 版本。

$ docker pull consul:1.4.4  1.4.4: Pulling from library/consul  5d20c808ce19: Pull complete  ded83912d17e: Pull complete  a7fbb7ddd3ea: Pull complete  6cdcd1f7ea42: Pull complete  a0ea9ef64acd: Pull complete  267ee3fb0b30: Pull complete  Digest: sha256:9113b1043308b4193d2be8516c64fcdc2e9740e3c626be058076de697c407be7  Status: Downloaded newer image for consul:1.4.4

Consul 镜像提供了几个个常用环境变量

Consul 镜像的详细说明请前往官方使用文档

安装单个 Consul

先启动一个单机版 Consul,由于单机肯定需要安装 Server 模式的 Consul。

启动 Consul 和 Web 管理器

我们启动一个命名为 consul_server_1 的 Docker 容器来运行 Consul ,启动的 Consul 的版本是 1.4.4CONSUL_BIND_INTERFACE 设置为默认桥接网络 eth0 并且主机上不显示任何服务。

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

提示:/consul/data 是 Consul 持久化地方,如果需要持久化那 Dooker 启动时候需要给它指定一个数据卷 -v /data/consul:/consul/data

Consul 命令简单介绍

Web 管理器

上面命令已经启动了 Consul 和 Web 管理器,我们现在打开 Web 管理器来看一下是否启动成功。通过浏览器浏览 Http://{serverIp}:8500

image_1d79to3v33sr78lgahfmeojr3m.png-37.8kB

上图显示已经启动成功了,启动了一个节点名称为 -node=1 的节点 ,并且可以通过管理器管理 Node 节点、Key/Value 功能等。
这里就不讲怎么使用 Consul ,我在附件中引用几篇文章你可以去看看,更细化怎么使用可以去查相关资料。

组装集群 Consul

上面完成了一个单机版的 Consul 部署,下面我们将实现图中的的集群架构 Consul 部署。

image_1d793pdkjsujv9n1trud848uf12.png-215.7kB

Server 加入集群

我们在上面单机版的基础上面来拓展集群,这样可以模拟集群的一步一步发展。下面我将加入二个 Server 模式的 Consul 到集群中,Server 模式在集群中建议是 三个以上,这样更好的避免因为 Server 的宕机导致整个集群挂掉的风险。

  1. 通过命令查一下当前运行 Consul 集群信息

    $ docker exec consul_server_1 consul members  Node  Address          Status  Type    Build  Protocol  DC   Segment  1     172.17.0.2:8301  alive   server  1.4.4  2         dc1  <all>
  2. 加入到集群, 命名为 -node=2-node=3
    上面通过命令获取到引导 Consul 的 Ip 地址 172.17.0.2

    // -node=2$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 consul:1.4.4 agent -server -node=2  -join='172.17.0.2'  5d999ade4f96e04b5a1dbbcb69dc117fafa11d450fd17268884b1254971a7450// -node=3$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 consul:1.4.4 agent -server -node=3  -join='172.17.0.2'  459948e6bd26e2b0b556ac6b4c5593b5dba2e4dc2b79d506d6ba4644f4ab0970
  3. 通过 Web 管理器查看是否成功加入集群中

    image_1d79vfuaf1cl9vgpv2jg2r1aqd5a.png-19kB

Client 加入集群

Client 在 Consul 集群中起到了代理 Server 的作用,Client 模式不持久化数据。一般情况每台应用服务器都会安装一个 Client ,这样可以减轻跨服务器访问带来性能损耗。也可以减轻 Server 的请求压力。

  1. 加入集群

    $ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_4 consul:1.4.4 agent -client -node=4 -join='172.17.0.2' -client='0.0.0.0'  6e0604490eb49363d28249a5277c03173b258aa55965d70eb5b5438a0a6b7eea$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_5 consul:1.4.4 agent -client -node=5 -join='172.17.0.2' -client='0.0.0.0'  25e9792c6d5949ba3fcf73432ed2933568726d214d6819ab52d2b6eaa00d7842$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_6 consul:1.4.4 agent -client -node=5 -join='172.17.0.2' -client='0.0.0.0'  c7333068c1679f8f9e8c8c0be0fcf68f93f85b2c45dd177e4757217bdfa55d7a
  2. 检查 Client 是否加入集群中
    $ docker exec consul_server_1 consul members Node Address Status Type Build Protocol DC Segment 1 172.17.0.2:8301 alive server 1.4.4 2 dc1 <all> 2 172.17.0.3:8301 alive server 1.4.4 2 dc1 <all> 3 172.17.0.4:8301 alive server 1.4.4 2 dc1 <all> 25e9792c6d59 172.17.0.6:8301 alive client 1.4.4 2 dc1 <default> 6e0604490eb4 172.17.0.5:8301 alive client 1.4.4 2 dc1 <default> c7333068c167 172.17.0.7:8301 alive client 1.4.4 2 dc1 <default>

总结

Docker 部署 Consul 其实很简单,Consul 集群的配置主要是 Consul 的命令需要了解,建议多看看 Consul 的官方文档。

引用和附件

  1. Consul 原理和使用简介 : https://blog.coding.net/blog/intro-consul?type=hot
  2. Consul 镜像仓库地址 :https://hub.docker.com/_/consul
  3. Consul 镜像使用文档:https://github.com/docker-library/docs/tree/master/consul
  4. Consul 官方文档 :https://www.consul.io/docs/agent/basics.html
  5. 使用Consul和Registration对Docker容器进行服务发现
    https://livewyer.io/blog/2015/02/05/service-discovery-docker-containers-using-consul-and-registrator
  6. 基于Consul+Registrator+Nginx实现容器服务自动发现的集群框架
    http://www.mamicode.com/info-detail-2222200.html
  7. .NET Core微服务之基于Consul实现服务治理
    https://www.cnblogs.com/edisonchou/p/9124985.html

> 原文:[https://www.cnblogs.com/lfzm/p/10633595.html](https://www.cnblogs.com/lfzm/p/10633595.html)

文章转载于:https://www.jianshu.com/p/ef788a924e9b

原著是一个有趣的人,若有侵权,请通知删除

退出移动版