Consul
是什么
Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:
服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
Key/Value存储 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
多数据中心: Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.
Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施
安装下载
官网安装包下载地址:
https://www.consul.io/downloads.html
教程以linux为例。
将下载的安装包,解压缩到自己喜欢的目录,例如:
创建consul安装目录
mkdir -p ~/local/consul
例如,我们下载的压缩包是 consul_xxx_linux_amd64.zip
将压缩包内容,解压缩到~/local/consul目录
unzip -o -d ~/local/consul consul_xxx_linux_amd64.zip
在~/local/consul 打开终端输入下面命令,如果没有提示找不到命令,就说明安装成功了。
./consul
consul命令介绍
通过前面,consul架构章节consul说明,我们知道consul主要分server和client两个组件,server负责核心数据的存储和处理数据的读写,通过client可以操作server提供的接口。
consul将server和client两个组件的实现都融合在一个叫consul的命令程序中,所以我们安装consul后,只有一个consul命令。
在consul中,无论server还是client都叫做agent,通过命令参数区分,我们运行的是server还是client。
提示:默认情况下运行的是client,下面章节会介绍如何启动server和client。
单机部署开发模式
作为本地开发环境,我们没有必要配置consul集群,只要一条命令就可以,以开发模式启动consul服务。
例如:
./consul agent -dev
-dev参数的意思,就是以开发模式启动consul,同时具备server和client的功能,不需要单独部署server和client。
基本命令
查询集群节点
consul members
打印出集群中所有的节点信息,可以通过Status状态查看节点是否正常运行。
输出:
Node Address Status Type Build Protocol DC Segment
tizidembp 127.0.0.1:8301 alive server 1.6.1 2 dc1 <all>
我们只是启动开发模式,只有一个节点。
重新加载配置文件
consul reload
如果我们修改了配置文件,可以使用这个命令,前面单机模式,我们什么配置文件也不需要,以默认参数启动了。
优雅关闭节点
consul leave
优雅的关闭当前机器上的节点,如果你有多个节点,需要每个节点都要执行关闭命令,否则只是关闭机器中的一个节点。
查询所有注册的服务
consul catalog services
server部署
部署server节点
通过配置文件配置启动server节点。
mkdir /etc/consul.d
给目录授权
chown -R consul:consul /etc/consul.d
创建server配置文件
touch /etc/consul.d/server.hcl
给文件授权
chmod 640 /etc/consul.d/server.hcl
配置文件内容:/etc/consul.d/server.hcl
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
server = true
bootstrap_expect = 3
retry_join = ["172.16.0.11"]
参数说明:
datacenter - 数据中心名字,唯一
data_dir - 数据目录,有权限读写即可
encrypt - consul节点之间通信的密钥
server - 代表当前agent以服务端模式启动
bootstrap_expect - 代表需要部署3个server节点。
retry_join - 其他server节点地址(支持ip地址、域名),填一个即可,会自动加入集群。
提示:启动第一个server节点的时候,不需要配置retry_join参数,因为自己是目前唯一的server节点,没有其他server节点。
启动server命令:
~/local/consul/consul agent -config-dir=/etc/consul.d/
参数说明:
-config-dir - 指定配置文件所在目录
注意你安装consul的目录,可能跟这里不一样,输入正确的安装路径。
提示:为了方便开机自动启动consul,你可以根据不同版本的linux系统配置开机启动,例如:centos,配置systemd。
部署client节点
client节点的配置,跟server节点类似,就是少了一些参数。
例子:
mkdir /etc/consul.d
给目录授权
chown -R consul:consul /etc/consul.d
创建client配置文件
touch /etc/consul.d/client.hcl
给文件授权
chmod 640 /etc/consul.d/client.hcl
配置文件内容:/etc/consul.d/client.hcl
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
retry_join = ["172.16.0.11"]
参数说明:
datacenter - 数据中心名字,唯一
data_dir - 数据目录,有权限读写即可
encrypt - consul节点之间通信的密钥
retry_join - 其他server节点地址,填一个即可,会自动加入集群。
跟server的参数对比,主要就是少了server和bootstrap_expect参数。
启动client的命令跟server一模一样。
~/local/consul/consul agent -config-dir=/etc/consul.d/