1.启动一个带ACL 控制的Agent

首先,从这个网址下载consul,解压后发现就是个可执行文件,如果不可以执行,chmod +x consul 一下。

为了试验Consul较多的功能,这里我们打算启用一个dev模式,带ACL控制的Consul代理。

配置文件config.json如下

{

"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"

}

}

}

下面是参数说明:

datacenter 此标志表示代理运行的数据中心。如果未提供,则默认为“dc1”。 Consul拥有对多个数据中心的一流支持,但它依赖于正确的配置。同一数据中心中的节点应在同一个局域网内。

primary_datacenter: 这指定了对ACL信息具有权威性的数据中心。必须提供它才能启用ACL。

bind_addr: 内部群集通信绑定的地址。这是群集中所有其他节点都应该可以访问的IP地址。默认情况下,这是“0.0.0.0”,这意味着Consul将绑定到本地计算机上的所有地址,并将第一个可用的私有IPv4地址通告给群集的其余部分。如果有多个私有IPv4地址可用,Consul将在启动时退出并显示错误。如果指定“[::]”,Consul将通告第一个可用的公共IPv6地址。如果有多个可用的公共IPv6地址,Consul将在启动时退出并显示错误。 Consul同时使用TCP和UDP,并且两者使用相同的端口。如果您有防火墙,请务必同时允许这两种协议。

advertise_addr: 更改我们向群集中其他节点通告的地址。默认情况下,会使用-bind参数指定的地址.

server: 是否是server agent节点。

connect.enabled: 是否启动Consul Connect,这里是启用的。

node_name:节点名称。

data_dir: agent存储状态的目录。

enable_script_checks: 是否在此代理上启用执行脚本的健康检查。有安全漏洞,默认值就是false,这里单独提示下。

enable_local_script_checks: 与enable_script_checks类似,但只有在本地配置文件中定义它们时才启用它们。仍然不允许在HTTP API注册中定义的脚本检查。

log-file: 将所有Consul Agent日志消息重定向到文件。这里指定的是/opt/consul/log/目录。

log_rotate_bytes:指定在需要轮换之前应写入日志的字节数。除非指定,否则可以写入日志文件的字节数没有限制

log_rotate_duration:指定在需要旋转日志之前应写入日志的最长持续时间。除非另有说明,否则日志会每天轮换(24小时。单位可以是"ns", "us" (or "µs"), "ms", "s", "m", "h", 比如设置值为24h

encrypt:用于加密Consul Gossip 协议交换的数据。在启动各个server之前,配置成同一个UUID值就行,或者你用命令行consul keygen 命令来生成也可以。

acl.enabled: 是否启用acl.

acl.default_policy: “allow”或“deny”; 默认为“allow”,但这将在未来的主要版本中更改。当没有匹配规则时,默认策略控制令牌的行为。在“allow”模式下,ACL是黑名单:允许任何未明确禁止的操作。在“deny”模式下,ACL是白名单:阻止任何未明确允许的操作.

acl.enable_token_persistence: 可能值为true或者false。值为true时,API使用的令牌集合将被保存到磁盘,并且当代理重新启动时会重新加载。

acl.tokens.master: 具有全局管理的权限,也就是最大的权限。它允许操作员使用众所周知的令牌密钥ID来引导ACL系统。需要在所有的server agent上设置同一个值,可以设置为一个随机的UUID。这个值权限最大,注意保管好。

接着我们以dev模式启动agent。

./consul agent -dev -config-file ./config.json

启动完之后,你会发现出现下面的错误

这个错误是没有设置agent-token造成的,agent-token主要用于客户端和服务器执行内部操作.比如catalog api的更新,反熵同步等。

1.先创建agent-token

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。

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控制的集群,请参见我的另一篇文章。

2.命令行

consul 子命令挺多的,如下图,但不要慌,一个个来。

最后设置一下环境变量,增加CONSUL_HTTP_TOKEN。

我这里是Mac,改的是~/.bash_profile;其他系统的,请自行搜索。

sudo vim ~/.bash_profile

在末尾添加

export CONSUL_HTTP_TOKEN=cd76a0f7-5535-40cc-8696-073462acc6c7

然后让新的环境变量生效:

source ~/.bash_profile

acl

关于acl部分,后面我们会在web-ui里面进行控制,我会单独写一篇文章系统介绍Consul ACL如何设置。不过,你可以先看我之前的文章,Consul ACL集群配置说明以及ACL Token的用法, 但这篇文章只告诉了怎么用,并没有讲清楚为什么这么用。

agent

agent就是启动consul代理部分。这里面主要是一些配置信息,如何启动。后面会把完整版的配置翻译出来,供大家参考,不过还是强烈建议大家读读命令行的帮助说明, 即 ./consul agent --help

catalog

与consul的catalog打交道。

列出所有的数据中心: ./consul catalog datacenters

列出所有的节点:./consul catalog nodes

列出所有的服务:./consul catalog services

config

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

connect

和Consul Connect的进行交互。Consul Connect使用相互TLS提供服务到服务连接授权和加密。应用程序可以使用sidecar代理自动为入站和出站连接建立TLS连接,而根本不知道Connect。应用程序还可以与Connect本机集成,以实现最佳性能和安全性。

debug

consul debug命令在指定时间内监视Consul代理,将有关代理,集群和环境的信息记录到写入当前目录的归档中。

下面是执行./consul debug的结果,更多使用说明请执行./consul debug --help

可以看到输出文件被保存到命令行所在路径/consul-debug-1559985864.tar.gz中。你可以解压该文件,进行debug.

watch

监视(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

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

force-leave命令强制Consul集群的成员进入“left”状态。 如果该成员仍然存活,它最终将重新加入群集。 此方法的真正目的是强制删除“failed”状态的节点。

./consul force-leave node-name

info

info命令提供对操作员有用的各种调试信息。 根据代理是客户端还是服务器,将返回有关不同子系统的信息。

目前有顶级键:

agent:提供有关代理的信息

consul:有关Consul(客户或服务器)的信息

raft:提供有关Raft共识库的信息

serf_lan:提供有关LAN八卦池的信息

serf_wan:提供有关WAN八卦池的信息

./consul info

intention

意图通过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

join

通过指定至少一个现有成员,告知正在运行的Consul代理(使用“consul agent”)加入群集

./consul join cluster_member1_address

其中 cluster_member1_address 是ip:port的格式,可以通过运行./consul members 发现现有集群的地址。

keygen

keygen命令生成可用于Consul代理流量加密的加密密钥。 keygen命令使用加密强伪随机数生成器来生成密钥。你也可以选择自己生成一个UUID。

./consul keygen

keyring

keyring命令用于检查和修改Consul的Gossip Pools中使用的加密密钥。 它能够向集群分发新的加密密钥,淘汰旧的加密密钥,以及更改集群用来加密消息的密钥。

查看集群目前使用的所有秘钥

./consul keyring -list

这个值,与我们配置文件中指定的 "encrypt":"krCysDJnrQ8dtA7AbJav8g=="是一致的。

kv

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

leave命令触发代理的正常离开和关闭进程。 它用于确保其他节点将代理视为“离开了”而不是“失败了”。 离开了的节点在带快照重新启动时不会尝试重新加入群集。

license

这个是企业级consul所带功能,略。

lock

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

login命令将使用请求的auth方法将提供的第三方凭证与新创建的Consul ACL令牌交换。 配对命令consul logout应该用于销毁以这种方式创建的任何令牌,以避免资源泄漏。

bearer-token-file = - 包含要与此auth方法一起使用的秘密承载令牌的文件的路径。

meta = - 在令牌上设置的元数据,格式为key = value。 可以多次指定该标志以设置多个元字段。

method = - 要登录的auth方法的名称。

token-sink-file = - 最新令牌的SecretID在此文件中保持最新。

$ 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,后面有机会可以补上。

logout

如果是从consul login创建的,则logout命令将销毁提供的令牌。

$ consul logout -token-file 'consul.token'

maint

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

members命令输出Consul代理知道的当前成员列表及其状态。 节点的状态只能是“alive”,“left”或“failed”。

处于“failed”状态的节点仍然列出,因为在故障实际上只是网络分区的情况下,Consul会尝试在一定时间内重新连接故障节点。

单机版输出:

集群版输出:

monitor

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

monitor命令的强大之处在于它允许您以相对较高的日志级别(例如“warn”)记录代理,但仍然可以访问debug日志并在必要时查看debug日志。

log-level - 要显示的消息的日志级别。默认情况下,这是“info”。此日志级别可能比代理配置为运行时更详细。可用的日志级别为“trace”,“debug”,“info”,“warn”和“err”。

举个例子

./consul monitor debug

operator

operator命令为Consul操作员提供集群级工具,例如与Raft子系统交互。具体子命令的使用说明记得使用--help

比如:

./consul operator raft --help

下面列出raft对等集:

单机版

集群版

可以看到只有server agent才参加raft 对等集的一部分。

reload

reload命令会触发代理的配置文件重新加载。

SIGHUP信号通常用于触发重新加载配置,但在某些情况下,触发CLI可能更方便。

此命令与信号的操作相同,这意味着它将触发重新加载,但不会等待重新加载完成。 重新加载的任何错误都将出现在代理日志中,而不会出现在此命令的输出中。

注意

并非所有配置选项都可重新加载。 有关支持哪些选项的详细信息,请参阅代理选项页面上的可重新加载配置部分。

举个例子:

我们将一开始的配置文件,config.json 中的 log_level 由 info 改为 debug 。

./consul reload

可以在consul agent运行的命令行中看到在重新加载配置。

rtt(round trip time)

rtt命令使用Consul的集群网络坐标模型估计两个节点之间的网络往返时间。

由于这里需要多个server,所以这里我用了前面一篇文章在虚拟机上搭建的集群。

这里由于我只有一个数据中心,没法实验多个数据中心的rtt, 不过使用方法类似,如下

$ consul rtt -wan n1.dc1 n2.dc2

Estimated n1.dc1 n2.dc2 rtt: 1.275 ms (using WAN coordinates)

services

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

snapshot命令具有子命令,用于保存,恢复和检查Consul服务器的状态以进行灾难恢复。 这些是原子时间点快照,包括键/值条目,服务目录,准备好的查询,会话和ACL。

save:保存Consul服务器状态的快照

restore: 恢复Consul服务器状态的快照

inspect: 显示有关Consul快照文件的信息

tls

tls命令用于帮助为Consul TLS设置CA和证书。

validate

consul validate命令对Consul配置文件执行彻底的健全性测试。 对于给定的每个文件或目录,该命令将尝试像consul agent命令那样解析内容,并捕获任何错误。

这对于仅对配置进行测试很有用,而无需实际启动代理。 这将执行代理程序将执行的所有验证,因此应该为此提供将由代理程序加载的完整配置文件集。 此命令无法对部分配置片段进行操作,因为这些片段不会通过完整的代理验证。

比如说验证下我们一开始的配置文件

./consul validate config.json

version

version命令打印Consul的版本以及它与其他代理进行通信时理解的协议版本。

./consul version

最后的说明

1.由于篇幅有限,本文的大体上是对命令行的基本介绍,想要用好命令行还需要读读官方文档和linux的说明文档。

2.另外文中出现的集群版:请参考我的另一篇文章,Consul1.5.0 带ACL控制集群搭建

参考:

consul命令行查看服务_Consul 命令行最全文档相关推荐

  1. 进程、内存、服务和硬盘容量相关的命令及查看帮助和命令行中各种文件颜色的含义

    1. 进程管理相关 1.1 进程管理的常用操作 判断服务器健康状态 查看系统中所有进程 "kill"进程 1.2 ps命令查看系统目前的进程状态 语法:ps [-option] 参 ...

  2. linux 命令查询主机名,主机名命令,linux查看主机名命令

    琪琪词资源网 - 主机名命令,linux查看主机名命令 1.linux查看主机名命令 [root@zijuan /]# hostname zijuan 技巧:两个简单的命令临时临时设置主机名. (1) ...

  3. consul命令行查看服务_Go语言微服务架构实战:第十三节 微服务管理--Docker安装及运行consul节点...

    微服务管理--Docker安装及运行consul节点 搭建集群 在真实的生产环境中,需要真实的部署consul集群.在一台机器上想要模拟多台集群部署的效果,有两种方案:一种是借助虚拟机,另一种是借助容 ...

  4. linux 上使用wc -l命令快速查看文件内容有多少行,以及如何匹配指定字符查看多少行

    1 linux的cat -n命令查看文件内容一共有多少行 1.cat -n命令查看文件多少行 cat -n filename 如:cat -n gallery_color_depth.txt - 2. ...

  5. linux查看服务端口命令大全

    目录: 零. linux怎么查看所有服务端口 一.常用命令 二.lsof -i 需要 root 用户的权限来执行 三.netstat命令 四.扩展资料 零. linux怎么查看所有服务端口 1.打开l ...

  6. 远程拷贝、查看端口、vim常见快捷键、查找替换命令、grep命令、查看存储空间的命令、chkconfig命令、系统自动启动级别、主机名配置、IP地址配置、域名映射、防火墙设置

    2.1.远程拷贝 (将/export/servers/hadoop上的文件拷贝到bigdate@192.168.1.1:/export/servers/ ) scp –r /export/server ...

  7. MYSQL中如何查看表结构命令_mysql查看表结构命令

    mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_s ...

  8. linux除了cat读取文件内容,linux cut命令和cat命令以及查看文件内容命令总结

    cut-d: -f 1 /etc/passwd > /tmp/users -d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段 当然也可以通过cut取得文件中每行中特定的几个字符,例如: ...

  9. linux 打开大文件命令,linux查看大文本文件命令

    linux 查看超大文本文件内容 现在有一个应用的日志,大小在5G左右.想要用linux命令去查看该文件中的如果你的日志是一行一行的,而你要提取的关键字为"ERROR"所在的整行内 ...

最新文章

  1. MySQL跑在CentOS 6 和 7上的性能比较
  2. Linux服务器的最大内存和CPU数
  3. mod php是什么意思,mod_php模式原理探析
  4. C++以字符串形式返回第N个斐波那契的算法(附完整源码)
  5. 《Netty权威指南》
  6. php未定义要怎样做,php-Behat-未定义的功能步骤
  7. 运维真的被云革命掉了吗?
  8. Jungle Roads//最小生成树kruskal
  9. restTemplate设置访问超时
  10. 【EMNLP2020】最后论文征稿通知和常见问题解答
  11. Pannellum:实例之自定义热点信息
  12. C# 实现获取网络时间
  13. 数字信号处理第二章:Z变换及离散时间系统系统分析
  14. Hibernate之底层原理的7点整理和总结
  15. 夜莺(Nightingale)企业级监控平台
  16. 战略管理学习---第2章 战略目标
  17. 步步学习自定义View:Hencoder 精简版学习笔记(一)
  18. 基于Python3.6配置开发环境
  19. 安卓游戏优化加速器v1.0.5
  20. CTAB-GAN:高效且可行的表格数据合成

热门文章

  1. MATLAB运动车辆检测系统
  2. pythondjango的用途_django框架的作用是什么
  3. jmeter压测TIDB数据库
  4. Nextcloud私有云 - 零基础搭建私有云盘
  5. k易语言html导入超级列表框,易语言超级列表框通用数据导入导出
  6. highCharts 设置标示线
  7. 30分钟搞懂 RocketMQ原理
  8. 面向火炮火控系统的嵌入式软件测试平台
  9. 丁鹿学堂前端培训:console的进阶用法
  10. python 利用time模块给程序计时