名字服务consul-template

consul-template官方文档:consul-template

consul-template说明

Consul Template 提供一个方便的方式从Consul获取数据通过consul-template的后台程序保存到文件系统。
这个后台进程可以实时监听consul示例的变化,并动态更新对应的信息到对应的文件系统。
consul template和consul一样,也是一个二进制文件,可以从 官网下载对应的版本。
linux系统中可以把对应的二进制包放入到系统的PATH环境变量中。

consul-template的实际应用

会以实例说明consul template的应用,在实例中会介绍consul template的语法特性!
有如下consul集群: 【有关consul的简单应用、集群搭建、服务注册与发现、键值管理:CLICK HERE

[root@test1 nameservice]# consul members
Node    Address         Status  Type    Build  Protocol  DC        Segment
test1   10.9.8.26:8301  alive   server  1.7.0  2         local_ds  <all>
test2   10.9.8.25:8301  alive   server  1.7.0  2         local_ds  <all>
test3   10.9.8.24:8301  alive   server  1.7.0  2         local_ds  <all>
clent1  10.9.8.23:8301  alive   client  1.7.0  2         local_ds  <default>
[root@test1 nameservice]# consul operator raft list-peers
Node   ID                                    Address         State     Voter  RaftProtocol
test2  a7f2c8ef-21ec-f544-8eac-ededfd9a0f48  10.9.8.25:8300  follower  true   3
test1  99de144d-82dd-22e7-11bb-1c7e1fcfe3c4  10.9.8.26:8300  follower  true   3
test3  f501a2ab-2719-dd76-2768-fafd9bb40573  10.9.8.24:8300  leader    true   3

使用consul template模板化consul注册的服务

查找出当前consul中注册的服务信息:

[root@test3 nameservice]# consul catalog services 
consul
min-kline
min-redis

查找出当前consul中注册的kv信息:

[root@test3 nameservice]# curl 10.9.8.25:8500/v1/kv/?keys
["redis/config/connections","stock/db/kline_info","wm/memory/redis_info"]

consul模板语法用法

现有如下模板:

# 显示数据中心
 {{ datacenters }}
# file的用法,会把文件中的内容读取到输出的文件中
 {{ file "/data/nameservice/template/consul.txt" }}

# 查询指定的key值,key值后面可以加上 @数据中心 指定查询某个中心的key值
# 若是不加,则指向当前数据中心 
  {{ key "stock/db/kline_info" }}
#  {{ key "stock/db/kline_info@local_ds" }}

# 查询key值是否存在,值存在的话会返回一个true,否则返回false
  {{ keyExists "wm/memory/redis_info1" }}
# 可以放入if语句中,做流程选择
  {{ if keyExists "wm/memory/redis_info" }}
     {{ key "stock/db/kline_info"  }} 
  {{ else }}
     {"host":"10.9.8.24", "port":"3309"}
  {{ end }}
# 查询consul中指定的值,如果key不存在则返回默认值
  {{ keyOrDefault "stock/db/deal_info" "None" }}
# ls返回kv键值对,注意这里的ls后面的路径要在键值对的上一层
  {{ range ls "wm/memory" }}
  {{ .Key }}: {{ .Value }}{{ end }}
  {{ range ls "redis/config/connections" }}
  {{ .Key }}: {{ .Value }}{{ end }}
# 查询节点
  {{ with node "test1" }}
  {{ .Node.Address }} {{ .Node.ID }} {{ end }}
# 查询所有的node, 忽略指定的数据中心,则指向本地
  {{ range nodes "@local_ds"}}
  {{ .Address }} {{ end }}
# 查询consul中的所有服务
{{ range services }}
{{ .Name }}
{{ end }}

然后使用consul template执行如下命令:

consul-template -consul-addr=10.9.8.25:8500 -template "test.hcl:test.out" -once
-consul-addr: 指定consul集群的ip,
-template: 指定使用的模板文件,和输出的文件名
-once: consul-template是在后运行的,此参数指定consul-template运行一次就停止

执行结构如下:

# 显示数据中心
 [local_ds]
# file的用法,会把文件中的内容读取到输出的文件中
 consul version
# 查询指定的key值,key值后面可以加上 @数据中心 指定查询某个中心的key值
# 若是不加,则指向当前数据中心 
  {
	"user": "klineread",
  "host": "10.9.68.41",
  "port": "3306",
  "password": "1234qwer",
  "db": "klinedb"
}
#  {
	"user": "klineread",
  "host": "10.9.68.41",
  "port": "3306",
  "password": "1234qwer",
  "db": "klinedb"
}

# 查询key值是否存在,值存在的话会返回一个true,否则返回false
  false
# 可以放入if语句中,做流程选择
  
     {
	"user": "klineread",
  "host": "10.9.68.41",
  "port": "3306",
  "password": "1234qwer",
  "db": "klinedb"
} 
  
# 查询consul中指定的值,如果key不存在则返回默认值
  None
# ls返回kv键值对,注意这里的ls后面的路径要在键值对的上一层
  
  redis_info: {
	"sentinel_host": ["10.9.68.41", "10.9.68.33"],
  "password": "123456",
  "mymaster": "mymaster"
}
  
# 查询节点
  
  10.9.8.26 99de144d-82dd-22e7-11bb-1c7e1fcfe3c4 
# 查询所有的node, 忽略指定的数据中心,则指向本地
  
  10.9.8.23 
  10.9.8.26 
  10.9.8.25 
  10.9.8.24 
# 查询consul中的所有服务

consul

min-kline

min-redis

services模板用法

说明:下面不在列出执行过程,只写出对应模板语法及结果展示:

  • 查询所有服务

{{ services }} # {{ services “@local_ds”}} 不指定数据中心,默认为当前数据中心

result

[0xc0001a0090 0xc0001a00c0 0xc0001a00f0]
  • 得出服务具体信息:

{{ range services }}
{{ .Name }}
{{ end }}

result

consul

min-kline

min-redis
  • 列出指定目录下的键值对:

{{ range tree “stock/db/” }}
{{ .Key }}:{{ .Value }} {{ end }}

result

kline_info:{
	"user": "klineread",
  "host": "10.9.68.41",
  "port": "3306",
  "password": "1234qwer",
  "db": "klinedb"
} 
  • 根据kv值创建映射
    首先向集群中添加几个kv值。
[root@test1 nameservice]# consul kv put redis/config/maxmemory 4G
Success! Data written to: redis/config/maxmemory
[root@test1 nameservice]# consul kv put redis/config/timeout 60 
Success! Data written to: redis/config/timeout
[root@test1 nameservice]# consul kv put redis/config/requirepass 12345
Success! Data written to: redis/config/requirepass 
[root@test1 nameservice]# curl 10.9.8.25:8500/v1/kv/redis/config/?keys 
["redis/config/connections","redis/config/maxmemory","redis/config/requirepass","redis/config/timeout"][root@test1 nameservice]#

有如下consul template模板:

{{ range $key, $pairs := tree “redis” | byKey }}{{ $key }}: {{ range
$pair := $pairs }} {{ .Key }}={{ .Value }} {{ end }}{{ end }}
result

config:
  connections=5
  maxmemory=4G
  requirepass=12345
  timeout=60
  • value是json字符
    在这种情况下key对应的values是一个字符串,还有一种情况是key对应values是一个json字符串,下面一个实例是对values是json的情况进行解析!
[root@test1 nameservice]# consul  kv get stock/db/kline_info
{
	"user": "klineread",
  "host": "10.9.68.41",
  "port": "3306",
  "password": "1234qwer",
  "db": "klinedb"
}

模板如下:

[stock_kline_dbinfo]
{{ range $k, $v := key "stock/db/kline_info" | parseJSON }}{{ $k }}={{ $v }}      
{{ end }}

result

[stock_kline_dbinfo]
db=klinedb
host=10.9.68.41
password=1234qwer
port=3306
user=klineread

consul-template的语法还有很多,以上只是基本的应用。更加详细的语法请关注官网实例,在学习过程中发现一些blog中的语法会报错,应该是因为consul-template版本更新导致!
consul-template

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值