• consul 备份还原导入导出


    正文


    工作中要保证生产环境部署的consul的集群能够安全稳定地对外提供服务,即使出现系统故障也能快速恢复,这里将讲述部分的备份还原操作及KV的导入导出操作。

    备份与还原  配置文件、服务器状态


    需要备份的主要有两类数据:consul相关的配置文件、consul的服务器状态,采用下面的脚本备份就可以了:

    1. ts=$(date +%Y%m%d%H%M%S)
    2. # 备份配置文件
    3. tar -czpf consul_config_$ts.tar.gz /etc/consul/config.json /etc/consul/consul.d
    4. # 备份consul的服务器状态,注意由于该consul开启了ACL,执行consul snapshot save时必须带Management Token,关于consul ACL token的说明见上一篇"consul安全加固"
    5. consul snapshot save --http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 consul_state_$ts.snap
    6. # 查看一下生成的consul服务器状态文件
    7. consul snapshot inspect consul_state_$ts.snap

    最后将生成的consul_config_xxx.tar.gzconsul_state_xxx.snap拷贝到其它服务器妥善存储。

    还原也比较简单,采用下面的脚本就可以了:

    1. # 还原配置文件
    2. tar -xzpf consul_config_20180521145032.tar.gz -C /
    3. # 还原consul服务器状态
    4. consul snapshot restore --http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 consul_state_20180521145032.snap

    KV存储的导入导出


    consul直接提供命令对KV里存储的数据进行导入导出,如下:

    1. $ ts=$(date +%Y%m%d%H%M%S)
    2. # 导出所有kv键值对,注意最后一个参数是导出键值对的前缀,为空字符串说明要导出所有
    3. $ consul kv export --http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 '' > consul_kv_$ts.json
    4. # 查看下导出的json文件格式
    5. $ cat consul_kv_$ts.json
    6. [
    7. {
    8. "key": "xxxxxx",
    9. "flags": 0,
    10. "value": "yyyyyy"
    11. },
    12. {
    13. "key": "xxxxxx2",
    14. "flags": 0,
    15. "value": "eyJ2ZXJzaW9uX3RpbWVzdGFtcCI6IC0xfQ=="
    16. },
    17. ]

    发现是每个键值对都是json数值中一项,其中key为键值对Key的名称,value为键值对Value的base64编码,使用base64 -d命令编码就可以看到原始的value值,如:

    1. $ echo 'eyJ2ZXJzaW9uX3RpbWVzdGFtcCI6IC0xfQ==' | base64 -d
    2. {"version_timestamp": -1}

     导入就更简单了:

    consul kv import --http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 @consul_kv_20180521150322.json

    OVER..................................................................................................完结撒花

    如常备份恢复更新脚本


    consul_backup.sh 

    1. [root@bastion back_consul]# cat consul_backup.sh
    2. #!/bin/bash
    3. # Author:laujian
    4. ts=$(date +"%Y_%m_%d_%H_%M")
    5. # 通过运行脚本添加参数 加consul 地址 token传进来
    6. #consul_token='8dc1eb67-1f5f-4e10-ad9d-5e58b047647c'
    7. #http_addr='consul.hrfax.local'
    8. http_addr='192.168.12.121:32000'
    9. consul_token='8dc1eb67-1f5f-4e10-ad9d-5e58b047647c'
    10. processName="consul_backup.sh"
    11. processNum=`ps -ef | grep $processName | grep -v grep | wc -l`
    12. #if [ $processName gt "3" ];then
    13. #echo " $processName already existed!"
    14. #exit 1
    15. #fi
    16. #status_dir=`pwd`/status_dir
    17. kv_dir=`pwd`/kv_dir
    18. #[ -d $status_dir ] || mkdir $status_dir
    19. [ -d $kv_dir ] || mkdir $kv_dir
    20. status_backup() {
    21. `pwd`/consul snapshot save -token=${consul_token} -http-addr=${http_addr} $status_dir/consul_state_${ts}.snap
    22. }
    23. kv_backup() {
    24. `pwd`/consul kv export -token=${consul_token} -http-addr=${http_addr} > $kv_dir/consul_kv_${ts}_${http_addr}.json
    25. }
    26. kv_restore() {
    27. date=$1
    28. tar xPf $kv_dir/consul_kv_${date}.tar.gz -C /
    29. ls $kv_dir/consul_kv_${date}.json > /dev/null
    30. if [ $? == 0 ];then
    31. `pwd`/consul kv import -token=${consul_token} -http-addr=${http_addr} @$kv_dir/consul_kv_${date}.json
    32. fi
    33. }
    34. kv_backup

     update_consul.sh

    1. #!/bin/bash
    2. cd /data/deployment_mediums;git pull
    3. sleep 5
    4. consul_address='192.168.12.121:32000'
    5. consul_token='8dc1eb67-1f5f-4e10-ad9d-5e58b047647c'
    6. cd /data/deployment_mediums/$1
    7. for yaml in `ls consul/*`;do
    8. consul_key=`cat $yaml |head -1 |sed 's/#//g' |sed 's/ //g'`
    9. consul_data=`cat $yaml | grep -v $consul_key`
    10. curl --location --request PUT "http://${consul_address}/v1/kv/${consul_key}?dc=hrfax" --header "X-Consul-Token: ${consul_token}" --header "Content-Type: text/plain" --data "${consul_data}"
    11. done
    12. if [[ $? -eq 0 ]];then
    13. echo "更新consul成功"
    14. fi
    15. [root@bastion option-consul]# cat update_consul.sh
    16. #!/bin/bash
    17. cd /data/deployment_mediums;git pull
    18. sleep 5
    19. consul_address='192.168.12.121:32000'
    20. consul_token='8dc1eb67-1f5f-4e10-ad9d-5e58b047647c'
    21. cd /data/deployment_mediums/$1
    22. for yaml in `ls consul/*`;do
    23. consul_key=`cat $yaml |head -1 |sed 's/#//g' |sed 's/ //g'`
    24. consul_data=`cat $yaml | grep -v $consul_key`
    25. curl --location --request PUT "http://${consul_address}/v1/kv/${consul_key}?dc=hrfax" --header "X-Consul-Token: ${consul_token}" --header "Content-Type: text/plain" --data "${consul_data}"
    26. done
    27. if [[ $? -eq 0 ]];then
    28. echo "更新consul成功"
    29. fi
  • 相关阅读:
    全光网络技术、标准、应用现状及展望
    Vue3 计算属性
    《基础会计学》期末模拟试题及答案
    国产ETL工具BeeDI 产品 之 全国连锁到集团总部 数据同步
    【应用】Docker Registry
    Redis设计与实现(2)链表和链表节点
    npm打包整个过程
    今年最大的开源盛会 KubeCon 为开发者带来了什么?
    VScode配置文件launch.json 和 tasks.json配置项详细说明
    展锐S 上微距模式不识别问题跟进 --- sensor_config的解析
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/132804947