Confd+Consul 动态生成配置文件

2024-06-09 11:08

本文主要是介绍Confd+Consul 动态生成配置文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Confd+Consul 动态生成配置文件

作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/archive/2004/01/13/11287435.html


目录

一、Consul安装和配置
1、consul是什么?
2、Consul基础架构
3、Consul架构图
4、Consul安装
5、Consul启动
6、Consul启动日志
7、dashboard
二、confd安装和配置
1、confd简介
2、confd是如何工作的?
3、confd的安装
4、confd的配置
三、整体流程图

一、Consul安装和配置

1、consul是什么?

    consul是HashiCorp公司推出的一款工具,主要用于实现分布式系统的服务发现与配置,它提供了以下几个关键特性:

  • 服务发现:Consul客户端可以提供如 api或mysql之类的服务,其他客户端使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
  • 健康检查:consul客户端可以提供任意数量的健康检查,,可以结合具体的服务(“Web服务器返回200 OK”)或本地节点(“内存利用率低于90%”)。操作者可以通过检测信息来监视群集运行状况,服务发现组件会将流量从不健康的主机路由到健康主机。
  • K/V存储:应用程序可以根据需要使用consul的层级K/V存储,如动态配置,功能标记,一致性协调,leader选举等。简单的HTTP API使其易于使用。
  • 多数据中心:consul支持开箱即用的多数据中心。用户不用担心需要建立额外的抽象层让业务扩展到多个区域.。

Consul面向DevOps和应用开发者友好.非常适合现代的弹性的基础设施.

 

2、Consul基础架构

    1、consul是一个分布式,高可用性的系统。这里只是简单介绍一下基础知识,故意省略了一些不必要的细节,以便能够快速了解consul的工作原理.

    2、每个提供Consul服务的节点都会运行一个consul agent。发现服务或者获取、设置key/value数据的节点不需要运行agent。agent负责对节点上运行的服务以及节点本身进行健康检查。

    3、agent连接一个或者多个Consul server,Consul server存储,复制数据,选取leaader。虽然Consul server可以只运行一个,但是通常建议每个数据中心运行由3到5个consul server组成的集群,以防单点故障造成数据丢失。

    4、需要发现其他服务或节点的组件可以查询任何consul server或consul agent。consul agent会自动将请求转发给consul server。

    5、每个数据中心都运行一组Consul server集群。当进行跨数据中心服务发现或配置请求时,本地consul server会将请求转发到远程数据中心并返回结果。

 

3、Consul架构图

 

4、Consul安装

和其他软件一样,都支持二进制安装、源码安装等。我这里采用最简单的安装方式:二进制安装。

wget  https://releases.hashicorp.com/consul/1.5.3/consul_1.5.3_linux_amd64.zip

unzip consul_1.5.3_linux_amd64.zip

mv consul /usr/bin/

安装完成。

 

5、Consul启动

1

consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=172.31.0.21 -client=0.0.0.0 -node=server01

  agent:agent模式

  server:server模式

  ui:启用UI界面

  datadir:数据目录

  bind:绑定侦听地址

  client:指定client

  node:节点名称

 

6、Consul启动日志

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

[root@vm172-31-0-21 ~]# consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=172.31.0.21 -client=0.0.0.0 -node=server01

bootstrap = truedo not enable unless necessary

==> Starting Consul agent...

           Version: 'v1.5.3'

           Node ID: '381f702d-7495-1b19-d75e-9cd79b1bbf8e'

         Node name: 'server01'

        Datacenter: 'dc1' (Segment: '<all>')

            Server: true (Bootstrap: true)

       Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)

      Cluster Addr: 172.31.0.21 (LAN: 8301, WAN: 8302)

           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

 

==> Log data will now stream in as it occurs:

 

    2019/08/02 10:00:12 [INFO]  raft: Initial configuration (index=1): [{Suffrage:Voter ID:381f702d-7495-1b19-d75e-9cd79b1bbf8e Address:172.31.0.21:8300}]

    2019/08/02 10:00:12 [INFO]  raft: Node at 172.31.0.21:8300 [Follower] entering Follower state (Leader: "")

    2019/08/02 10:00:12 [INFO] serf: EventMemberJoin: server01.dc1 172.31.0.21

    2019/08/02 10:00:12 [INFO] serf: EventMemberJoin: server01 172.31.0.21

    2019/08/02 10:00:12 [INFO] consul: Adding LAN server server01 (Addr: tcp/172.31.0.21:8300) (DC: dc1)

    2019/08/02 10:00:12 [INFO] consul: Handled member-join event for server "server01.dc1" in area "wan"

    2019/08/02 10:00:12 [WARN] agent/proxy: running as root, will not start managed proxies

    2019/08/02 10:00:12 [INFO] agent: Started DNS server 0.0.0.0:8600 (udp)

    2019/08/02 10:00:12 [INFO] agent: Started DNS server 0.0.0.0:8600 (tcp)

    2019/08/02 10:00:12 [INFO] agent: Started HTTP server on [::]:8500 (tcp)

    2019/08/02 10:00:12 [INFO] agent: started state syncer

==> Consul agent running!

    2019/08/02 10:00:19 [ERR] agent: failed to sync remote state: No cluster leader

    2019/08/02 10:00:20 [WARN]  raft: Heartbeat timeout from "" reached, starting election

    2019/08/02 10:00:20 [INFO]  raft: Node at 172.31.0.21:8300 [Candidate] entering Candidate state in term 2

    2019/08/02 10:00:20 [INFO]  raft: Election won. Tally: 1

    2019/08/02 10:00:20 [INFO]  raft: Node at 172.31.0.21:8300 [Leader] entering Leader state

    2019/08/02 10:00:20 [INFO] consul: cluster leadership acquired

    2019/08/02 10:00:20 [INFO] consul: New leader elected: server01

    2019/08/02 10:00:20 [INFO] consul: member 'server01' joined, marking health alive

    2019/08/02 10:00:22 [INFO] agent: Synced node info

  

7、dashboard

 

 

二、confd安装和配置

1、confd简介

当系统变的复杂,配置项越来越多,一方面配置管理变得繁琐,另一方面配置修改后需要重新上线同样十分痛苦。这时候,需要有一套集中化配置管理系统,一方面提供统一的配置管理,另一方面提供配置变更的自动下发,及时生效。

统一配置管理系统,大家应该比较熟悉,常见的:zookeeper、etcd、consul、git等

confd流程图

 

2、confd是如何工作的?

3、confd的安装

下载confd的二进制文件,下载地址为:https://github.com/kelseyhightower/confd/releases。

1

2

3

4

5

6

7

8

9

# Download the binary

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

  

# 重命名二进制文件,并移动到PATH的目录下

mv confd-0.16.0-linux-amd64 /usr/local/bin/confd

chmod +x /usr/local/bin/confd

  

# 验证是否安装成功

confd --help

  

4、confd的配置

1. 创建confdir

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

confdir底下包含两个目录:

  • conf.d:confd的配置文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。

  • templates:配置模板Template,即基于不同组件的配置,修改为符合 Golang text templates的模板文件。

2、Template Resources

模板源配置文件是TOML格式的文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。默认目录在/etc/confd/conf.d

cat /etc/confd/conf.d/myconfig.toml

1

2

3

4

5

6

7

[template]

src = "myconfig.conf.tmpl"

dest = "/tmp/myconfig.conf"

keys = [

    "/myapp/database/url",

    "/myapp/database/user",

]

  src:指定tmpl源文件

  dest:指定生成目标文件

  keys:tmpl会用到的变量

3、Template

emplate定义了单一应用配置的模板,默认存储在/etc/confd/templates目录下,模板文件符合Go的text/template格式。

模板文件常用函数有basegetgetslsdirjson等。具体可参考https://github.com/kelseyhightower/confd/blob/master/docs/templates.md。

cat /etc/confd/templates/myconfig.conf.tmpl

1

2

3

[myconfig]

database_url = {{getv "/myapp/database/url"}}

database_user = {{getv "/myapp/database/user"}}

  

4、启动confd

1

confd -confdir="/etc/confd/" -config-file="/etc/confd/conf.d/myconfig.toml" -onetime=false -interval=3 -backend consul -node 172.31.0.21:8500 -log-level="debug"

  confdir:配置文件目录

  config-file:配置文件

  interval:检测文件变化间隔

  backend:指定后端数据库

  node:后端数据库地址

  log-level:日志级别

5、启动日志

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

[root@vm172-31-0-21 confd]# confd -confdir="/etc/confd/" -config-file="/etc/confd/conf.d/myconfig.toml" -onetime=false -interval=3 -backend consul -node 172.31.0.21:8500 -log-level="debug"

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: INFO Backend set to consul

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: INFO Starting confd

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: INFO Backend source(s) set to 172.31.0.21:8500

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Loading template resources from confdir /etc/confd/

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Found template: /etc/confd/conf.d/myconfig.toml

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Loading template resource from /etc/confd/conf.d/myconfig.toml

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Retrieving keys from store

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Key prefix set to /

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Got the following map from store: map[/myapp/database/url:db.example.com /myapp/database/user:rob]

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Using source template /etc/confd/templates/myconfig.conf.tmpl

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Compiling source template /etc/confd/templates/myconfig.conf.tmpl

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Comparing candidate config to /tmp/myconfig.conf

2019-08-02T10:37:11+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Target config /tmp/myconfig.conf in sync

2019-08-02T10:37:14+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Loading template resources from confdir /etc/confd/

2019-08-02T10:37:14+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Found template: /etc/confd/conf.d/myconfig.toml

2019-08-02T10:37:14+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Loading template resource from /etc/confd/conf.d/myconfig.toml

2019-08-02T10:37:14+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Retrieving keys from store

2019-08-02T10:37:14+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Key prefix set to /

2019-08-02T10:37:14+08:00 vm172-31-0-21.ksc.com confd[1801]: DEBUG Got the following map from store: map[/myapp/database/user:rob /myapp/database/url:db.example.com]

  

 6、查看新生成的配置文件

cat /tmp/myconfig.conf 

[myconfig]
database_url = db.example.com
database_user = rob

 

三、整体流程图

 

 

 

我的问题:

配置更新后,如何让组件实时生效的?  基本是要借助组件自己的reload-cmd 来实现吗,如果组件自身不支持也是不行的,那就只能重启了。

 

这篇关于Confd+Consul 动态生成配置文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045000

相关文章

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

C/C++随机数生成的五种方法

《C/C++随机数生成的五种方法》C++作为一种古老的编程语言,其随机数生成的方法已经经历了多次的变革,早期的C++版本使用的是rand()函数和RAND_MAX常量,这种方法虽然简单,但并不总是提供... 目录C/C++ 随机数生成方法1. 使用 rand() 和 srand()2. 使用 <random

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

nginx生成自签名SSL证书配置HTTPS的实现

《nginx生成自签名SSL证书配置HTTPS的实现》本文主要介绍在Nginx中生成自签名SSL证书并配置HTTPS,包括安装Nginx、创建证书、配置证书以及测试访问,具有一定的参考价值,感兴趣的可... 目录一、安装nginx二、创建证书三、配置证书并验证四、测试一、安装nginxnginx必须有"-

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...