【问题标题】:what is the right way to back-up a substrate basepath?备份基板基本路径的正确方法是什么?
【发布时间】:2021-11-16 10:53:22
【问题描述】:

任何人都可以向我指出有关基板基本路径备份和恢复的最佳实践指南吗?具体来说,我想知道这些事情:

  1. 根据我的经验,在底层服务运行时备份基本路径会导致无法在还原中使用的损坏数据库。这是预期的吗?如果是这样,那就不足为奇了。

    在节点服务运行时同步会产生错误和警告(在同步过程中),如下所示:

    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")))
    
  2. 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/*"
    
  3. 基本路径中的哪些文件对还原有用并且应该备份?以及编号为 *.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 同步中将它们过滤掉。我想我还应该过滤掉密钥库,以防有一天有人复制/粘贴我的同步命令并泄露了密钥......

标签: amazon-s3 substrate


【解决方案1】:

以下是有关进行任何类型数据库快照的专业提示:

  1. 总是在备份之前停止节点!不这样做通常会导致数据库损坏。
  2. 始终排除 {basepath}/keystore{basepath}/network 从您的备份中或仅明确备份 {basepath}/
  3. 应备份整个 db 文件夹。这可以直接是rsynced,但也可以是tar'd 或压缩然后备份。

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多