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

Docker - 容器部署 Consul 集群

Docker


说明

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

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

简介

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 版本。

  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.4CONSUL_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 国际许可协议进行许可。 
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注