Snapshot を使って同期を短縮して Astar Node を動かす!
以下の投稿で、Raspberry Pi による Astar Archive Node をレポートしてきました。
構築プロセスは容易なのですが、同期が最新ブロックまで追いつくのに初期から立てると結構時間がかかってしまいます。
そこで、「スナップショット」を使って構築する方法を試しました。これにより、圧倒的に早く最新の状態までもっていくことができます。
しかも簡単です。
若干気を付ける点や、確認された事象もあるので補足しながらレポートします。
※せっかちな方は、最後の「コマンドオンリー」を見てください。
1,スナップショットのダウンロード
スナップショット(実態はただの tar ball)は、Stakecraft というサイトからダウンロード可能です。
ここには、Astar 以外のスナップショットも置いてあります。
だいたい日時で更新されたアーカイブファイルがダウンロード可能になっています。
サイトからダウンロードリンクがわかるので、ツールは何でもいいですが、以下のようにダウンロードします。
# wget < download link >
ファイルが数百GBあり大きいのでこのダウンロードにはインターネット環境によっては時間がかかります。そのため、ファイルダウンロードするツールはレジューム可能なものがよいかもしれません。
2,ディレクトリの準備
いったん、Astar Archive Node をセットアップして一度起動してから、停止します。(参考: Raspberry Pi で Astar Node 動かす②)
# sudo systemctl start astar.service
(初期同期はじめたのを確認した後、停止する)
# sudo systemctl stop astar.service
これにより、必要なディレクトリ構造が「/var/lib/astar」以下に構成されます。
Astar サービス(astar-collator)が停止している状態で、DBのディレクトリを再作成します。(いったん初期化されたデータごと消すということ)
# sudo rm -rf /var/lib/astar/chains/astar/db
# sudo mkdir -p /var/lib/astar/chains/astar/db/full
3,スナップショットの展開
ダウンロードしたスナップショットファイル(tar ball)を展開します。
# sudo tar xf < snapshot file > -C /var/lib/astar/chains/astar/db/full
これも環境依存ですが、時間が多少かかります。
4,所有者、グループの更新
あたらしく作り直したディレクトリと展開されたファイル全ての所有者・グループを"astar"に変更します。※これらが"astar"(厳密には astar-collator を起動するユーザー)となっていないと起動しません。
# sudo chown -R astar.astar /var/lib/astar/chains/astar/db
5,Astar サービスの起動
最後に、Astar サービスを起動して終了です。
# sudo systemctl start astar.service
実行後、「 journalctl -f -u astar.service -n 100 」でエラーがないか、正常に同期が始まったかなどを確認してください。
以上です。
留意点
環境・・・スナップショットのダウンロードについて
Snapshotファイルはこの記事を書いている時点で、350GB 程あります。インターネットの下りの速度からおおよそダウンロード完了までの時間が計算できるかとおもいますが、これには多くの時間がかかります。(例えば、ざっくり 10MB/s で、10時間くらい)
環境・・・ドライブについて
スナップショットを展開する際、その展開完了までの時間はおおよそお使いのデータドライブ(ハードディスクかSSDかなど)によって決まります。特に展開元スナップショットファイルと、展開先ディレクトリが同じハードディスクドライブだと、数時間単位を見込んでください。
展開元と先を別のドライブにする、あるいはSSDを使うと時間を短縮できます。
スナップショットファイルやファイルシステムの状態
ダウンロードと展開に失敗した場合、Astar サービスを起動すると以下のようなエラーで正常に起動せず、Astar サービスの再起動が繰り返されます。
Jul 09 04:13:58 hogenode astar-collator[1829]: Error: Service(Client(Backend("Invalid argument: Column families not opened: col12, col11, col10, col9, col8, col7, col6, col5, col4, col3, col2, col1, col0")))
Jul 09 04:13:58 hogenode systemd[1]: astar.service: Main process exited, code=exited, status=1/FAILURE
Jul 09 04:13:58 hogenode systemd[1]: astar.service: Failed with result 'exit-code'.
Jul 09 04:14:08 hogenode systemd[1]: astar.service: Scheduled restart job, restart counter is at 8.
Jul 09 04:14:08 hogenode systemd[1]: Stopped Astar Archive node.
Jul 09 04:14:08 hogenode systemd[1]: Started Astar Archive node.
Jul 09 04:14:08 hogenode astar-collator[1884]: 2023-07-09 04:14:08 Astar Collator
このような場合は、スナップショットの破損、欠損、あるいは展開されたファイルシステムの不整合などが原因の可能性がありますので、再度スナップショットを取得しなおす、ファイルシステムを再構築するなどを試してみてください。
コマンドオンリー
Download snapshot
# wget < download link >
# systemctl stop astar.service
# rm -rf chains/astar/db
# mkdir -p chains/astar/db/full
# tar xf <snapshot file> -C /var/lib/astar/chains/astar/db/full/
# chown -R astar.astar /var/lib/astar/chains/astar/db
# systemctl start astar.service