47

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

 5 years ago
source link: https://www.linuxidc.com/Linux/2019-03/157398.htm?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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@<a href="https://www.linuxidc.com/topicnews.aspx?tid=2" target="_blank" title="Ubuntu">Ubuntu</a>:/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 = "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

rU7jUvA.png!web

gym-data.txt跟随3个key的变化不断的更新

3MJRZbE.png!web

四.关于-模板语法

confd使用的模板就是go语言的template,对go语言熟悉的同学应该会觉得非常简单

confd已经集成了很多模板函数, 参考链接

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

我们大概知道了confd的原理

1.读取配置文件 -> 2.使用模板生成指定文件 -> 3.运行重载命令(可选)

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

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

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

Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-03/157398.htm


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK