ACM + Confd 管理配置文件

ACM + confd 管理配置文件

confd 是一款开源的配置管理工具, 通过将存储于etcd,redis zookeeper 等后端存储系统的数据于配置模板结合起来使用,可实现保持配置处于最新状态的目的, 现在将阿里云的 ACM 作为后端,配合confd 实现无侵入式 的配置,实现 自动推送 监听等功能!

ACM结果图

ACM配置

ACM

  • 配置列表

    • 命名空间
      • 每个命名空间相当于一个大的分组,拥有自己的"命名空间ID" , 启动服务的时候需要指定链接的命名空间
    • Endpoint
      • 服务访问的地址
    • AccessKey/SecretKey
      • 登录需要的key
    • 创建配置
      • Data ID
        • Data ID在一个Group下是唯一的。相当于 一个单独的应用id
      • Group
        • 配置分组,全局唯一, 启动服务时需要指定分组
      • 配置内容和格式 根据格式自行选择
      • 其余功能,看字面意思即可理解

    confd 安装

  1. confd 的构建依赖于 Go 1.10 或更高版本。

  2. 创建docker容器,并进入容器,下载源码包

    1
    2
    3
    mkdir -p $GOPATH/src/github.com/kelseyhightower 
    cd $GOPATH/src/github.com/kelseyhightower
    wget https://github.com/nacos-group/nacos-confd/archive/v0.19.2.tar.gz
  3. 解压下载的 confd 源码。并重命名为 confd

    1
    2
    tar -xvf v0.19.2.tar.gz
    mv nacos-confd-0.19.2 confd
  4. 编译

    1
    2
    3
    4
    cd confd
    make
    -------
    如果编译报错用 : mkdir -p bin; go build -o bin/confd .
  5. 编译好之后,复制 二进制文件 到想要运行的目录即可

    1
    mv bin/confd /etc/confd
  6. confd –verion 查看是否成功

  7. confd 官方文档: https://github.com/kelseyhightower/confd/tree/master/docs

confd配合ACM配置

  1. 创建 confd 所需的目录用来存放模板资源配置文件和模板文件。

    1
    mkdir -p /etc/confd/{conf.d,templates}
  2. 在 conf.d 目录下创建 TOML 格式的 confd 模板资源配置文件。

    1
    vim /etc/confd/conf.d/tomcat-admin.toml
    • 配置参数
      • src 参数指定 confd 模板文件
      • dest 参数指定生成的配置文件
      • keys 参数指定将模板渲染成配置文件所需的配置内容
      • mode 文件权限
      • reload_cmd 运行重启命令, 可以运行自定义的脚本
      • check_cmd 同上
      • 模板见下面示例
  3. 在 templates 目录下创建 confd 模板文件。

    1
    vim /etc/confd/templates/tomcat-admin.tmpl

    在该模板文件中添加以下内容。其含义为通过 getv 从 ACM 获取 Data ID 为 tomcat-admin 的配置内容

    说明 在模板中必须将 ACM 的 Data ID 中的 . 转换为 / 格式,即以斜线(/)代替句点(.)并在开头增加一个斜线。

    1
    value = {{getv "/tomcat-admin"}}

4 启动confd

  • 说明 请将代码中的 {endpoint}、{namespace}、{accessKey}、{secretKey} 分别替换为 ACM 控制台上命名空间详情对话框内的 End Point、命名空间 ID、AccessKey、SecretKey。

  • confd -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}
    
    1
    2
    3
    4
    5
    6
    7
    8
      * 查看/usr/loca/tomcat-admini/conf/server.xml 目录下有没有生成 dataid 里面配置的内容


    ## 开启confd监听
    如果按照上述方法操作,confd 生成一次配置文件后就会退出。只要在 confd 启动命令中添加 -watch 参数即可监听后端系统(在本示例中为 ACM)的配置变更,一旦配置内容发生变化,confd 就会重新生成配置文件。
    * 以监听模式启动
    ```bash
    confd -watch -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}

配置内容参考

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
36
37
38
39
40
41
42
43
44
#!/bin/bash

## config param
endpoint=addr-sz-internal.edas.aliyun.com
namespace=acee06c8-xxxxx-xxxxxxxxxx-xxxxxxxxxxxx
accessKey=LTxxxxxxxxxxxxxx
secretKey=Kxxxxxxxxxxxxxx
#dataId=myapp.database.url
group=tomcat

start () {
#以tomcat用户运行并监听confd
nohup sudo -u tomcat /etc/confd/bin/confd -watch -backend nacos -endpoint $endpoint:8080 -namespace $namespace -group $group -accessKey $accessKey -secretKey $secretKey >/dev/null 2>&1 &
if [[ $? == 0 ]];then
echo "启动成功"
fi
}

stop () {
killall confd
if [[ $? == 0 ]];then
echo "停止成功"
fi
}

restart (){
stop
start
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "参数:start|stop|restart"
esac

1
2
3
4
5
6
7
8
[template]
src = "tomcat-admin.tmpl"
dest = "/usr/local/tomcat-admin/conf/server.xml"
mode = "0775"
keys = [
"/tomcat-admin",
]
reload_cmd = "/etc/confd/dos2unix.sh /usr/local/tomcat-admin/conf/server.xml"
1
2
#! /bin/bash
dos2unix -q $1

发现问题: ACM配置管理编辑器,换行符是windows编码格式, 在linux里面用vim打开 会发现^M

解决办法: dos2unix -q file 转换为inux编码格式, 可以将脚本写到 reload_cmd 里面, 如 reload_cmd = dos2nuix.sh fiel