[关闭]
@aqa510415008 2019-03-31T14:12:40.000000Z 字数 5815 阅读 2506

Docker - 容器部署 Consul 集群

Docker


说明

本文主要介绍怎么使用 Docker 在 Linux 环境部署 Consul 集群,如果你对 Docker 不了解的同学,请先学习一下 Docker。推荐一本学习 Docker 在线书籍 :【Docker入门到实践】 。

本文介绍 Consul 部署已经在准备好 Docker 环境好前提下开始的。

简介

image_1d78seg768pbqmr1le6on71p0h19.png-172.3kB

了解 Consul

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

Consul 使用场景

Consul 优势

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

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

Consul 中的概念


image_1d78u4elv18glqtipc18f1aiv9.png-474.2kB

安装

准备 Consul 镜像

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

  1. $ docker pull consul:1.4.4
  2. 1.4.4: Pulling from library/consul
  3. 5d20c808ce19: Pull complete
  4. ded83912d17e: Pull complete
  5. a7fbb7ddd3ea: Pull complete
  6. 6cdcd1f7ea42: Pull complete
  7. a0ea9ef64acd: Pull complete
  8. 267ee3fb0b30: Pull complete
  9. Digest: sha256:9113b1043308b4193d2be8516c64fcdc2e9740e3c626be058076de697c407be7
  10. 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.4。CONSUL_BIND_INTERFACE 设置为默认桥接网络 eth0 并且主机上不显示任何服务。

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

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 集群信息

    1. $ docker exec consul_server_1 consul members
    2. Node Address Status Type Build Protocol DC Segment
    3. 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 ,

    1. // -node=2
    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'
    3. 5d999ade4f96e04b5a1dbbcb69dc117fafa11d450fd17268884b1254971a7450
    4. // -node=3
    5. $ 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'
    6. 459948e6bd26e2b0b556ac6b4c5593b5dba2e4dc2b79d506d6ba4644f4ab0970
  3. 通过 Web 管理器查看是否成功加入集群中
    image_1d79vfuaf1cl9vgpv2jg2r1aqd5a.png-19kB

Client 加入集群

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

  1. 加入集群

    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'
    2. 6e0604490eb49363d28249a5277c03173b258aa55965d70eb5b5438a0a6b7eea
    3. $ 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'
    4. 25e9792c6d5949ba3fcf73432ed2933568726d214d6819ab52d2b6eaa00d7842
    5. $ 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'
    6. c7333068c1679f8f9e8c8c0be0fcf68f93f85b2c45dd177e4757217bdfa55d7a
  2. 检查 Client 是否加入集群中

    1. $ docker exec consul_server_1 consul members
    2. Node Address Status Type Build Protocol DC Segment
    3. 1 172.17.0.2:8301 alive server 1.4.4 2 dc1 <all>
    4. 2 172.17.0.3:8301 alive server 1.4.4 2 dc1 <all>
    5. 3 172.17.0.4:8301 alive server 1.4.4 2 dc1 <all>
    6. 25e9792c6d59 172.17.0.6:8301 alive client 1.4.4 2 dc1 <default>
    7. 6e0604490eb4 172.17.0.5:8301 alive client 1.4.4 2 dc1 <default>
    8. 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

【版权声明】 
作品来自于长沙.NET技术社区成员【阿凌】,有兴趣了解长沙.NET技术社区详情,请关注公众号【DotNET技术圈】,作品版权归作者和博客园共有,作品采用知识共享署名-非商业性使用-相同方式共享4.0 国际许可协议进行许可。 
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注