您现在的位置:kastop>> Kas信息 Kaspa网络>>正文内容

运行 KASPA 归档节点

Kaspa 归档节点存储了大量数据,因此设置一个完整的新归档节点需要一些特殊步骤。在以下章节中,将介绍该想法和设置步骤。

要求

在撰写本文档时,数据量为 1.2T。因此,建议至少要有1.5T的可用存储空间。此外,在节点启动期间将占用大量磁盘 IO,这在传统的机械硬盘上会失败。因此,需要的不是 HDD,而是 SSD。机器本身至少应具有 32G 的内存。CPU 要求不是那么严格,因此过去五年内的 CPU 就足够了。

关于操作系统,除了您必须能够运行cmdline工具rsync之外,不需要任何特殊操作。在任何 Linux 系统上,这只是一个要安装的软件包。如果你使用的是 Windows,建议使用的方法是使用 WSL(适用于 Linux 的 Windows 子系统)。在 WSL 中,rsync 的安装方式与在 Linux 上的安装方式相同。

要运行节点,至少需要安装 kaspad。为此,请按照 wiki 上的相应设置说明进行操作:

重要提示:除了节点的设置之外,您还需要将参数添加到 服务的 start 命令中!请参阅下面的详细说明。--archival

总结要求:

  • 具有至少 1.5T 可用空间的 SSD

  • 已安装 cmdline 工具 rsync

  • 已安装 kaspad

  • 也许更多,我们会看到...... ;-)

设置过程的高级视图

整个设置过程将按以下方式工作:

  1. rsync 用于在分离的系统之间同步数据。这意味着,它非常有效地处理大量文件和大量数据。因此,第一步是直接从正在运行的存档节点进行初始数据同步。我们在这里使用的优点是,这些文件中的大多数根本没有被触及(修改),因此它们可以同步(下载)到新的存档节点,而无需关闭已经运行的存档节点。如果自初始同步开始以来文件正在使用或修改,rsync 将跳过该文件。由于源存档节点正在运行,因此初始同步需要多长时间并不重要。

  2. 如果从步骤 1 开始的初始 rsync 运行已完成,则源节点中所有未触及的文件现在也存在于新的存档节点上。现在将触发另一个同步步骤,该步骤首先同步文件列表,并仅将新的 a/o 修改文件从运行节点传输到新节点。此步骤仅比初始同步花费一小部分时间,因为大多数数据已经在新节点上。此外,如果在上一次同步完成后立即多次触发同步,则将再次花费更少的时间。因此,它可以多次执行而不会出现问题。

  3. 最后一个 rsync 步骤将同步有效的数据状态。这意味着,需要停止正在运行的存档节点才能将所有数据正确地写入磁盘。在停止之后,最终的 rsync 运行将同步上次修改的文件,因此源系统和即将到来的新存档节点上的文件是相同的。之后,在两个节点上都可以启动kaspad。一旦启动完成,“旧”和“新”存档节点就会启动并运行。

使用这种方法,由于在最终同步步骤之前使用了数据的总传输时间,因此可以最大程度地减少现有存档节点的停机时间。

详细的设置说明

创建 Ssh 密钥对

首先,需要创建一个 ssh 密钥对。为此,使用了 cmd。只需在 Linux cmdline 上发出 cmd 并适当地回答问题即可。下面是一个示例,如下所示:ssh-keygen

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hlxeasy/.ssh/id_rsa): /home/hlxeasy/.ssh/arch-node-sync-key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hlxeasy/.ssh/arch-node-sync-key.
Your public key has been saved in /home/hlxeasy/.ssh/arch-node-sync-key.pub.

...

复制

请注意,完整路径是在第一个问题中给出的!否则,密钥对将存储在触发 cmd 的位置。/home/hlxeasy/.ssh/arch-node-sync-key

将公钥发布到存档节点操作员

要授予对正在运行的存档节点的访问权限,操作员需要知道您的公钥。为此,只需在 cmdline 上输出公钥,复制输出并将其提供给存档节点操作员。下面是一个示例,如下所示:

$ cat ~/.ssh/arch-node-sync-key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAD...this.might.be.a.long.line...1VYAP79rkuRmpw+iwu/KnGQev8b5jRZc83dhk+4OMtQI1sqH hlxeasy@archivalnode1

复制

要复制的行以 开头,而且很长!在行的末尾,您会看到本地用户名和主机名,用 分隔。如前所述,复制整行并将其转发给要从中同步的存档节点的节点运算符。ssh-rsa@

配置 Kaspad

正如在需求中已经写过的那样,存档节点需要大量的磁盘空间。要让 kaspad 使用此磁盘空间,必须根据您的设置对其进行配置。

LINUX操作系统

1. 数据位置

在下文中,假设安装了大 ssd 并且 kaspad 应该存储存档数据。如果这在您的设置中有所不同,请根据您的需要进行修改。/data/data/data1

为了让 kaspad 知道存储数据的位置,需要修改它的配置文件。因此,使用您选择的编辑器打开并查看第一个配置部分:~/.kaspad/kaspad.conf

[Application Options]

; ------------------------------------------------------------------------------
; Data settings
; ------------------------------------------------------------------------------

; The directory to store data such as the block DAG and peer addresses. The
; block DAG takes several GB, so this location must have a lot of free space.
; The default is ~/.kaspad/data on POSIX OSes, $LOCALAPPDATA/Kaspad/data on Windows,
; ~/Library/Application Support/Kaspad/data on Mac OS, and $home/kaspad/data on
; Plan9. Environment variables are expanded so they may be used. NOTE: Windows
; environment variables are typically %VARIABLE%, but they must be accessed with
; $VARIABLE here. Also, ~ is expanded to $LOCALAPPDATA on Windows.
; datadir=~/.kaspad/data

复制

在此块后面插入以下内容:

appdir=/data/data1

复制

保存并关闭文件。从现在开始,kaspad 会将其数据存储在配置的路径下方。

2. 激活存档模式

要让 kaspad 在存档模式下运行,必须使用选项 启动它。因此,cmdline 可能如下所示:--archival

kaspad --utxoindex --archival

复制

如果系统配置为使用 systemd,则需要将此选项添加到以下行中:ExecStart/etc/systemd/system/kaspad.service

ExecStart=/usr/local/bin/kaspad --utxoindex --archival

复制

别忘了

sudo systemctl daemon-reload

复制

更新服务后!

 

窗户

通常,需要进行与 Linux 相同的调整:

  1. 将 data dir 设置为存储 ssd

  2. 使用 kaspad cmd 上的选项激活存档模式--archival

 

设置存档节点访问

这一步需要由现有存档节点的算子来完成!
请随时在 Kaspa Discord 上与 Helix (helixeasy) 联系以同步您的节点。

要授予对存档节点数据的访问权限,需要将以下行添加到存档主机上对节点数据具有读取访问权限的帐户的文件中:~/.ssh/authorized_keys

command="rsync --stats --progress --numeric-ids -axAhHSP --server --sender --delete /data/data1/" ssh-rsa AAAAB3NzaC1yc2EAAAAD...public.key.from.above

复制

可能需要修改存档数据的实际位置。/data/data1

添加此行后,除了执行此 cmd 之外,什么都不允许,因此数据将通过 ssh 同步,但无法真正以这种方式访问存档节点。

同步数据

节点操作员按照上一步所述添加公钥后,可以启动数据同步。这是通过多次执行 rsync 来完成的,直到只同步少量文件。

第一次 rsync 运行将同步大部分数据,并且需要数小时,具体取决于 Internet 连接。rsync 执行的第一步是确定要同步的文件。由于有近 400k 个文件,仅此一项就可能需要几分钟时间。之后,rsync 开始传输文件,这将需要几个小时。

首先,需要定义一些设置:

$ HOST=<url-of-remote-archival-node>             # \
$ PORT=<port-to-use-for-ssh>                     #  > The operator of the existing archival node will tell you
$ ACCOUNT=<account-name-to-login>                # /
$ KEY=<private-key-with-path>                    # The private key you created before with full path
$ DESTINATION=<destination-folder-at-your-side>  # Where the data should be stored

复制

要同步的 cmd 如下所示:

$ rsync --stats --progress --delete --numeric-ids -axAhHSP -e "ssh -l ${ACCOUNT} -p ${PORT} -i ${KEY}" ${HOST}:/data/data1/ /data/data1
        \________________________________________________/ \_________________________________________/ \__________________/ \_________/
                     options, see rsync --help                    Account, port and private key            URL and path      Where to sync to
                                                                      to authenticate                      to sync from

复制

初始同步的第一行可能如下所示:

$ HOST=some.url.to.connect
$ PORT=1234
$ ACCOUNT=kaspad
$ KEY=~/.ssh/arch-node-sync-key
$ DESTINATION=/data/data1
$ rsync --stats --progress --delete --numeric-ids -axAhHSP -e "ssh -l ${ACCOUNT} -p ${PORT} -i ${KEY}" ${HOST}:/data/data1/ ${DESTINATION}
The authenticity of host '[some.url.to.connect]:1234 ([123.123.123.123]:1234)' can't be established.
ECDSA key fingerprint is SHA256:aDqHwB1KiSSVJLDHD9PuWQ4oqOax8/J3oFSaaZt3IxQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[some.url.to.connect]:1234,[123.123.123.123]:1234' (ECDSA) to the list of known hosts.
receiving file list ...
380230 files to consider
kaspa-mainnet/
kaspa-mainnet/datadir2/
kaspa-mainnet/datadir2/042382.ldb
          2.13M 100%   61.48MB/s    0:00:00 (xfr#1, to-chk=380226/380230)
kaspa-mainnet/datadir2/042383.ldb
          2.13M 100%   31.70MB/s    0:00:00 (xfr#2, to-chk=380225/380230)
kaspa-mainnet/datadir2/042384.ldb
          2.13M 100%   21.13MB/s    0:00:00 (xfr#3, to-chk=380224/380230)
...

复制

在该屏幕截图时,rsync 确定要同步的 380230 个文件,然后立即开始同步。在每第二行的末尾,您可以看到还剩下多少个文件要传输。

在初始同步运行完成后,应立即触发相同的 cmd。现在要同步的文件数量要少得多,因为大多数文件已经传输了。rsync cmd 应该经常执行,直到只同步非常少量的文件。

对于自动重新启动 rsync,类似以下 oneliner 的内容可能很方便:

$ while true ; do rsync ... ; echo "Sleeping 60s" ; sleep 60 ; done

复制

在三个点处,您需要按照之前编写的方式插入 rsync 参数。

此命令链将首先触发 rsync。如果完成,输出“Sleeping 60s”将被写入控制台,并在 60s 后再次触发 rsync。可以在“睡眠”输出后立即停止使用 cmd。Ctrl-C

最终同步

最终的同步需要与源节点的算子进行协调。需要停止源节点才能将一致状态写入光盘。一旦节点停止,就可以触发最终同步。

最终同步可能如下所示:

$ rsync --stats --progress --delete --numeric-ids -axAhHSP -e "ssh -l ${ACCOUNT} -p ${PORT} -i ${KEY}" ${HOST}:/data/data1/ ${DESTINATION}
receiving file list ...
380230 files to consider
kaspa-mainnet/datadir2/8969076.log
        117.73M 100%  149.70MB/s    0:00:00 (xfr#1, to-chk=33/380230)
kaspa-mainnet/logs/kaspad.log
         29.25M 100%   21.72MB/s    0:00:01 (xfr#2, to-chk=2/380230)

Number of files: 380,230 (reg: 380,225, dir: 5)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 2
Total file size: 747.60G bytes
Total transferred file size: 146.98M bytes
Literal data: 550.25K bytes
Matched data: 146.66M bytes
File list size: 10.40M
File list generation time: 3.297 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 108.45K
Total bytes received: 11.01M

sent 108.45K bytes  received 11.01M bytes  1.17M bytes/sec
total size is 747.60G  speedup is 67,233.77

复制

最终同步完成后,可以再次重新启动源节点。通过这种最终同步,源节点的实际停机时间尽可能短。

启动 Kaspa Daemon

如果您使用的是 Linux,请在启动节点之前仔细检查文件权限 a/o 所有权!这些文件应属于运行 kaspad 服务的帐户。

现在 kaspad 可以启动了,应该在日志上显示如下内容:

2023-09-29 17:47:20.755 [INF] KASD: Version 0.12.14
2023-09-29 17:47:20.756 [INF] KASD: Loading database from '/data/data1/kaspa-mainnet/datadir2'
2023-09-29 17:47:28.312 [INF] ADXR: Loaded 4096 addresses and 0 banned addresses
2023-09-29 17:47:28.647 [INF] KASD: UTXO index started
2023-09-29 17:47:28.648 [INF] TXMP: P2P Server listening on [::]:16111
2023-09-29 17:47:28.648 [INF] TXMP: RPC Server listening on [::]:16110
...

复制

只要输出像

...
2023-09-29 17:47:48.620 [INF] PROT: Accepted block c43a15813393d6cee0750227122ac3a89db8aac3b255b215c40ca308e4dc2360 via relay
2023-09-29 17:47:48.721 [INF] PROT: Accepted block b1c9705e9a462e4725f9d84b102806f2353f52d6c8a6b916fb689e9a262a340c via relay
2023-09-29 17:47:49.687 [INF] PROT: Accepted block b82cd4a0823b79cce8acbc52e1b843132a436236ed0d14204c5a3c1fed4c162a via relay
...

复制

在日志中,则节点与 Kaspa DAG 同步。

恭喜,您的存档节点已启动并运行!

日志内容说明

如前面几节所示,kaspad 的日志包含不同的缩写。这些缩写将在以下内容中解释:

第1列和第2列

第一列和第二列包含日志条目的日期和时间。

例:

2023-10-05 22:57:25.779

复制

第三列

第三列将条目的类型分类为信息条目 ()、警告 () 和错误(致开发人员:还有更多吗?这些条目封装在方括号中。INFWRN

例:

2023-10-05 23:00:04.081 [WRN]
2023-10-05 23:00:04.289 [INF]

复制

第4列

要解释,帮助感谢!

  • KASD公司

  • ADXR型

  • CMGR系列

  • 波特

  • BDAG公司

  • TXMP系列

第5列

行末尾的第五列包含日志消息内容。

例:

2023-10-05 23:03:14.007 [WRN] TXMP: Rejected spam tx c56320cd1cfe20869d0a20a95e5...
2023-10-05 23:03:14.230 [INF] PROT: Accepted block 732a37799c353457d55b212d94b95...
2023-10-05 23:03:14.230 [INF] PROT: Ignoring duplicate block 732a37799c353457d55...

复制

 



感动 同情 无聊 愤怒 搞笑 难过 高兴 路过
【字体: 】【收藏】【打印文章】 【 打赏 】 【查看评论

相关文章

    没有相关内容