阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

confd+etcd实现高可用自动发现

142次阅读
没有评论

共计 2363 个字符,预计需要花费 6 分钟才能阅读完成。

Confd 是什么

Confd 是一个轻量级的配置管理工具。通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动 reload。
对应的后端存储可以是 etcd,redis、zookeeper 等等
我们以 etcd 为后端来演示 confd 的使用,用最简单粗暴的方式教大家学会动态生成配置

一. 准备 confd 依赖的存储 etcd

etcd -listen-client-urls="http://0.0.0.0:2379" --advertise-client-urls="http://0.0.0.0:2379" &

etcd 搭建如果不会可以查看前面一篇文章《从零开始搭建 etcd 分布式存储系统 +web 管理界面》

二. 安装 confd

# 下载
wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64

# 安装
mv confd-0.16.0-linux-amd64 /usr/local/bin/confd
chmod +x /usr/local/bin/confd

#检查是否安装成功
root@Ubuntu:/home/chenqionghe/test/confd# confd --version
confd 0.16.0 (Git SHA: 7217b0ca, Go Version: go1.10.2)
  • confd 配置文件默认在 /etc/confd 中,可以通过参数 -confdir 指定。目录中包含两个子目录,分别是:conf.d templates。
  • confd 会先读取 conf.d 目录中的配置文件(toml 格式),然后根据文件指定的模板路径去渲染模板,再执行 <RELOAD_CMD>。

我们先创建

mkdir -p /etc/confd/{conf.d,templates}

confd 的配置文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的 keys,命令执行等。
templates: 配置模板 Template,即基于不同组件的配置,修改为 go 语言的模板文件。

三. 配置使用 confd

1. 创建配置文件 /etc/confd/conf.d/chenqionghe.toml

[template]
# 模板文件路径
src = "https://www.linuxidc.com/Linux/2019-03/chenqionghe.tmpl"
# 生成最终文件路径
dest = "/home/chenqionghe/test/confd/gym-data.txt"
keys = [
    "/chenqionghe/deap_squat",
    "/chenqionghe/bench_press",
    "/chenqionghe/dead_lift",
]
# 生成文件后执行的命令
reload_cmd = "echo'light weight baby'>> /home/chenqionghe/test/confd/reaload.txt"

2. 创建模板文件 /etc/confd/templates/chenqionghe.tmpl

[陈琼和]
深蹲 = {{getv "/chenqionghe/deap_squat"}}
卧槽 = {{getv "/chenqionghe/bench_press"}}
硬拉 = {{getv "/chenqionghe/dead_lift"}}

3. 初始化 etcd 中的数据

endpoints=http://127.0.0.1:2379
etcdctl --endpoints=$endpoints set /chenqionghe/deap_squat '130kg'
etcdctl --endpoints=$endpoints set /chenqionghe/bench_press '100kg'
etcdctl --endpoints=$endpoints set /chenqionghe/dead_lift '160kg'

4. 启动 confd 的服务

confd 支持以 daemon 或者 onetime 两种模式运行
onetime 模式:只会生成一次配置,之后 key 无论变化不会再生成

    confd -onetime -backend etcd -node http://127.0.0.1:2379
  • daemon 模式:confd 会监听后端存储的配置变化,根据配置模板动态生成目标配置文件。

confd 支持以 daemon 或者 onetime 两种模式运行

  • daemon 模式:confd 会监听后端存储的配置变化,并根据配置模板动态生成目标配置文件。
confd -watch -backend etcd -node http://127.0.0.1:2379 &
    

我们以 daemon 模式运行,然后改变 key 的值,观察文件变化,
可以看到 reload.txt 文件在持续的追加 light weight baby
confd+etcd 实现高可用自动发现

gym-data.txt 跟随 3 个 key 的变化不断的更新
confd+etcd 实现高可用自动发现

四. 关于 - 模板语法

confd 使用的模板就是 go 语言的 template,对 go 语言熟悉的同学应该会觉得非常简单
confd 已经集成了很多模板函数,参考链接

五. 思考扩展 -confd 能做些什么

我们大概知道了 confd 的原理
1. 读取配置文件 -> 2. 使用模板生成指定文件 -> 3. 运行重载命令(可选)

所以基本使用配置和 reload 命令的地方都可以使用 confd,比如下边的需求

  • nginx 动态生成 upstream 实现服务发现
  • prometheus 动态生成 prometheus.yml 实现自动报警
  • php-fpm 动态生成 php.ini 文件实现动态性能调参
  • 动态生成报表文件再发送通知

只有想不到,没有做不到,以前想过自己写一个 nginx 的动态生成 upstream,没想到已经有人写出来了,真的是厉害,小伙伴们赶紧 high 起来吧

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计2363字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中