consul kv迁移

consul kv迁移

  • 一、写在前面
  • 二、consul kv的简单介绍
  • 三、consul导出kv到json文件
  • 四、替换的需求

一、写在前面

说到consul,很多人会说这是一个可以用于注册服务发现的工具,当然了,consul除了常用的注册服务发现,还可以用来当key-value数据库。这篇文章主要介绍一下consul 键值对数据库迁移。简单来说,当你在测试环境用到了consul的键值数据库存储,当你需要部署到线上的时候,需要同步整个kv数据库,就需要迁移了。

二、consul kv的简单介绍

consul的安装很简单,wget包下来之后,解压,就有可执行文件consul了

wget https://releases.hashicorp.com/consul/0.7.0/consul_0.7.0_linux_amd64.zip # 下载安装包,具体下载哪个版本自己更换

unzip consul_0.7.0_linux_amd64.zip # 解压wget下来的包

cd consul_0.7.0_linux_amd64  # 进入解压目录

cp consul /usr/local/bin/  #复制到bin目录下

consul agent -dev & # 以开发模式启动consul,后台运行,因为是开发模式,进程kill之后数据不会持久化

然后就可以用consul的kv操作了

consul kv迁移_第1张图片
如上图所示,就可以用consul进行简单的kv存储

三、consul导出kv到json文件

consul 提供了子命令 export、import 给用户导出 kv 到json文件,以及从json文件导入到consul里
consul kv迁移_第2张图片
我们可以看到确实可以用import命令导出到json文件,但是value好像不对,因为我们设置的kv是 foo - bar,但是出来的确是 YmFy?为什么呢?其实是经过了一次base64的加密,我们可以在consul kv get上加上参数就可以看到base64的value的输出:

consul kv迁移_第3张图片
也就是说 bar 经过一次base64映射就成了YmFy

我们把key删掉,然后用export从文件中导入试一下:
consul kv迁移_第4张图片
在上面的图片中,我们先是把foo这个key删除掉,然后再从json文件中导入,再次查询,发现查询成果,到目前为止,import 和 export 都能够满足我们的需求

四、替换的需求

到第三点的时候,我们已经能够从consul导出到json文件,并且从json文件里面还原进去,但是还有一个问题,有的时候数据是需要修改的,比如测试环境的mysql账户密码跟生产环境的mysql账户密码是不一样的,这个时候就需要我们批量替换,但是有什么问题呢?

问题就在于导出来的json文件是经过base64编码的,所以我们不能够直接用linux的 sed 命令替换

想到的一种方式,就是写python脚本,先求出 要被替换的源串的base64,以及目标串的base64

假设
base(s) = bs
base(t) = bt

把s和t作为入参,然后先用python算出bs和bt,然后读取consul导出的json文件,replace bs with bt,再输出到新的json文件

ps. 代码有空的时候补上 ? 休息一会

吃过晚饭啦,来补上代码

import base64
import sys


input_file = "./input.json"
output_file = "./output.json"

source_str = "old_psw"
target_str = "new_psw"

source_base64 = base64.b64encode(source_str.encode('utf-8')).decode('utf-8')
target_base64 = base64.b64encode(target_str.encode('utf-8')).decode('utf-8')


with open(input_file) as rf:
    input_data = rf.read()
    output_data = input_data.replace(source_base64, target_base64)
rf.close()

print(output_data)
with open(output_file, "w+") as wf:
    wf.write(output_data)
wf.close()

补充:
洗澡的时候想了下,为哈不直接用shell呢 :-_-

consul kv迁移_第5张图片

export A=$(echo -n bar | base64) && export B=$(echo -n bbb | base64) && sed -i "s/$A/$B/g" kv.json

你可能感兴趣的:(go)