consul配置中心,自动导入数据

consul配置中心,自动导入数据



提示:以下是本篇文章正文内容,下面案例可供参考

一、环境

在Windows上安装docker环境,并在docker上安装consul,启动consul并将端口映射到主机的8500端口

二、分析导入的过程

1)在浏览器中访问127.0.0.1:8500,进入到consul的 Key/Value 功能选项
在这里插入图片描述
2)点击右上角的 Create 按钮,创建键值
在这里插入图片描述
3)进入consul的cli窗口,运行命令:

consul kv export --http-addr=http://127.0.0.1:8500  >consul_kv.json

4)然后打开consul_kv.json文件

cat consul_kv.json

在这里插入图片描述
5)删除consul配置中心的值
删除kv
在这里插入图片描述
6)运行如下命令导入数据

consul kv import --http-addr=http://127.0.0.1:8500 @consul_kv.json

7)再次查看界面效果如下
在这里插入图片描述
8)所以要想导入配置信息,需要先将配置文件生成 consul_kv.json 内容格式的json文件。

三、设计导入的json文件

因为需要在Linux环境下运行,所以使用了shell脚本来处理所需要的文件。

#!/bin/bash
app_name_arr=($1)   # 所有的服务名称     APP_NAMES
pre_path=$2         # 服务前缀路径      ./app
save_path=$3        # 要保存的文件路径

rm -f ${save_path}

printf "[\n" >> $save_path
is_start=true
for (( i = 0; i < ${#app_name_arr[*]}; i++ )); do
  app_name=${app_name_arr[$i]}
  app_name=${app_name/-//}          # 将 pre-server 处理成 pre/server
  file_path=${pre_path}/$app_name/configs
  if [ ! -d "$file_path" ]; then
     echo $file_path
     echo "文件夹不存在"
  else
     for file in ${file_path}/*; do
        temp_file=`basename $file`
        key="${file_path}/${temp_file}"   # key = ./app/pre/server/configs/文件名.yaml
        content_base64=$(cat $file|base64 --wrap=0)
        if test "$is_start" = true;
        then
            is_start=false
        else
            printf ",\n" >> $save_path
        fi
        printf "\t{\n" >> $save_path
        printf "\t\t\"key\": \"${key}\",\n" >> $save_path
        printf "\t\t\"flags\": 0,\n" >> $save_path
        printf "\t\t\"value\": \"$content_base64\"\n" >> $save_path
        printf "\t}" >> $save_path
     done
  fi
done
printf "\n]" >> $save_path

1、新建 consul_source.txt 将上述脚本复制进去。然后将 txt 后缀改成sh,得到consul_source.sh文件。
2、新建generate文件夹,将consul_source.sh文件复制进去。然后将配置文件夹也复制进去。目录结构:在这里插入图片描述
3、在generate文件下按住shift + 右键选择 “Git Bash Here”
在这里插入图片描述
4、运行如下命令:

./consul_source.sh "pre_1-svc_1 pre_1-svc_2 pre_1-svc_3 pre_2-svc_4" "./app" "./consul_source.json" /

5、查看generate文件夹下,得到 consul_source.json 文件


四、其它额外小结

1、在容器中使用docker-compose方式启动

  consul:
    image: consul:1.10
    container_name: consul.default
    restart: always
    command: agent -server -bootstrap -ui -client=0.0.0.0
    volumes:
          - ./consul_source.json:/data/conf
    ports:
      - 8500:8500
      - 8600:8600/udp

 test-consul:
   image: consul:1.10
   container_name: consul.test
   command: kv import -http-addr=consul.default:8500 @/data/conf
   depends_on:
     - consul

这个方式的意思是,当consul服务启动后,test-consul服务再启动,然后在test-consul中运行上面consul服务的命令。但是这种方式不靠谱,不推荐。原因:depends_on只能保证服务启动,不能保证启动已完成。可以考虑使用dockerfile控制服务的启动顺序,这里做个记录。

2、在docker中直接运行consul服务命令导入

docker exec -it consul服务名 sh -c 'consul kv import @/data/conf/consul_source.json'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值