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起來吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM