在上一篇 使用 Consul Template 達成 Nginx 設定檔的動態更新 中建立完 Consul,但是有個大問題,Consul 大部分資料都不會儲存至實體檔案,不論是 Key/Value, Token, Policies, Roles 等都是,所以只要一把容器(Container)關閉資料就不見了... 本篇就來介紹備份指令。
進入容器:
建議切換到 /consul 路徑下,因為部分資料就是儲存在這裡,如果有設定 volume 就可以直接在外部取得檔案,刪除後也會保留資料。
如果有開啟 ACL 需要附加 token:
範例輸出:
如果有開啟 ACL 一樣需要附加 token:
在容器內的 /consul/config/consul-acl.json 檔案新增下面區塊內容即可
進入容器:
docker exec -it consul /bin/sh
建議切換到 /consul 路徑下,因為部分資料就是儲存在這裡,如果有設定 volume 就可以直接在外部取得檔案,刪除後也會保留資料。
cd /consul
備份
consul snapshot save backup.snap
如果有開啟 ACL 需要附加 token:
consul snapshot save -token 4321abcd-1234-0408-a123-fedcbaabcdef backup.snap
顯示備份資料資訊
consul snapshot inspect backup.snap
範例輸出:
consul snapshot inspect backup.snap
ID 2-56-1681310938346
Size 6221
Index 56
Term 2
Version 1
Type Count Size
---- ---- ----
Register 3 2.1KB
ConnectCA 1 1.2KB
ConnectCAProviderState 1 1.1KB
Index 20 594B
Autopilot 1 199B
ConnectCAConfig 1 195B
SystemMetadata 3 191B
CoordinateBatchUpdate 1 176B
FederationState 1 139B
KVS 2 138B
ChunkingState 1 12B
---- ---- ----
Total 6.1KB
還原
consul snapshot restore backup.snap
註:需要先切換到備份路徑或是指定檔案路徑
如果有開啟 ACL 一樣需要附加 token:
consul snapshot restore -token 4321abcd-1234-0408-a123-fedcbaabcdef backup.snap
已開啟 ACL 後缺少 Token 的解決方式
如果開啟 ACL 後重新啟動容器(Container) 會發現 Token 失效,根本無法還原,解決方式就是使用設定檔指定最高權限的 token,如果忘記 token 也可以使用這個方式來替換既有 token在容器內的 /consul/config/consul-acl.json 檔案新增下面區塊內容即可
{
"acl": {
"enabled": true,
"default_policy": "deny",
"down_policy": "extend-cache",
"enable_token_persistence": true,
"tokens":{
"initial_management":"4321abcd-1234-0408-a123-fedcbaabcdef"
}
}
}
註:其他部分應該在開啟 ACL 時就已經新增。
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com