Consul


原文链接: Consul

Consul 使用手册 | 一个梦

  1. 开发模式

consul 开发者模式,可以快速开启单节点的 consul服务,具有完整功能,方便开发测试。
2.1 启动开发模式

开发模式命令:

consul agent -dev

consul members 命令查看当前集群的节点情况

dev@ubuntu ~$ consul members
Node Address Status Type Build Protocol DC
ubuntu 127.0.0.1:8301 alive server 0.7.2 2 dc1

通过HTTP API 查看节点信息

dev@ubuntu ~$ curl localhost:8500/v1/catalog/nodes
[

{
    "Node": "ubuntu",
    "Address": "127.0.0.1",
    "TaggedAddresses": {
        "lan": "127.0.0.1",
        "wan": "127.0.0.1"
    },
    "CreateIndex": 4,
    "ModifyIndex": 5
}

]

2.2 服务注册

服务可以通过配置文件注册,也可以通过HTTP API 添加。这里以配置文件定义服务:

cd ~/consul
// 创建etc 目录用于存放配置文件
mkdir etc
// 创建web.json 配置文件
echo '{"service": {"name": "web", "tags": ["nginx"], "port": 80}}' | tee ~/consul/etc/web.json
// 重启consul,并指定配置文件目录
consul agent -dev -config-dir=/home/dev/consul/etc

如果需要定义多个服务,添加多个服务配置文件即可
2.3 服务发现

当定义服务并且重启consul 代理后,就可以通过HTTP API 查询服务信息。

dev@ubuntu ~/consul$ curl http://localhost:8500/v1/catalog/service/web
[

{
    "Node": "ubuntu",
    "Address": "127.0.0.1",
    "TaggedAddresses": {
        "lan": "127.0.0.1",
        "wan": "127.0.0.1"
    },
    "ServiceID": "web",
    "ServiceName": "web",
    "ServiceTags": [
        "nginx"
    ],
    "ServiceAddress": "",
    "ServicePort": 80,
    "ServiceEnableTagOverride": false,
    "CreateIndex": 6,
    "ModifyIndex": 6
}

]

  1. Consul 集群

consul 是一个CS 模式的软件,生产环境下一个集群中建议准备3~5个节点运行服务模式的consul,其他节点运行客户端模式。
3.1 启动server 模式

#server 模式启动
consul agent -server -bootstrap-expect=1 -data-dir=/tmp/consul -node=agent-one -bind=192.168.1.114 -config-dir=/home/dev/consul/etc

-server 以服务模式运行
-node 节点名称
-bind 指定监听地址,用于多网卡服务器
-bootstrap-expect 额外的服务模式节点数量
config-dir 配置文件目录

3.2 启动client 模式启动

client 模式启动

consul agent -data-dir=/tmp/consul -node=agent-two -bind=192.168.1.115 -config-dir=/home/dev/consul/etc

在集群中其他节点上以客户端模式运行consul,注意更改绑定IP 和节点名。
3.3 加入集群

客户端模式的consul 需要加入一个服务端节点,才能同步服务信息。

加入集群:

consul join 192.168.1.114

查看集群节点:

dev@ubuntu ~$ consul members
Node Address Status Type Build Protocol DC
agent_1 192.168.1.114:8301 alive server 0.7.2 2 dc1
agent_2 192.168.1.115:8301 alive client 0.7.2 2 dc1
agent_3 192.168.1.116:8301 alive client 0.7.2 2 dc1

客户端节点服务发现功能

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

consul catalog

catalog 命令用于通过命令行与Consul的目录进行交互。它暴露顶级命令来读取和过滤来自注册表的数据

列出数据中心

consul catalog datacenters

列出节点

consul catalog nodes
consul catalog nodes -http-addr=192.168.10.218:8500

列出所有提供服务的节点

consul catalog nodes -service=redis

列出所有的服务

consul catalog services
consul catalog services -http-addr=192.168.10.218:8500

Event

consul event

event提供了一种将自定义用户事件触发到整个数据中心的机制,这些事件对Consul是不透明的,但它们可用于构建脚本基础架构,以进行自动部署,重新启动服务或执行任何其他编排操作。Event可以通过使用watch来处理。event的传播是通过流言传播协议的。

-name——事件的名称。
-node——正则表达式来过滤应该评估事件的节点。
-service——正则表达式仅筛选具有匹配服务的节点。
-tag——正则表达式只能筛选具有匹配标记的服务的节点。这必须与-service一起使用。作为一个例子,你可以做-service mysql -tag secondary。

Exec

consul exec

exec命令提供了远程执行的机制。下表显示了执行此命令索要的ACL。
ACL Required 范围
agent:read 本地agent
session:write 本地agent
key:write "_rexec"字首
event:write "_rexec"字首

info

consul info

info命令提供了对运算符有用的各种调试信息。根据代理是客户端还是服务器,将返回不同的子系统信息。目前有几个顶级的键:

agent:提供有关agent的信息
consul:有关consul的信息——客户端或者服务器端
raft:提供有关Raft公共信息
serf_lan:提供有关LAN流言池的信息
serf_wandf:提供有关WAN流言池的信息

join

consul join

join命令让Consul代理加入一个现有集群,新的Consul代理必须与集群的至少一个现有成员共同参与现有的集群。加入该成员后,流言层接管,跨集群传播更新成员的资格状态。如果没有加入现有的集群,则代理是自己的孤立集群的一部分,其他节点可以加入。

代理可以加入其它的代理。如果已经是集群的一部分的节点加入了另一个节点,则两个节点的集群将加入成为一个集群。
Keygen

consul keygen

keygen命令生成可用于Consul代理流量加密的加密秘钥。
Keyring

consul keyring

keyring命令用于检查和修改Consul的流言池中使用的加密密钥。
Lock

lock命令提供了简单分布式锁定的机制。在KV存储中的给定前缀创建锁(或信号量),只有当被保持时,才会调用子进程。如果锁丢失或通信中断,则子进程终止。锁定器的数量可以使用-n标志进行配置。默认情况下,允许单个持有人,并且使用锁来进行互斥。这使用leader选举算法。
member

menber命令输出Consul代理人知道的当前成员名单及其状态。节点的状态只能是“alive”,“left”或“failed”。
Monitor

monitor命令用于连接和跟踪正在运行的Consul代理的日志。Monitor将显示最近的日志,然后继续遵循日志,不会退出直到中断或直到远程代理退出。
reload

reload命令触发代理程序重新加载配置文件。
Snapshot

snapshot命令具有用于保存,恢复和检查Consul服务器的状态用于容灾恢复的子命令。这些是原子的时间点快照,其中包括键值条目,服务目录,准备好的查询,会话和ACL。 Consul 0.7.1及更高版本中提供此命令。

`