Confd+Consul 动态生成配置文件
Confd+Consul 动态生成配置文件
作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/archive/2004/01/13/11287435.html
目录
一、Consul安装和配置
1、consul是什么?
2、Consul基础架构
3、Consul架构图
4、Consul安装
5、Consul启动
6、Consul启动日志
7、dashboard
二、confd安装和配置
1、confd简介
2、confd是如何工作的?
3、confd的安装
4、confd的配置
三、整体流程图
一、Consul安装和配置
1、consul是什么?
consul是HashiCorp公司推出的一款工具,主要用于实现分布式系统的服务发现与配置,它提供了以下几个关键特性:
- 服务发现:Consul客户端可以提供如 api或mysql之类的服务,其他客户端使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
- 健康检查:consul客户端可以提供任意数量的健康检查,,可以结合具体的服务(“Web服务器返回200 OK”)或本地节点(“内存利用率低于90%”)。操作者可以通过检测信息来监视群集运行状况,服务发现组件会将流量从不健康的主机路由到健康主机。
- K/V存储:应用程序可以根据需要使用consul的层级K/V存储,如动态配置,功能标记,一致性协调,leader选举等。简单的HTTP API使其易于使用。
- 多数据中心:consul支持开箱即用的多数据中心。用户不用担心需要建立额外的抽象层让业务扩展到多个区域.。
Consul面向DevOps和应用开发者友好.非常适合现代的弹性的基础设施.
2、Consul基础架构
1、consul是一个分布式,高可用性的系统。这里只是简单介绍一下基础知识,故意省略了一些不必要的细节,以便能够快速了解consul的工作原理.
2、每个提供Consul服务的节点都会运行一个consul agent。发现服务或者获取、设置key/value数据的节点不需要运行agent。agent负责对节点上运行的服务以及节点本身进行健康检查。
3、agent连接一个或者多个Consul server,Consul server存储,复制数据,选取leaader。虽然Consul server可以只运行一个,但是通常建议每个数据中心运行由3到5个consul server组成的集群,以防单点故障造成数据丢失。
4、需要发现其他服务或节点的组件可以查询任何consul server或consul agent。consul agent会自动将请求转发给consul server。
5、每个数据中心都运行一组Consul server集群。当进行跨数据中心服务发现或配置请求时,本地consul server会将请求转发到远程数据中心并返回结果。
3、Consul架构图
4、Consul安装
和其他软件一样,都支持二进制安装、源码安装等。我这里采用最简单的安装方式:二进制安装。
wget https://releases.hashicorp.com/consul/1.5.3/consul_1.5.3_linux_amd64.zip
unzip consul_1.5.3_linux_amd64.zip
mv consul /usr/bin/
安装完成。
5、Consul启动
1 |
|
agent:agent模式
server:server模式
ui:启用UI界面
datadir:数据目录
bind:绑定侦听地址
client:指定client
node:节点名称
6、Consul启动日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
7、dashboard
二、confd安装和配置
1、confd简介
当系统变的复杂,配置项越来越多,一方面配置管理变得繁琐,另一方面配置修改后需要重新上线同样十分痛苦。这时候,需要有一套集中化配置管理系统,一方面提供统一的配置管理,另一方面提供配置变更的自动下发,及时生效。
统一配置管理系统,大家应该比较熟悉,常见的:zookeeper、etcd、consul、git等
confd流程图
2、confd是如何工作的?
3、confd的安装
下载confd
的二进制文件,下载地址为:https://github.com/kelseyhightower/confd/releases。
1 2 3 4 5 6 7 8 9 |
|
4、confd的配置
1. 创建confdir
mkdir -p /etc/confd/{conf.d,templates}
confdir底下包含两个目录:
-
conf.d
:confd的配置文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。 -
templates
:配置模板Template,即基于不同组件的配置,修改为符合 Golang text templates的模板文件。
2、Template Resources
模板源配置文件是TOML
格式的文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。默认目录在/etc/confd/conf.d
。
cat /etc/confd/conf.d/myconfig.toml
1 2 3 4 5 6 7 |
|
src:指定tmpl源文件
dest:指定生成目标文件
keys:tmpl会用到的变量
3、Template
emplate
定义了单一应用配置的模板,默认存储在/etc/confd/templates
目录下,模板文件符合Go的text/template
格式。
模板文件常用函数有base
,get
,gets
,lsdir
,json
等。具体可参考https://github.com/kelseyhightower/confd/blob/master/docs/templates.md。
cat /etc/confd/templates/myconfig.conf.tmpl
1 2 3 |
|
4、启动confd
1 |
|
confdir:配置文件目录
config-file:配置文件
interval:检测文件变化间隔
backend:指定后端数据库
node:后端数据库地址
log-level:日志级别
5、启动日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
6、查看新生成的配置文件
cat /tmp/myconfig.conf
[myconfig]
database_url = db.example.com
database_user = rob
三、整体流程图
我的问题:
配置更新后,如何让组件实时生效的? 基本是要借助组件自己的reload-cmd 来实现吗,如果组件自身不支持也是不行的,那就只能重启了。
本文地址:https://blog.csdn.net/u011479200/article/details/110540504