前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建Consul集群

搭建Consul集群

作者头像
AsiaYe
发布2019-11-06 14:42:56
2.1K0
发布2019-11-06 14:42:56
举报
文章被收录于专栏:DBA随笔DBA随笔
Consul集群搭建

Consul的简介和安装过程之前的文章中已经提及了,这次主要了解下consul的集群搭建过程,在搭建Consul集群之前,有必要先了解一下单个节点的consul环境部署。

一、单个实例部署的具体过程

1.检查consul是否可用?

命令行输入consul,如果出现如下结果,则说明consul可用

2.启动Consul Agent

Consul可以运行在服务器或者客户端模式下,每个数据中心(DataCenter,简称DC)都必须至少有一台服务器,在生产环境中,往往推荐使用多台服务器,因为服务器也要实现高可用,单一的服务器在发生故障时会导致数据丢失。

使用开发模式启动Consul代理,这种模式主要用于快速简单的启动Consul环境。

命令行输入:consul agent -dev

我们可以看到,它已经输出了一些内容,包含了一个节点,即本机的localhost,这个集群里面相当于只有一个节点。

3.集群成员查询

重新启动一个终端,输如consul members,就可以看到这个Consul集群的成员。

还可以通过consul members -detailed查看额外的信息。

4.停止Agent

停止Consul Agent的方法是通过Ctrl+C的方法,点击之后我们可以看到该节点离开集群并关闭。

这里需要提醒一下,consul中有两个概念,节点失败和节点离开。

节点失败时,它的健康状态被标记为关键,而不会从目录中删除;

节点离开时,它的服务和检查将会从目录中删除。

它们最大的区别是Consul将自动尝试重新连接失败的节点,使其能够从特定的网络条件中恢复,而不再联系离开的节点。

5.注册服务

5.1定义服务

定义服务时注册服务最常用的方式,接下来将演示这一过程,首先为Consul配置一个目录,通常路径设定为/etc/consul.d

命令:mkdir /etc/consul.d

接下来,我们将编写一个定义服务的配置文件、这里使用自己特定的服务名称“yeyz”来命名,另外,我们可以给他定义一个标签“Asia”,我们可以使用它作为查询服务的附加方式。

此时,重启consul并提供配置目录:

可以看到,刚才设定的节点yeyz已经开始了同步。这意味着agent已经从配置文件中加载了服务定义,并且成功的将其注册到服务目录中了。

5.2查询服务

查询的方法分为两种,一种是DNS,一种是HTTP API

DNS API

对于DNS API来讲,服务的DNA名称是NAME.service.consul,这里的NAME就是我们刚才设定的“yeyz”,对于刚才注册的服务“yeyz”,会生成一个命名为yeyz.service.consul的域名,此时通过DNS API进行查询:

dig @127.0.0.1 -p 8600 yeyz.service.consul

可以看到,通过域名,解析到了本地的地址。

HTTP API

除了DNS API之外,我们也可以通过HTTP API来查询服务,命令行输入:

curl http://localhost:8500/v1/catalog/service/yeyz

二、consul集群的部署方法

搞明白了单个节点部署consul服务的过程,就可以来摸索多个节点的consul集群搭建了。当一个consul agent启动时,它是孤立的,不知道其它集群成员,此时它必须通过某种方法加入到集群中来。要加入集群,需要知道一个现有的集群成员,当孤立的节点和集群中的成员通讯时,就能迅速发现其他成员,这和我们微信拉群聊是一个道理。

1.启动代理

在上面的单节点例子中,我们使用了-dev标志来快速设置一个开发服务器,但是在集群中,我们不能这么使用,每个集群中的节点都必须具有唯一的名称,此时不能再使用默认的机器主机名,将使用一个-node参数来给集群中的节点进行命名。

我们还将指定一个-bind:这是Consul侦听的地址,它必须可以被集群中的所有其他节点访问。 虽然绑定地址不是绝对必要的,但最好提供一个。 Consul将默认尝试侦听系统上的所有IPv4接口,但如果找到多个私有IP,将无法启动错误。 由于生产服务器通常具有多个接口,因此指定一个绑定地址可确保您永远不会将Consul绑定到错误的接口。 第一个节点将作为我们在这个集群中唯一的服务器,我们用-server来指明这一点。-bootstrap-expect选项向Consul服务器提示我们期望加入的其他服务器节点的数量。此选项的用途是延迟复制日志的引导,直到预期数量的服务器成功加入。   我们已经将-enable_script_checks选项设置为true,以启用可以执行外部脚本的运行状况检查。 这将在后面的例子中使用。 对于生产用途,您希望将ACL配置为与此配合使用,以控制注册任意脚本的能力。 最后,我们添加-config-dir选项,标记可以找到服务和检查定义的位置。

我们使用下面的命令来开启一个server模式的consul代理:

consul agent -server -bootstrap-expect=1 -data-dir=/tmp/consul -node=agent_1 -bind=192.168.197.132 -enable-script-checks=true -config-dir=/etc/consul.d

我们可以看到,刚才定义的agent_1的node已经进入了服务模式,

此时我们准备加入第二个节点,这个节点的运行模式是client模式,即客户端模式,所以我们不加-server参数,-bind参数设置为第二个节点的IP,命令如下:

consul agent -data-dir=/tmp/consul -node=agent_2 -bind=192.168.197.128 -enable-script-checks=true -config-dir=/etc/consul.d

从输出的结果我们可以看到,现在我们有一个服务器节点和一个客户端节点,这个客户端节点已经配置成功,但是没有找到服务器节点,那接下来的一步肯定是让两个节点进行通信,将客户端节点添加到服务器的集群(只有一个节点)中了。

2.加入集群

现在我们将客户端节点加入到服务器节点的集群中,命令如下:

consul join 192.168.197.132

出现上面的结果是没有关闭防火墙导致的,此时需要在每一个节点上关闭相应的防火墙:sudo iptables -F,再次运行,可以看到:

显示添加成功,我们查看consul客户端的提示日志,可以发现已经加入了服务agent_1

查询consul服务器的提示日志,可以发现已经提示agent_2加入了:

此时查看consul集群中的成员,命令:consul members

可以看到,集群中已经有两个成员了。类型分别为server和client

3.查询节点状态

Consul也有查询节点的API。 可以通过DNS或HTTP API执行此操作。   对于DNS API,名称的结构是NAME.node.consul或NAME.node.DATACENTER.consul。 如果数据中心被省略,Consul将仅搜索本地数据中心。   例如,从“agent_1”中,我们可以查询节点“agent_2”的地址:

dig @127.0.0.1 -p 8600 agent_2.node.consul

同样,也可以在agent_2节点中查询agent_1的地址。除了服务之外,查找节点的能力对于系统管理任务来说是非常有用的。例如,知道要通过SSH连接的节点的地址与将节点作为Consul集群的一部分并查询它一样简单。

4.离开集群

要离开集群,可以正常退出代理(使用Ctrl-C)或强制终止其中一个代理。 优雅地离开允许节点转换到离开状态; 否则,其他节点将检测到它失败。

后续还有一些健康检查的内容,下次再分享吧。。。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档