consul-KV配置中心与template模板

consul-KV配置中心与template模板

1.1 配置中心 什么是配置中心?

配置中心管理的是系统启动需要的参数和依赖的各类外部信息,比如 laravel 里的配置项,一般情况都 是。用 key-value 来存取,也可以做成是一个有层次结构的key-value。配置中心一般用来控制系统的启 动,运行时的部分参数的调整,比如进程数、缓存类型等。这些数据的特点是,一般情况下变化不大, 但是需要考虑不同环境(有时也叫组)的隔离性,同时需要考虑存在很多套不同的配置,不同环境的系统通 过这样的一个配置中心来去拉取自己的参数。这一块基本上常见的apollo、zk、etcd都支持的很好。

配置中心的作用?

管理系统启动、运行期间需使用的配置信息,从而做到动态的配置管理。

怎么做配置中心?

我们采用Consul模板工具基于Consul KV数据集来渲染配置文件

参考文献:https://www.cnblogs.com/yx88/p/11550146.html

1.2 什么是Consul模板

​Consul模板命令启动后,它将读取一个到多个模板文件,并向Consul发出查询,加载它们所需的所有数 据。通常, consul-template 作为守护程序运行,一开始获取初始值,之后持续监控更新,在集群中发 生任何相关更改时都会重新加载模板。更新过程完成后,模板还可以运行后置命令。例如,它可以在进 行配置更改后将HUP信号发送到负载均衡器服务。

​模板部署方式:根据使用情况,用户可能在少数几个主机上只有一个consul-template实例,或者也可能 需要在每个主机上运行多个实例。每个Consul模板过程都可以管理多个不相关的文件,如果这些文件共 享数据依赖项,则将根据需要对提取的内容进行重复数据删除,这样可以减少Consul服务器上可能共享 的负载。

单次模板加载:用户也可以使用 -once 标志仅加载一次模板,这在测试或者由其他脚本触发时比较有用。

Conusl模板有啥用途?

  1. 更新配置文件 : Consul模板工具可用于更新服务配置文件,一种常见的用法是管理负载均衡配置 文件,这些文件需要在许多无法直接连接到Consul群集的计算机上定期动态更新;
  2. 发现有关Consul群集和服务的数据 :可以收集有关Consul群集中服务的信息。例如,用户可以收集 群集上运行的所有服务的列表,或者可以发现Redis所有服务的地址。注意,这个操作在生产环境 有所限制。

1.3 安装Consul模板

在开发者模式下使用本地Consul代理,先执行 consul agent -dev ,Consul代理正常运行后才能进行 以下其他步骤。 Consul模板工具本身不包含在Consul二进制文件中,需要单独安装。可以直接安装预 编译的二进制文件,也可以下载源代码自行编译,我们将安装预编译的二进制文件。

首先,先下载 consul-template 二进制文件:

下载地址:https://releases.hashicorp.com/consul-template/

这里采用:https://releases.hashicorp.com/consul-template/0.26.0/consul-template_0.26.0_linux_386.zip

1 . 3 .1 安装步骤

# 1. 解压缩
$ unzip consul-template_0.26.0_linux_386.zip

# 2. 将执行文件(解压缩之后的文件夹),复制到/usr/local/bin文件夹下
cp consul-template /usr/local/bin

# 3. 设置环境变量,输入命令:
vim /etc/profile

# 4. 将这里的代码添加到 profile 文件末尾(这里覆盖之前consul的配置)
export CONSUL_TEMPLATE_HOME=/usr/local/bin/consul-template
export PATH=$PATH:$CONSUL_HOME:$CONSUL_TEMPLATE_HOME;

# 5. 执行命令使环境变量生效
source /etc/profile

# 6. 验证软件是否安装成功
consul-template -v

1.4 Consul-template 配置文件生成

步骤:

  1. Consul-template 定义模板文件: demo_consul.tpl
#创建模板
touch demo_consul.tpl 

#定义模板内容项
{{ key "/demo/demo_consul" }}

注意:key的内容就是consul中的key名称

在这里插入图片描述

  1. consul-template读取KV数据,用于渲染生成配置文件
#运行consul-template命令,同时指定要使用的模板和需要更新的文件:
consul-template -consul-addr 192.168.238.137:8500 -template="demo_consul.tpl:demo_consul.conf" -once

命令说明:

  • -consul-addr: 指定Consul的API接口 ,默认是8500端口。 如果是本机执行,则无需这个参数。
  • -template:模板参数,第一个参数是模板文件位置,第二个参数是结果输出位置。
  • -once:只运行一次就退出,如果没有这个参数,则为后台挂起,起到动态监听的作用。

查看结果:

在这里插入图片描述

结论:template模板就是动态监听consul,把consul中输入的value内容动态渲染到本地,并生成想要的配置文件,这里输出的是nginx.conf,也可以是.env之类的配置信息。

  1. 想要动态更新模板的值

    可以采用kv指令更新 ,

    consul kv put demo/demo_consul "you_values"
    

    hashicorp/street_address 值,可以看到该文件立即更新。有啥用? 比如用户可以用相同的过程来 更新HAProxy负载均衡器配置。

1 . 5 Consul-template 服务配置生成

步骤:

  1. 定义模板文件: all-services.tpl
{{range services}} # {{.Name}}{{range service .Name}}
{{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1; {{end}}
{{end}}
  1. 运行 consul-template 命令指定我们刚刚创建的模板,并使用 -once 标志,仅运行一次
consul-template -consul-addr 192.168.238.137:8500 -template="all-services.tpl:all-services.conf" -once

运行结果:

在这里插入图片描述

注意:这里输出的服务信息是consul注册成功而且节点健康的服务配置信息。

当前注册的服务有下:

在这里插入图片描述

userService中的服务配置有下:

在这里插入图片描述

结论:consul-template模板可以动态的输出consul服务中所注册的服务配置信息,拿userService举例,这里注册了两台功能一样,都是用来提供用户信息服务,这里可以根据注册的服务器数量进行nginx的负载均衡配置。

1 . 5 . 1 根据consul-template进行nginx的负载均衡配置

1 . 创建模板:userSerivce.tpl

#service后面的是consul注册成功的服务名,这里用userSerivce
#如果服务是userSerivce,则进行生产userSerivce的nginx.conf的配置信息
{{if service "userService"}}
    server {
        listen  80;
        server_name  ~^wallet\.(.+\.)?wudimanong\.(com|cn)$;
        access_log  /data/logs/nginx/wallet-access.log ;
        error_log  /data/logs/nginx/wallet-error.log ;

        client_max_body_size  1000m;

        location / {
                include proxy.conf;
                proxy_pass http://userService;
        }
    }

    upstream userService {
        {{range service "userService"}}
                 server {{.Address}}:{{.Port}};
        {{end}}
    }
{{end}}

2 . 生成模板

consul-template -consul-addr 192.168.238.137:8500 -template="userService.tpl:userService.conf" -once

3 . 结果

在这里插入图片描述

userService中的服务配置有下:

在这里插入图片描述

**注意:**如果此时我们关掉userService微服务的一个实例,相应地我们就会从生成的Nginx配置中看到下线的实例的服务地址和端口就被剔除掉,如下。

在这里插入图片描述

1 . 6 Consul-KV

什么是consul的KV数据?

Consul 提供了一个简单的键值存储(KV store)。它可以用于保存动态配置、辅助服务间协作、建立领导 选举以及其他开发者想要实现的功能。可以把 consul 理解为简单的 Redis ,根据 KV 来进行键值对的数 据存储。

为什么使用Consul的KV数据?

consul的kv功可以用来做动态配置。

kv的增加修改删除查询除了可以通过consul-cli客户端,还可以通过 http-apiconsul的ui

1 . 6 . 1 consul-cli请求操作

1 . 获取kv结果值
consul kv get demo/demo_consul

用 -detailed 标识可以获取 Consul 保存的详细元数据

consul kv get -detailed demo/demo_consul

-recurse 选项可以递归查询子键,结果按字典序排列

consul kv get -recurse
2 . 添加与编辑
consul kv put -flags=42 demo/new_test '{"serviceName":"order_consul","IP": "192.168.48.129","prot": "9503"}'

在这里插入图片描述

3. 删除一个键值对
consul kv delete demo/new_test

1 . 6 . 2 Http-api请求操作

使用 HTTP GET ,URL 如下,IP为运行consul agent的机器ip,port默认为8500,key注意如果有path的 话需要带上。

格式:

http://ip:port/v1/kv/key
1 . 获取kv信息(get)
http://192.168.48.128:8500/v1/kv/demo/new_test

#demo/new_test 为key的路径值,获取内容如下
#value是经过base64加密过的数据,需要进行解密
[
	{
		"LockIndex": 0,
		"Key": "config/db/data",
		"Flags": 0,
		"Value": "ewoic2lnbiI6Indpbm5lciIsCiAgImRyaXZlciI6InJlZGlzIgp9",
		"CreateIndex": 21275,
		"ModifyIndex": 21286
	}
]
2 . 新增/修改数据(put)
http://192.168.48.128:8500/v1/kv/demo/test

在这里插入图片描述

3 . 删除数据 (DELETE)
http://192.168.48.128:8500/v1/kv/demo/test
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值