Docker - 容器部署 Consul 集群

目录    
  • 准备 Consul 镜像

  • 安装单个 Consul

  • 组装集群 Consul

  • 启动 Consul 和 Web 管理器

  • Consul 命令简单介绍

  • Web 管理器

  • Server 加入集群

  • Client 加入集群

  • 了解 Consul

  • Consul 使用场景

  • Consul 优势

  • Consul 中的概念

  • 说明

  • 简介

  • 安装

  • 总结

  • 引用和附件


说明


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

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

  • CentOS 7.3

  • Docker CE 18.09.2


简介


640?wx_fmt=png


了解 Consul


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


Consul 使用场景


  • Docker 实例的注册与配置共享

  • Coreos 实例的注册与配置共享

  • SaaS 应用的配置共享、服务发现和健康检查。

  • vitess 集群

  • 与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件



Consul 优势 


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

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

  • 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.

  • 支持 多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持。

  • 支持 健康检查。 etcd 不提供此功能。

  • 支持 HTTP、DNS 和 GPRS 协议接口。 zookeeper 的集成较为复杂,etcd 只支持 http 协议。

  • 官方提供 WEB管理界面,etcd 无此功能。

  • 综合比较, Consul 作为服务注册和配置管理的新星,比较值得关注和研究。



Consul 中的概念


640?wx_fmt=png

  • Client:表示 Consul 客户端模式,是 Consul 节点的一种模式,所有注册到 Client 节点的服务会被转发到 Server 。本身无状态不持久化如何数据。Client 通过 HTTP、DNS、GRPC 接口请求转发给局域网内的服务端集群。

  • Server:表示 Consul 的服务端模式, Server 功能和 Client 都一样,不同的是 Server 持久化数据到本地。在局域网内与本地 Client 通讯,通过广域网与其他数据中心通讯。每个数据中心的 Server 数量推荐为 3 个或是 5 个。

  • Server-Leader :表示这个 Server 是它们的老大,它和其它 Server 不一样的一点是,它需要负责同步注册的信息给其它的 Server 节点,同时也要负责各个节点的健康监测。如果 Leader 宕机了,通数据中心的所有 Server 内部会使用 Raft 算法来在其中选取一个 Leader 出来。

  • Agent :Agent 是 Consul 的核心进程,Agent 的工作是维护成员关系信息、注册服务、健康检查、响应查询等等。Consul 集群的每一个节点都必须运行 agent 进程。

  • 其它 
    需要了解 Consul 原理、的通信方式、协议信息、算法、帮助文档等。有兴趣可以前往官方查看 官方文档。

    文档:https://www.consul.io/docs/agent/basics.html 
    官网:https://www.consul.io


安装


准备 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_CLIENT_INTERFACE :配置 Consul 的 -client=<interface ip> 命令参数。

  • CONSUL_BIND_INTERFACE :配置 Consul 的 -bind=<interface ip> 命令参数。

  • CONSUL_DATA_DIR :配置 Consul 的数据持久化目录。

  • CONSUL_CONFIG_DIR:配置 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 命令简单介绍

  • agent : 表示启动 Agent 进程。

  • -server:表示启动 Consul Server 模式。

  • -client:表示启动 Consul Cilent 模式。

  • -bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 Leader,在引导群集后,建议不要使用此标志。

  • -ui:表示启动 Web UI 管理器,默认开放端口 8500,所以上面使用 Docker 命令把 8500 端口对外开放。

  • -node:节点的名称,集群中必须是唯一的。

  • -client:表示 Consul 将绑定客户端接口的地址,0.0.0.0 表示所有地址都可以访问。

  • -join:表示加入到某一个集群中去。 如:-json=192.168.1.23


Web 管理器

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

640?wx_fmt=png

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


组装集群 Consul


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

640?wx_fmt=png


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 管理器查看是否成功加入集群中 
    640?wx_fmt=png

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  2dc1  <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



作品转载于【DotNET技术圈】,作者来自于长沙.NET技术社区成员【阿凌】

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2017创建ASP.NET Core Web程序

创建ASP.NET Core Web应用程序如果您使用的是VS2019 请看 VS2019创建ASP.NET Core Web程序在这个视频中我们将讨论可用的不同项目模板及其功能预制的项目模板有什么不同&#xff0c;哪些是可以使用的&#xff0c;以及他们的作用。在Visual Studio2017中创建新的ASP.NET Core 项…

巧用linux版powershell,管理linux下的docker

owershell,docker,cli,命令,docker ps,docker image第一章 在linux中搭建docker环境目的&#xff1a;在任意版本的linux&#xff08;物理机&#xff0c;虚拟机&#xff0c;节点机&#xff09;中&#xff0c;安装docker服务。动作&#xff1a;教程略&#xff0c;不是本文主要目的…

从ASP.NET Core2.2到3.0你可能会遇到这些问题

趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.NET Core3.0的第三个预览版&#xff0c;同时我家里的电脑也安装了vs2019。So&#xff0c;就用vs2019.NET Core3.0来跟着做一下Contoso University这个WEB应用&#xff0c;但是在基…

EntityFramework Core 3.0 Preview

前段时间.Net Core 3.0 发布了&#xff0c;Entity Framework Core 3.0 也发布了Preview版。假期用了一上午大致研究了一遍&#xff0c;同时又体验了一把Visual Studio 2019。总结一下分享给大家&#xff1a;VS2019 新建.Net Core 3.0 Console应用&#xff0c;添加EFCore相关的N…

机器学习 ML.NET 发布 1.0 RC

ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架&#xff08;Windows&#xff0c;Linux&#xff0c;macOS&#xff09;,通过使用ML.NET,.NET开发人员可以利用他们现有的工具和技能组&#xff0c;为情感分析&#xff0c;推荐&#xff0c;图像分类等常见场景创建自定义机器…

容器化时代我们应当选择Kubernetes

昨天发的文章《基于Kubernetes 构建.NET Core 的技术体系》&#xff0c;有同学问.NET Core上有Spring Cloud类似的平台吗&#xff1f; .NET Core出现这么久了&#xff0c;这个为云原生应用开发而准备的系统需要Spring cloud这样的全家桶吗&#xff1f; 大家希望使用Spring Clou…

[ZJOI2015]幻想乡 Wi-Fi 搭建计划(dp + 结论)

problem luogu-P3344 solution 这个题面&#xff0c;这个数据范围&#xff0c;完完全全就是网络流宗教。。然而我发现建不出来。 很多一眼网络流最后却不是网络流而往往是 dpdpdp 的题目都有一个特性&#xff1a;一个点可以流出多条流量&#xff0c;流入流量却只能为 111。…

CefSharp中c#和JavaScript交互读取电脑信息

介绍CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目。与主要关注谷歌Chrome应用程序开发的Chromium项目本身不同&#xff0c;CEF专注于在第三方应用程序中促进嵌入式浏览器用例。CEF通过提供生产质量稳定的API&#xff0c;发布跟踪特定Chromiu…

C#8.0可空引用类型的使用注意要点

最近VS2019正式版发布了&#xff0c;装下来顺便试用了一下C#8.0&#xff0c;最大的看点应该就是可空引用类型了。不过C#8.0仍然处于Beta的状态&#xff0c;而且试用时也遇到了几个坑。背景知识说明&#xff1a;所谓的可空引用类型是指&#xff0c;一旦启用了可空引用类型这个新…

ASP.NET Core Web 项目文件介绍

ASP.NET Core Web 项目文件在本视频中&#xff0c;我们将探索并了解asp.net core项目文件。 我们使用C&#xff03;作为编程语言&#xff0c;因此项目文件具有.csproj扩展名。如果您使用过以前版本的ASP.NET&#xff0c;那么您可能对此文件非常熟悉&#xff0c;但此文件中包含的…

DotNetCore 3.0 助力 WPF 开发

前言Visual Studio 2019 已经正式发布了&#xff0c;DotNetCore 3.0 的正式版也指日可待。在之前的版本中&#xff0c;作为一名基于微软生态的传统 WPF 程序员看着隔壁同学在开发 DotNetCore 网站时用着各种特性好生羡慕&#xff0c;想着巨硬啥时候能让客户端开发者也能尝尝甜头…

H - Square Card HDU - 7063

H - Square Card HDU - 7063 题意&#xff1a; 有两个圆形区域&#xff0c;一个是得分区域&#xff0c;一个是获得奖金区域&#xff0c;现在你有一个边长为a的正方形,当正方形在如果在某一时刻它严格在圆形范围内&#xff0c;才算合法。 问把牌扔到任意的位置被得分和同时获得…

《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)

创建ASP.NET Core Web应用程序如果您使用的是VS2017请看 VS2017创建ASP.NET Core Web程序(三)在这个视频中我们将讨论可用的不同项目模板及其功能预制的项目模板有什么不同&#xff0c;哪些是可以使用的&#xff0c;以及他们的作用。在Visual Studio 2019中创建新的ASP.NET Cor…

ASP.NET Core 沉思录 - 结构化日志

在 《ASP.NET Core 沉思录 - Logging 的两种介入方法》中我们介绍了 ASP.NET Core 中日志的基本设计结构。这一次我们来观察日志记录的格式&#xff0c;并进一步考虑如何在应用程序中根据不同的需求选择不同的日志记录形式。太长不读&#xff1a;直接飞到文章最后 :-DMicrosoft…

为什么我们要做单元测试?(二)

引子当我第一篇博客发布&#xff0c;并被张善友老师的公众号转载之后&#xff0c;在公众号文章和博客园的留言中&#xff0c;许多开发者纷纷表示&#xff0c;单元测试作为企业行为&#xff0c;与实施的技术栈不同&#xff0c;不是开发者个人行为&#xff0c;实施单元测试花费的…

P4159 [SCOI2009] 迷路

P4159 [SCOI2009] 迷路 题意&#xff1a; 该有向图有 n 个节点&#xff0c;节点从 1 至 nn 编号&#xff0c;windy 从节点 1 出发&#xff0c;他必须恰好在 t 时刻到达节点 n。 现在给出该有向图(带边权)&#xff0c;你能告诉 windy 总共有多少种不同的路径吗&#xff1f; …

程序员修神之路--提高网站的吞吐量

点击上方蓝色字体&#xff0c;关注我们菜菜哥&#xff0c;有个事你还得帮我呀呦西&#xff0c;YY妹子&#xff0c;最近天这么热了&#xff0c;你怎么还穿这么多&#xff1f;苦笑一下.....前几天写了几个接口&#xff0c;领导让提高一下接口吞吐量这是你技术提高的大好机会呀可吞…

一份.NET 容器化的调查小结

小编在上个月在微信公众号“dotnet跨平台” 做了一个针对.NET 容器化的调查&#xff1a;.NET Core 容器化调查&#xff0c;参与人数702人&#xff0c;由于软件定义基础设施方兴未艾&#xff0c;编排和自动化领域kubernetes占据了主体地位&#xff0c;在平时的工作中和身边的同学…

P2148 [SDOI2009]ED

P2148 [SDOI2009]E&D 题意&#xff1a; 有2n堆石子&#xff0c;第2k-1堆和第2k堆是一组&#xff0c;现在两个人轮流操作&#xff0c;每次操作任选一组石子&#xff0c;然后将改组中的一堆石子移走&#xff0c;将另一堆式子分割成两堆&#xff0c;形成新的两堆石子&#x…

扒一扒.NET Core的环境配置提供程序

前言很久之前&#xff0c;在玩Docker的时候顺便扒了扒&#xff0c;最近&#xff0c;终于下定决心花了些时间整理并成文&#xff0c;希望能够给大家一些帮助。目录 .NET Core中的配置ASP.NET Core中的配置扒一扒环境变量提供程序为什么是“__”&#xff1f;“__”如何变成了“&…