工作中要保證生產環境部署的consul的集群能夠安全穩定地對外提供服務,即使出現系統故障也能快速恢復,這里將講述部分的備份還原操作及KV的導入導出操作。
備份與還原
需要備份的主要有兩類數據:consul相關的配置文件、consul的服務器狀態,采用下面的腳本備份就可以了:
1
2
3
4
5
6
7
8
9
10
|
ts=$(date +%Y%m%d%H%M%S)
# 備份配置文件
tar -czpf consul_config_
$ts.tar.gz /etc/consul/config.json /etc/consul/consul.d
# 備份consul的服務器狀態,注意由於該consul開啟了ACL,執行consul snapshot save時必須帶Management Token,關於consul ACL token的說明見上一篇"consul安全加固"
consul snapshot save --http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 consul_state_
$ts.snap
# 查看一下生成的consul服務器狀態文件
consul snapshot inspect consul_state_
$ts.snap
|
最后將生成的consul_config_xxx.tar.gz
、consul_state_xxx.snap
拷貝到其它服務器妥善存儲。
還原也比較簡單,采用下面的腳本就可以了:
1
2
3
4
5
|
# 還原配置文件
tar -xzpf consul_config_20180521145032.tar.gz -C /
# 還原consul服務器狀態
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ ts=$(date +%Y%m%d%H%M%S)
# 導出所有kv鍵值對,注意最后一個參數是導出鍵值對的前綴,為空字符串說明要導出所有
$ consul kv
export --http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 '' > consul_kv_$ts.json
# 查看下導出的json文件格式
$ cat consul_kv_
$ts.json
[
{
"key": "xxxxxx",
"flags": 0,
"value": "yyyyyy"
},
{
"key": "xxxxxx2",
"flags": 0,
"value": "eyJ2ZXJzaW9uX3RpbWVzdGFtcCI6IC0xfQ=="
},
]
|
發現是每個鍵值對都是json數值中一項,其中key為鍵值對Key的名稱,value為鍵值對Value的base64編碼,使用base64 -d
命令編碼就可以看到原始的value值,如:
1
2
|
$
echo 'eyJ2ZXJzaW9uX3RpbWVzdGFtcCI6IC0xfQ==' | base64 -d
{
"version_timestamp": -1}
|
導入就更簡單了:
1
|
consul kv import --http-addr=http://10.12.142.216:8500 -token=b3a9bca3-6e8e-9678-ea35-ccb8fb272d42 @consul_kv_20180521150322.json
|
OVER