【发布时间】:2021-11-16 10:53:22
【问题描述】:
任何人都可以向我指出有关基板基本路径备份和恢复的最佳实践指南吗?具体来说,我想知道这些事情:
-
根据我的经验,在底层服务运行时备份基本路径会导致无法在还原中使用的损坏数据库。这是预期的吗?如果是这样,那就不足为奇了。
在节点服务运行时同步会产生错误和警告(在同步过程中),如下所示:
warning: Skipping file /var/lib/substrate/polkadot/chains/ksmcc3/db/full/642785.sst. File does not exist.和
upload failed: ../../var/lib/substrate/polkadot/chains/ksmcc3/db/full/642836.sst to s3://calamari-kusama-smoothie-calamari-systems/var/lib/substrate/polkadot/chains/ksmcc3/db/full/642836.sst [Errno 2] No such file or directory: '/var/lib/substrate/polkadot/chains/ksmcc3/db/full/642836.sst'在节点服务运行时从备份中恢复的基本路径,总是像这样(对我来说)错误:
Error: Service(Client(Backend("Invalid argument: Column families not opened: col11, col10, col9, col8, col7, col6, col5, col4, col3, col2, col1, col0")))或:
Error: Service(Client(Backend("IO error: No such file or directory: While opening a file for sequentially reading: /var/lib/substrate/chains/calamari/db/full/MANIFEST-009085: No such file or directory"))) -
rsyncing basepath 是进行备份的正确方法吗?对于 ec2 节点,我目前像这样同步到 s3 存储桶(排除项从备份中省略节点密钥文件):
para=calamari relay=ksmcc3 bucket=${para}-${relay}-${HOSTNAME//./-} basepath=/var/lib/substrate sudo systemctl stop ${para}.service /usr/bin/aws s3 sync ${basepath} s3://${bucket}${basepath} \ --exclude "chains/${para}/network/*" \ --exclude "polkadot/chains/${relay}/network/*" -
基本路径中的哪些文件对还原有用并且应该备份?以及编号为 *.sst 和 *.log 文件的块,这是我看到的(在最近启动的,仍在同步的节点上):
$ ls -hl --ignore *.sst --ignore *.log /var/lib/substrate/{polkadot/chains/${relay}/db/{full,full/parachains/db},chains/${para}/db/full/} /var/lib/substrate/chains/calamari/db/full/: total 23M -rw-r--r-- 1 root root 16 Nov 15 17:13 CURRENT -rw-r--r-- 1 root root 37 Nov 15 16:50 IDENTITY -rw-r--r-- 1 root root 0 Nov 15 16:50 LOCK -rw-r--r-- 1 root root 21M Nov 16 06:33 LOG -rw-r--r-- 1 root root 1.5M Nov 16 06:23 MANIFEST-002019 -rw-r--r-- 1 root root 48K Nov 15 17:13 OPTIONS-001991 -rw-r--r-- 1 root root 48K Nov 15 17:13 OPTIONS-002022 -rw-r--r-- 1 root root 1 Nov 15 17:13 db_version /var/lib/substrate/polkadot/chains/ksmcc3/db/full: total 1.4G -rw-r--r-- 1 root root 16 Nov 15 17:13 CURRENT -rw-r--r-- 1 root root 37 Nov 15 16:50 IDENTITY -rw-r--r-- 1 root root 0 Nov 15 16:50 LOCK -rw-r--r-- 1 root root 1.4G Nov 16 06:35 LOG -rw-r--r-- 1 root root 74M Nov 16 06:35 MANIFEST-008095 -rw-r--r-- 1 root root 48K Nov 15 17:13 OPTIONS-007788 -rw-r--r-- 1 root root 48K Nov 15 17:13 OPTIONS-008098 -rw-r--r-- 1 root root 1 Nov 15 17:13 db_version drwxr-xr-x 3 root root 4.0K Nov 15 16:50 parachains drwxr-xr-x 2 root root 4.0K Nov 15 17:13 pvf-artifacts /var/lib/substrate/polkadot/chains/ksmcc3/db/full/parachains/db: total 2.1M -rw-r--r-- 1 root root 16 Nov 15 17:13 CURRENT -rw-r--r-- 1 root root 37 Nov 15 16:50 IDENTITY -rw-r--r-- 1 root root 0 Nov 15 16:50 LOCK -rw-r--r-- 1 root root 2.1M Nov 16 06:33 LOG -rw-r--r-- 1 root root 437 Nov 15 17:13 MANIFEST-000033 -rw-r--r-- 1 root root 24K Nov 15 17:13 OPTIONS-000031 -rw-r--r-- 1 root root 24K Nov 15 17:13 OPTIONS-000036 -rw-r--r-- 1 root root 1 Nov 15 17:13 parachain_db_version
【问题讨论】:
-
我要求节点开发人员为您提供更正式的答案 :) -- key 考虑因素是关键!这些是非常敏感的,并且在您的基本路径中并且未加密 - 确保您知道您正在备份(而不是明确地)以及它们被泄露的可能影响!
-
好点@NukeManDan。这些节点是存档节点,因此具有空的密钥库。有一对节点密钥(一个用于中继,一个用于 para),但我们在 s3 同步中将它们过滤掉。我想我还应该过滤掉密钥库,以防有一天有人复制/粘贴我的同步命令并泄露了密钥......