首先,从这个网址下载consul,解压后发现就是个可执行文件,若是不能够执行,chmod +x consul 一下。html
为了试验Consul较多的功能,这里咱们打算启用一个dev模式,带ACL控制的Consul代理。
配置文件config.json以下node
{ "datacenter":"dc1", "primary_datacenter":"dc1", "data_dir":"/opt/consul/data/", "enable_script_checks":false, "bind_addr":"127.0.0.1", "node_name":"consul-dev", "enable_local_script_checks":true, "log_file":"/opt/consul/log/", "log_level":"info", "log_rotate_bytes":100000000, "log_rotate_duration":"24h", "encrypt":"krCysDJnrQ8dtA7AbJav8g==", "acl":{ "enabled":true, "default_policy":"deny", "enable_token_persistence":true, "tokens":{ "master":"cd76a0f7-5535-40cc-8696-073462acc6c7" } } }
下面是参数说明:linux
接着咱们以dev模式启动agent。web
./consul agent -dev -config-file ./config.json
启动完以后,你会发现出现下面的错误
这个错误是没有设置agent-token形成的,agent-token主要用于客户端和服务器执行内部操做.好比catalog api的更新,反熵同步等。redis
1.先建立agent-tokenjson
curl \ --request PUT \ --header "X-Consul-Token: cd76a0f7-5535-40cc-8696-073462acc6c7" \ --data \ '{ "Name": "Agent Token", "Type": "client", "Rules": "node \"\" { policy = \"write\" } service \"\" { policy = \"read\" }" }' http://127.0.0.1:8500/v1/acl/create
注意这里面的X-Consul-Token与上面config.json 里面的acl.tokens.master要是同一个值,此时你会看到生成成功,d118b1fc-77af-d870-8417-667c04b29cdf这一串就是agent-token了。
2.设置agent-token
因为这里只有一个agent,须要调用接口来设置agent-token。vim
curl \ --request PUT \ --header "X-Consul-Token: cd76a0f7-5535-40cc-8696-073462acc6c7" \ --data \ '{ "Token": "d118b1fc-77af-d870-8417-667c04b29cdf" }' http://127.0.0.1:8500/v1/agent/token/acl_agent_token
而后你会发现以前的错误就消失了。
如此,一个带有ACL控制的agent就启动好了。若是你想搭建一个带ACL控制的集群,请参见个人另外一篇文章。api
consul 子命令挺多的,以下图,但不要慌,一个个来。
最后设置一下环境变量,增长CONSUL_HTTP_TOKEN。
我这里是Mac,改的是~/.bash_profile;其余系统的,请自行搜索。安全
sudo vim ~/.bash_profile
在末尾添加bash
export CONSUL_HTTP_TOKEN=cd76a0f7-5535-40cc-8696-073462acc6c7
而后让新的环境变量生效:
source ~/.bash_profile
关于acl部分,后面咱们会在web-ui里面进行控制,我会单独写一篇文章系统介绍Consul ACL如何设置。不过,你能够先看我以前的文章,Consul ACL集群配置说明以及ACL Token的用法, 但这篇文章只告诉了怎么用,并无讲清楚为何这么用。
agent就是启动consul代理部分。这里面主要是一些配置信息,如何启动。后面会把完整版的配置翻译出来,供你们参考,不过仍是强烈建议你们读读命令行的帮助说明, 即 ./consul agent --help
与consul的catalog打交道。
列出全部的数据中心: ./consul catalog datacenters
列出全部的节点:./consul catalog nodes
列出全部的服务:./consul catalog services
config命令用于与Consul的中央配置系统进行交互。
装备一个配置文件servie-defaults.hcl
Kind = "service-defaults" Name = "web" Protocol = "http"
写入一个配置:
./consul config write service-defaults.hcl
读取刚写入的配置:
./consul config read -kind service-defaults -name web
列出特定类型的配置:
./consul config list -kind service-defaults
删除一个配置:
./consul config delete -kind service-defaults -name web
和Consul Connect的进行交互。Consul Connect使用相互TLS提供服务到服务链接受权和加密。应用程序可使用sidecar代理自动为入站和出站链接创建TLS链接,而根本不知道Connect。应用程序还能够与Connect本机集成,以实现最佳性能和安全性。
consul debug命令在指定时间内监视Consul代理,将有关代理,集群和环境的信息记录到写入当前目录的归档中。
下面是执行./consul debug的结果,更多使用说明请执行./consul debug --help
能够看到输出文件被保存到命令行所在路径/consul-debug-1559985864.tar.gz中。你能够解压该文件,进行debug.
监视(watch)能够监视数据视图(例如,节点列表,KV对,健康检查)的更新。检测到更新时,将调用外部处理程序。处理程序能够是任何可执行文件或HTTP端点。
./consul watch -type=event -name=helloserviceevent /Use/cuixin/ConsulStudy/mac-dev/echo_handler.sh -helloservice
上面咱们指定监视的类型是event, 名称是helloserviceevent的事件, 当收到该事件时,将触发执行echo_handler.sh这个脚本,而且参数为helloservice。
下面是echo_handler.sh这个脚本的内容:
#!/bin/bash echo “hello $1” >> test.txt
很简单,会将内容追加到test.txt中。
注意这里须要给echo_handler.sh加下执行权限
chmod +x echo_handler.sh
event命令提供了一种将自定义用户事件触发到整个数据中心的机制。这些事件对Consul不透明,但它们可用于构建脚本基础结构,以执行自动部署,从新启动服务或执行任何其余编排操做。可使用watch(监视)处理事件。使用八卦协议传播事件。
虽然细节对于使用事件并不重要,但理解语义颇有用。八卦层将尽最大努力发放活动,但没有保证发放成功。与大多数使用共识复制的Consul数据不一样,事件数据纯粹是点对点的八卦。这意味着它没有持久化,也没有总排序。实际上,这意味着您不能依赖消息邮件传递的顺序。然而,优势是即便在没有服务器节点或停机期间仍可使用事件。
基础八卦也设置了用户事件消息大小的限制。很难给出一个确切的数字,由于它取决于事件的各类参数,但有效载荷应保持很是小(<100字节)。指定太大的事件将返回错误。
有了上面watch部分提供的监视,下面咱们就产生对应的事件就行。./consul event -name=helloserviceevent
这个触发事件的命令能够执行屡次,每次触发事件以后,你都会看到test.txt多了一行“hello -helloservice”
## exec
exec命令提供了一种远程执行机制。 例如,这可用于在提供Web服务的全部计算机上运行uptime命令。这里因为安全性问题,咱们在配置里面禁用了远程执行( "enable_script_checks":false)。
不然你能够执行./consul exec uptime 来查看各个节点已经启动多长时间了。
force-leave命令强制Consul集群的成员进入“left”状态。 若是该成员仍然存活,它最终将从新加入群集。 此方法的真正目的是强制删除“failed”状态的节点。
./consul force-leave node-name
info命令提供对操做员有用的各类调试信息。 根据代理是客户端仍是服务器,将返回有关不一样子系统的信息。
目前有顶级键:
agent:提供有关代理的信息
consul:有关Consul(客户或服务器)的信息
raft:提供有关Raft共识库的信息
serf_lan:提供有关LAN八卦池的信息
serf_wan:提供有关WAN八卦池的信息
./consul info
意图经过Connect定义服务的访问控制,用于控制哪些服务能够创建链接。能够经过API,CLI或UI管理意图。 (这部分和Consul Connect联系较为紧密,后面我研究透了,会单独写篇文章)。
建立一个容许“web”与“db”对话的意图:
$ consul intention create web db
测试是否容许“web”链接到“db”:
$ consul intention check web db
找到与“db”服务进行通讯的全部意图:
$ consul intention match db
经过指定至少一个现有成员,告知正在运行的Consul代理(使用“consul agent”)加入群集
./consul join cluster_member1_address
其中 cluster_member1_address 是ip:port的格式,能够经过运行./consul members 发现现有集群的地址。
keygen命令生成可用于Consul代理流量加密的加密密钥。 keygen命令使用加密强伪随机数生成器来生成密钥。你也能够选择本身生成一个UUID。
./consul keygen
keyring命令用于检查和修改Consul的Gossip Pools中使用的加密密钥。 它可以向集群分发新的加密密钥,淘汰旧的加密密钥,以及更改集群用来加密消息的密钥。
查看集群目前使用的全部秘钥
./consul keyring -list
这个值,与咱们配置文件中指定的 "encrypt":"krCysDJnrQ8dtA7AbJav8g=="是一致的。
kv命令用于经过命令行与Consul的KV存储进行交互。它公开了用于从KV存储中插入,更新,读取和删除的顶级命令。
使用值“5”建立或更新名为“redis / config / connections”的键:
./consul kv put redis/config/connections 5
读回这个值:
./consul kv get redis/config/connections
或获取详细的关键信息:
./consul kv get -detailed redis/config/connections
最后,删除密钥:
./consul kv delete redis/config/connections
leave命令触发代理的正常离开和关闭进程。 它用于确保其余节点将代理视为“离开了”而不是“失败了”。 离开了的节点在带快照从新启动时不会尝试从新加入群集。
这个是企业级consul所带功能,略。
lock命令提供了一种简单分布式锁的机制。在KV存储中的给定前缀处建立锁(或信号量),而且仅在保持时,调用子进程。若是锁丢失或通讯中断,子进程将终止。
当-n = 1时,只存在一个提供互斥的锁持有者或领导者。 设置更高的值会切换到容许多个持有者协调的信号量。另外,提供的前缀必须具备写权限
下面举个互斥锁的例子:
得到锁的进程会睡眠10s, 没拿到锁的会在1s内因超时被终止。
1.首先在kv存储放入一个键值对。
./consul kv put redis/config/connections 1
2.而后打开两个终端,切换到consul安装的目录,分别执行如下命令。
./consul lock -n=1 -timeout=1s redis/config/connections sleep 10
拿到锁的正常执行,睡眠10s后,执行完毕。
没拿到锁的因获取锁超时(这里设置是1s)被停止。
login命令将使用请求的auth方法将提供的第三方凭证与新建立的Consul ACL令牌交换。 配对命令consul logout应该用于销毁以这种方式建立的任何令牌,以免资源泄漏。
$ consul login -method 'minikube' \
-bearer-token-file '/run/secrets/kubernetes.io/serviceaccount/token' \ -token-sink-file 'consul.token'
$ cat consul.token
36103ae4-6731-e719-f53a-d35188cfa41d
因为这里我尚未学习kubernetes,后面有机会能够补上。
若是是从consul login建立的,则logout命令将销毁提供的令牌。
$ consul logout -token-file 'consul.token'
maint命令提供对服务维护模式的控制。 使用该命令,能够将节点提供的服务或节点上的全部服务标记为“维护中”。 在此操做模式下,该服务不会出如今DNS查询结果或API结果中。 这有效地将服务从服务的可用“健康”节点池中取出。
经过在服务的紧急状态下注册运行情况检查来激活维护模式,并经过取消注册运行情况检查来取消激活维护模式。
下面注册一个helloservice1,在postman中,对应位置输入如下参数。
PUT http://localhost:8500/v1/agent/service/register?token=cd76a0f7-5535-40cc-8696-073462acc6c7 { "ID": "helloservice1", "Name": "helloservice", "Tags": [ "v1", "master" ], "Address": "127.0.0.1", "Port": 8000, "Meta": { "api_version": "1.0" }, "EnableTagOverride": false, "Check": { "DeregisterCriticalServiceAfter": "90m", "HTTP": "http://www.baidu.com/", "Interval": "10s" } }
让服务处于维护状态
./consul maint -enable -service helloservice1 -reason "need to update"
让服务取消维护状态
./consul maint -disable -service helloservice1
members命令输出Consul代理知道的当前成员列表及其状态。 节点的状态只能是“alive”,“left”或“failed”。
处于“failed”状态的节点仍然列出,由于在故障实际上只是网络分区的状况下,Consul会尝试在必定时间内从新链接故障节点。
单机版输出:
集群版输出:
monitor命令用于链接和跟踪正在运行的Consul代理的日志。 Monitor将显示最近的日志,而后继续关注日志,直到中断或远程代理退出以前不会退出。
monitor命令的强大之处在于它容许您以相对较高的日志级别(例如“warn”)记录代理,但仍然能够访问debug日志并在必要时查看debug日志。
举个例子
./consul monitor debug
operator命令为Consul操做员提供集群级工具,例如与Raft子系统交互。具体子命令的使用说明记得使用--help
好比:
./consul operator raft --help
下面列出raft对等集:
单机版
集群版
能够看到只有server agent才参加raft 对等集的一部分。
reload命令会触发代理的配置文件从新加载。
SIGHUP信号一般用于触发从新加载配置,但在某些状况下,触发CLI可能更方便。
此命令与信号的操做相同,这意味着它将触发从新加载,但不会等待从新加载完成。 从新加载的任何错误都将出如今代理日志中,而不会出如今此命令的输出中。
注意
并不是全部配置选项均可从新加载。 有关支持哪些选项的详细信息,请参阅代理选项页面上的可从新加载配置部分。
举个例子:
咱们将一开始的配置文件,config.json 中的 log_level 由 info 改成 debug 。
./consul reload
能够在consul agent运行的命令行中看到在从新加载配置。
rtt命令使用Consul的集群网络坐标模型估计两个节点之间的网络往返时间。
因为这里须要多个server,因此这里我用了前面一篇文章在虚拟机上搭建的集群。
这里因为我只有一个数据中心,无法实验多个数据中心的rtt, 不过使用方法相似,以下
$ consul rtt -wan n1.dc1 n2.dc2 Estimated n1.dc1 <-> n2.dc2 rtt: 1.275 ms (using WAN coordinates)
services命令具备子命令,用于与向本地代理注册的Consul服务进行交互。 它们提供了有用的命令,例如注册和注销,以便在脚本,开发模式等中轻松注册服务。要查看目录中的全部服务,而不是仅查看代理本地服务,请使用./consul catalog services命令。
建立一个简单的服务:
./consul services register -name=web
从一个配置 文件中 建立服务
$ cat web.json { "Service": { "Name": "web" } } $ ./consul services register web.json
注销一个服务(两种方式均可以):
$ ./consul services deregister web.json $ ./consul services deregister -id web
snapshot命令具备子命令,用于保存,恢复和检查Consul服务器的状态以进行灾难恢复。 这些是原子时间点快照,包括键/值条目,服务目录,准备好的查询,会话和ACL。
save:保存Consul服务器状态的快照
restore: 恢复Consul服务器状态的快照
inspect: 显示有关Consul快照文件的信息
tls命令用于帮助为Consul TLS设置CA和证书。
consul validate命令对Consul配置文件执行完全的健全性测试。 对于给定的每一个文件或目录,该命令将尝试像consul agent命令那样解析内容,并捕获任何错误。
这对于仅对配置进行测试颇有用,而无需实际启动代理。 这将执行代理程序将执行的全部验证,所以应该为此提供将由代理程序加载的完整配置文件集。 此命令没法对部分配置片断进行操做,由于这些片断不会经过完整的代理验证。
好比说验证下咱们一开始的配置文件
./consul validate config.json
version命令打印Consul的版本以及它与其余代理进行通讯时理解的协议版本。
./consul version
1.因为篇幅有限,本文的大致上是对命令行的基本介绍,想要用好命令行还须要读读官方文档和linux的说明文档。
2.另外文中出现的集群版:请参考个人另外一篇文章,Consul1.5.0 带ACL控制集群搭建
https://www.consul.io/docs/co...
https://www.consul.io/docs/ac...
https://www.consul.io/docs/ag...