我们已经启动了我们的第一个代理并且在这个代理上注册和查询了服务。这些显示了使用Consul是多么的容易但是并没有展示Consul的可扩展性以及可用于产品级别的服务发现的基础设施。在本篇向导中,我们将建立我们第一个多成员的真实的集群。

当一个Consul代理启动后,它对任何其他的节点都一无所知:它是个单独的隔离集群。为了让它感知其他的集群成员,代理必须加入一个现有的集群中去。为了加入一个现有的集群,它只需要知道一个单个的现有成员。它加入后,代理将广播该成员,并且快速发现集群中的其它成员。一个Consul代理能够加入任何其它的代理,不仅仅是那些运行在服务模式下的代理。

启动代理

为了模拟一个相对真实的集群,我们将通过Vagrant启动两个节点的集群。接下来使用的Vagrantfile可以在Consul仓库demo中找到。

我们首先启动两个节点:

$ vagrant up

一旦该系统可用了,我们就能通过ssh登录到该系统,并开始配置我们的集群。我们开始登录到第一个节点:

$ vagrant ssh n1

在我们以前的例子里,我们使用 *-dev 标志来快速地设置一个开发服务器。无论如何它并不能用于一个集群的环境下。我们将移除 -dev* 标志,而是替换成指定的用于集群的标志,下面就回涉及该标志。

每个集群节点都必须有一个唯一的名称。默认下Consul使用计算机的主机名,不过我们可以使用 -node 命令行选项手动地覆盖它。

我们也可以指定 绑定地址:Consul将在该地址侦听,并且改地址可以被集群中所有其它的节点访问到。虽然一个 绑定 的地址不是一个严格需要的(Consul将默认侦听在系统中第一个私有的IP),不过最好提供一个。一个生产环境下的服务通常有多个网络接口,所以指定一个 绑定 地址将保证你不会把Consul绑定到错误的网络接口上。

第一个节点现在将作为我们集群中的唯一服务器,我们指定它运行在server模式下。

-bootstrap-expect 标志暗示Consul服务器我们会有其它的服务节点将会加入。这个标志的目的是延迟复制日志的引导直到预期的服务节点成功加入。你可以在引导教程里查阅到更多的信息。

最后,我们增加 config-dir,指定将在哪里可以找到服务以及检查定义。

所有的标志都指定后,将这些设置加入 consul ageng 命令行:

vagrant@n1:~$ consul agent -server -bootstrap-expect 1 \-data-dir /tmp/consul -node=agent-one -bind=172.20.20.10 \-config-dir /etc/consul.d
...

现在,在另一终端里,我们连接到第二个节点:

$ vagrant ssh n2

这次,我们设置 绑定地址 是第二个节点的IP地址。因为该节点将不会是一个Consul的服务器,所以我们不指定它启动为服务器模式。

所有的标志都指定后,将这些设置加入 consul ageng 命令行:

vagrant@n2:~$ consul agent -data-dir /tmp/consul -node=agent-two \-bind=172.20.20.11 -config-dir /etc/consul.d
...

这时,我们已经有了两个Consul代理在运行:一个服务器和一个客户端。这两个Consul代理现在还对彼此没有任何感知,它们都为两个单节点的集群。你可以运行 consul members 来验证它们,每个集群都仅包含一个成员。

加入集群

现在,我们将告知第一个代理加入第二个代理,在一个新的终端中运行下列命令:

$ vagrant ssh n1
...
vagrant@n1:~$ consul join 172.20.20.11
Successfully joined cluster by contacting 1 nodes.

你应该可以在各自的代理日志中看到一些日志的输出。如果你仔细的查看,你将会看到有节点加入的日志信息。如果你再次运行 consul members,你会看到两个代理都已经感知到了另一个节点的存在。

vagrant@n2:~$ consul members
Node       Address            Status  Type    Build  Protocol
agent-two  172.20.20.11:8301  alive   client  0.5.0  2
agent-one  172.20.20.10:8301  alive   server  0.5.0  2

记住:为了加入一个集群,一个Consul代理只需要知道一个现有的成员。在加入指定的集群后,各个代理会互相传播完整的成员信息。

启动时自动加入一个集群

理想情况下,无论什么时候一个新的节点加入了你的数据中心中,它应该自动地加入Consul集群而无需手动操作。为了达到这个目的,你可以使用Atlas by HashiCorp并且指定 -atlas-join 标志。下面就是一个配置例子:

$ consul agent -atlas-join \-atlas=ATLAS_USERNAME/infrastructure \-atlas-token="YOUR_ATLAS_TOKEN"

这需要一个Atlas的用户名和token,在这里创建帐号,然后在你的Consul配置中使用你认证信息的替换各自的值。现在,无论何时一个通过Consul代理启动的节点加入,它将自动加入你的Consul集群而无需硬编码任何的配置信息。

另一个可以选择的是,你可以在启动的时候使用 -join 标志或者 start_join 指定一个已知Consul代理的地址来加入一个集群。

查询节点

就像查询服务一样,Consul有一个API用户查询节点信息。你可以通过DNS或者HTTP API来查询。

对于DNS API,名称结构是 NAME.node.consul 或者 NAME.node.DATACENTER.consul。 如果数据中心被移除,Consul将仅仅查询本地数据中心。

例如,从“agent-one”,我们可以查询节点"agent-two"的地址:

vagrant@n1:~$ dig @127.0.0.1 -p 8600 agent-two.node.consul
...;; QUESTION SECTION:
;agent-two.node.consul. IN  A;; ANSWER SECTION:
agent-two.node.consul.  0 IN    A   172.20.20.11

这种查找节点的能力对于系统管理任务而言是非常有用的。例如知道了节点的地址,我们可以使用ssh登录到该节点并且可以非常容易地使得该节点成为Consul集群中的一部分并且查询它。

离开集群

为了离开指定的集群,你可以优雅地退出一个代理(使用 Ctrl-C)或者强制杀死代理进程。优雅地离开可以使得节点转换成离开状态;其它情况下,其它的节点检测这个节点将失败。其不同的地方在这里有详细的描述。

下一步

现在有了一个多节点的Consul集群已经启动并且运行着。让我们通过[健康检测]()使我们的服务具有更强的鲁棒性。

Consul入门04 - Consul集群相关推荐

  1. kubernetes 入门实践-搭建集群

    ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(一个人的真正伟大之处就在于他能够认识到自己的渺小 -- 保罗) ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤ 上一篇:kubernetes 入门实践-核心概念 下 ...

  2. 【Hadoop生态圈】1.Hadoop入门教程及集群环境搭建

    文章目录 1.简介 2.环境准备 3.安装hadoop 3.修改Hadoop配置文件 3.1.hadoop-env.sh配置 3.2.core-site.xml配置 3.3.hdfs-site.xml ...

  3. Consul入门04 - Consul集群 1

    我们已经启动了我们的第一个代理并且在这个代理上注册和查询了服务.这些显示了使用Consul是多么的容易但是并没有展示Consul的可扩展性以及可用于产品级别的服务发现的基础设施.在本篇向导中,我们将建 ...

  4. Kubernetes入门--搭建Kubernetes集群,并启动容器服务

    英文原作者:Ben Cane  翻译作者:Miazzy 翻译&转载:https://blog.codeship.com/getting-started-with-kubernetes/ Kub ...

  5. SpringCloud——Gateway(介绍、快速入门、网关集群)

    介绍 网关是微服务最边缘的服务,直接暴露给用户,用来做用户和微服务的桥梁. Gateway是Spring官方提供的用来代替zuul的网关组件 核心逻辑:路由转发 + 执行过滤器链 三大核心概念 Rou ...

  6. 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战

    文章目录 前言 大数据概述 时代背景 4V特点 大数据思维 核心技术 储存 计算 相关技术 云计算 物联网 Hadoop简介 简介 版本之分 项目生态结构 安装和部署 HDFS 简介 集群结构 实现目 ...

  7. 【Elasticsearch入门】Elasticsearch集群管理

    1.集群节点监控 在 Elasticsearch的运行期间,一个很重要的方面就是监控.这使得系统管理员能够检测并预防可能性的问题,或至少知道失败时会发生什么. Elasticsearch提供了非常详细 ...

  8. 《童虎学习笔记》5分钟入门PG分布式集群Citus

    本专栏全部文章 https://blog.csdn.net/tonghu_note/category_11713514.html 总目录 https://blog.csdn.net/tonghu_no ...

  9. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

最新文章

  1. WPF的Timer控件的使用
  2. update 两个表关联_拉链表(二)
  3. How to start MySQL on Linux
  4. Apache架构师总结的30条设计原则!
  5. nginx 免安装包
  6. 用js将form表单同时提交到两个不同页面的方法
  7. oracle导入substring,java中substring()和oracle中substr()区别
  8. html 下拉到一定位置,浏览器向下滚动到一定位置继续滚动时,侧边导航固定在页面顶部,再滚动到一定位置时页面再向下滚动侧边导航不再固定。这种效果怎么实现呢...
  9. 搜素算法(基础)--DFS/BFS算法(JAVA)
  10. 周鸿祎在人民日报撰文,呼吁推行网络安全大战略
  11. 对计算机网络教程的计划,计算机网络技术与应教程教学计划14.doc
  12. Python—什么是duck type鸭子类型
  13. Weak Supervision: A New Programming Paradigm for Machine Learning
  14. 银行排队问题之单队列多窗口服务 (25 分)(结构体排序)
  15. 车联网及其技术发展趋势
  16. 初级计算机英语,初级英语口语怎么学?
  17. gromacs ngmx_转:Gromacs的DEMO教程中文版
  18. java生成二维码(底部添加文字+linux安装微软雅黑)
  19. 一文理解完美二叉树, 完全二叉树和完满二叉树
  20. Android入门视频教程,抖音音视频开发

热门文章

  1. 用c实现跨平台异常捕获机制 1
  2. 让Bootstrap 3兼容IE8浏览器
  3. 高性能网络编程1----accept建立连接
  4. Monkey基本用法与常用参数
  5. 为你的移动页面寻找一丝新意——手机互动网页项目总结(上)
  6. 页面布局 HTML 4.0 Transitional” VS XHTML 1.0 Transitional 新的不一定就好用!
  7. 基于fabric框架区块链实现科学数据出版系统
  8. H264编码之GOP含义
  9. 修改ubuntu的sources.list源
  10. 通讯系统经验谈【一】TCP连接状态分析:SYNC_RECV,CLOSE_WAIT,TIME_WAIT