配置管理工具-Confd
1 简介
1.1 Confd介绍
Confd是一个轻量级的配置管理工具。通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。对应的后端存储可以是etcd,redis、zookeeper等。[1]
通过上面的介绍可以看出,通过confd修改配置的前提是,被修改配置的服务需要支持热加载配置,如nginx等。这样才能实现在配置变更时自动reload。
1.2 Conf的作用
随着上线的服务越来越多,配置文件和配置项越来越复杂,管理和变更维护配置文件逐渐成为一件麻烦的事情。
在这时候,就需要一套集中化的配置文件管理系统。一方面实现配置文件的统一管理,版本回溯,另一方面提供配置文件的批量自动下发,以及动态加载重启服务。confd+etcd可以作为解决上述问题的一种思路。
本文主要介绍如何使用etcd作为后端存储,通过confd动态修改nginx的配置文件。
2 安装Confd
官网下载confd并安装[2]
root@ceph-1:~# wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
创建confd目录,confd主要有两个核心的目录
- conf.d:主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。
- templates:配置模板Template,即基于不同组件的配置,修改为符合 Golang text templates的模板文件。
root@ceph-1:~# mkdir -p /etc/confd/{conf.d,templates}
3 配置Confd
3.1 创建confd模板文件
下面介绍一下什么是confd的模板文件[3]
- Template定义了单一应用配置的模板,默认存储在/etc/confd/templates目录下,模板文件符合Go的text/template格式。
- 模板文件常用函数有base,get,gets,lsdir,json等。
下面例子的逻辑是定义一个名为nginx.tmpl的模板文件。使用getv获取root_dir这个变量的值,来动态更新nginx的root文件目录,如果root_dir这个key不存在,则默认值为/usr/share/nginx/html。root_dir变量我们在后面定义。
root@ceph-1:~# cat /etc/confd/templates/nginx.tmpl
3.2 创建confd配置文件
配置文件是TOML格式的文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。默认目录在/etc/confd/conf.d。[3]
必要参数包括
- dest:目标文件(字符串类型)
- keys :键数组(字符串数组)
- src :配置模板的相对路径(字符串)
可选参数包括
- gid:应该拥有该文件的gid。默认为有效的gid(整数)
- mode:文件的权限模式(字符串)
- uid:应该拥有该文件的uid。默认为有效的uid(整数)
- reload_cmd:重新加载配置的命令(字符串)
- check_cmd:检查配置的命令(字符串)
- prefix:键前缀的字符串(字符串)
root@ceph-1:~# cat /etc/confd/conf.d/myapp-nginx.toml
3.3 etcd中创建好变量相关的键值对
因为我们是使用的etcd作为confd的后端存储,因此要先在etcd中定义好先前模板文件中的变量的键值对。
root@ceph-1:~# etcdctl put /nginx/root_dir '/usr/share/nginx/v1' --endpoints=192.168.85.130:2379
3.4 启动confd
配置使用systemd管理confd并启动confd
root@ceph-1:~# cat /etc/confd/confd.toml ##创建配置文件,指定后端存储为etcd
4 热更新nginx配置文件实验
4.1 为nginx创建两个版本的index页面
创建v1、v2两个目录,分别用来存放不同的两个nginx配置文件
root@ceph-1:~# mkdir /usr/share/nginx/{v1,v2}
新建两个index文件
root@ceph-4:~# cat /usr/share/nginx/v1/index.html
4.2 访问nginx
root@ceph-4:~# curl 127.0.0.1 ##可以看到能正常访问到v1下面的index文件
4.3 更新etcd中的/nginx/root_dir值
将/nginx/root_dir的值更新为/usr/share/nginx/v2
root@ceph-1:~# etcdctl put /nginx/root_dir '/usr/share/nginx/v2' --endpoints=192.168.85.130:2379
查看confd的日志,可以观察到有配置文件更新的动作
root@ceph-1:~# journalctl -u confd
检查nginx配置是否已更新
root@ceph-1:~# cat /etc/nginx/conf.d/myapp.conf
5 参考资料
- [1] http://www.confd.io/
- [2] https://github.com/kelseyhightower/confd/blob/master/docs/installation.md#linux
- [3] https://github.com/kelseyhightower/confd/blob/master/docs/templates.md
关注公众号 singless,获取更多有价值的文章
你可能还喜欢
如何在prometheus产生告警时自动执行某个脚本文件
如何编译打包OpenSSH 9.4并实现批量升级
K8S使用开源CEPH作为后端StorageClass
Nginx安全加固,版本隐藏及HTTP请求头修改方法
相关文章:

配置管理工具-Confd
1 简介 1.1 Confd介绍 Confd是一个轻量级的配置管理工具。通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。对应的后端存储可以是etcd,redis、zookeeper等。[1] 通过…...

0基础学习PyFlink——使用DataStream进行字数统计
大纲 sourceMapSplittingMapping ReduceKeyingReducing 完整代码结构参考资料 在《0基础学习PyFlink——模拟Hadoop流程》一文中,我们看到Hadoop在处理大数据时的MapReduce过程。 本节介绍的DataStream API,则使用了类似的结构。 source 为了方便&…...

OpenCV官方教程中文版 —— 图像去噪
OpenCV官方教程中文版 —— 图像去噪 前言一、原理二、OpenCV 中的图像去噪1.cv2.fastNlMeansDenoisingColored()2.cv2.fastNlMeansDenoisingMulti() 前言 目标 • 学习使用非局部平均值去噪算法去除图像中的噪音 • 学习函数 cv2.fastNlMeansDenoising(),cv2.fa…...
AcWing 102. 最佳牛围栏(前缀和+二分+DP)
AcWing 102. 最佳牛围栏 1、问题 2、分析 (1)暴力做法 看到这道题以后,我们可以先想一个最暴力的做法,就是我们去枚举所有长度至少为 F F F的区间,然后求出这个区间的和,再求出这个区间的平均值。最后在…...

React-表单受控绑定和获取Dom元素
一、表单受控组件 1.声明一个react状态 说明:useState const [value,setValue]useState("") 2.核心绑定流程 2.1绑定react状态 <div><input value{value}type"text"></input> 2.2绑定onChange事件 说明:e.…...

python hashlib模块及实例
hashlib 模块密码加密密码撞库密码加盐 一,hashlib模块 hashlib模块是用来为字符串进行加密的模块,通过该作用就可以为用户的密码进行加密。 通过模块中的hash算法可以为任意长度的字符串加密成长度相同的一串hash值。该hash算法得到的hash值有一下几个…...

垃圾回收GC
为什么要有垃圾回收? JVM之所以要有垃圾回收,是因为它能够自动管理内存,避免内存泄漏和内存溢出的问题,垃圾回收机制会自动检测和清理不再使用的对象,释放内存空间,使得开发者不需要手动管理内存,降低了开发难度和错误风险,同时,垃圾回收还可以优化内存分配,提高程序性能和响…...

kubernetes-service微服务
目录 一、service微服务 二、Ipvs模式 三、ClusterIP 1.ClusterIP 2.headless 四、NodePort 1.NodePort 2.默认端口 五、LoadBalancer 1.LoadBalancer 2.metallb 六、ExternalName 一、service微服务 Kubernetes Service微服务是一种基于Kubernetes的微服务架构&…...

让你笑到不行的笑话短视频接口,快来试试!
11在当今这个快节奏的社会中,笑话成为了许多人调节情绪的有效方法。如今,短视频平台已经成为了最受欢迎的娱乐方式之一,因此,将笑话和短视频结合起来,成为了一种很有趣的方式来带给我们欢乐。今天我们要介绍的是挖数据…...
系列四十五、Spring的事务传播行为案例演示(五)#MANDATORY
一、演示Spring的传播行为(MANDATORY) 1.1、StockServiceImplMANDATORY /*** Author : 一叶浮萍归大海* Date: 2023/10/30 15:43* Description: 演示MANDAORY的传播行为* 外部不存在事务:抛出异常 No existing transaction found for…...
idea插件(二)-- String Manipulation(字符串处理工具)
目录 1. 安装 String Manipulation 2. 默认快捷键 3. 操作说明 3.1 变量名的形式处理 3.2 文本形式的转化...

HQChart实战教程67-worker批量计算股票指标
HQChart实战教程67-worker批量计算股票指标 什么是Worker批量指标计算示例地址步骤1. 创建一个后台工作线程类2. 发送指标计算任务3. 接收计算结果数据对接 完整源码demo_workerthread_sina.htmlhqchart_worker_sina.js HQChart插件源码地址 什么是Worker Worker 接口是 Web W…...

博客系统自动化测试项目实践
文章目录 一.测试需求分析1.功能分析2.非功能分析 二.制定测试方案(计划 策略)三.编写测试用例四.执行自动化测试用例五.编写测试报告六.项目总结 一.测试需求分析 1.功能分析 通过功能测试需求分析 2.非功能分析 非功能分析主要从:界面,性能,安全性,…...

软考高级之系统架构师系列之操作系统基础
概念 接口 操作系统为用户提供两类接口:操作一级的接口和程序控制一级的接口。操作一级的接口包括操作控制命令、菜单命令等;程序控制一级的接口包括系统调用。 UMA和NUMA UMA,统一内存访问,Uniform Memory Access,…...

制作一个可以arm架构下运行的docker镜像(for Python)
看完本篇文章,你将得到一个可以arm架构下运行的python 基础镜像。 题外话 这里直接说docker镜像有点儿草率,因为目前很多容器都是Podman了。 podman的介绍 arm和aarch傻傻分不清楚 现在这两个是一样的意思了。 arm64和aarch64之间的区别 开始制作镜…...

Goland连接服务器/虚拟机远程编译开发
创建SSH连接 SSH用于与远程服务器建立连接 Settings -> Tools -> SSH Configurations 添加新的ssh连接,Host为ip地址,Username为用户名,认证方式这里选择密码验证 全部填完后可以点击Test Connection测试连接是否成功 创建Deployment…...

大数据Doris(十四):Doris表中的数据基本概念
文章目录 Doris表中的数据基本概念 一、Row & Column...

【Linux】Linux环境配置以及部署项目后端
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Linux的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Linux环境配置 1.JDK ①上传安装包到…...

RabbitMQ消费者的可靠性
目录 一、消费者确认 二、失败重试机制 2.1、失败处理策略 三、业务幂等性 3.1、唯一消息ID 3.2、业务判断 3.3、兜底方案 一、消费者确认 RabbitMQ提供了消费者确认机制(Consumer Acknowledgement)。即:当消费者处理消息结束后&#x…...

云计算助力史上首届“云上亚运”圆满成功!
201金,魔幻的BGM,以及崛起的中国科技,让杭州亚运会成功出圈。 很多网友表示太震撼了!开幕式很漂亮,杭州为了奥运造新城真豪横,看完一整个文化自信住! 赛场内外除了无数个令人感动的瞬间&#…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...