zoukankan      html  css  js  c++  java
  • confd+etcd实现高可用自动发现

    confd是什么

    Confd是一个轻量级的配置管理工具。
    通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。
    对应的后端存储可以是etcd,redis、zookeeper等等
    我们以etcd为后端来演示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 = "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 -watch -backend etcd -node http://127.0.0.1:2379 &
        
    

    我们以daemon模式运行,然后改变key的值,观察文件变化,
    可以看到reload.txt文件在持续的追加light weight baby

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

    四.关于-模板语法

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

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

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

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

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

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

  • 相关阅读:
    常用网址记录
    css一些兼容问题
    css hack
    js 闭包
    js 继承
    js 实现淘宝放大镜
    css做三角形的方法
    js 轮播效果
    css3特效
    css布局
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/10503949.html
Copyright © 2011-2022 走看看