見出し画像

モバイルノードで既存ノードの冗長化をしてみた

今回Symbolブロックチェーンにおける、Allnodesのノードクラッシュ時の対策としてモバイルノード(PeerNode)にて冗長化構成を実際に構築してみましたので、まとめておきます。

自分含め委任者が居る状態のノードを冗長化するにあたり、ノード自体に影響がないか、ハーベスターに影響がないかを確認するため、単体構成だったモバイルノードを、バックアップを使用せずにもう一台のスマホで冗長化構成を試してみるところからスタートしました。
それにあたり、ハインツさんのQiitaの記事を大いに参考にさせていただきました。
また、その後の検証に関しても多大にご協力いただきました。ありがとうございました✨
■検証■ 委任者情報を引き継ぎノード環境を移行できるか〈通常ノード(api,peer)からモバイルノード(peer)〉




必要条件

モバイルノードで冗長化構成を行うため、モバイルノードを起動できる性能のある端末とネット環境が必要です。(Wi-Fi運用でもOK)
モバイルノードに関しては以前まとめたこちらの記事をご確認ください。
⏩Symbolモバイルノード 運用方法 まとめ

その他必要なもの
・ノードのtransportアカウントの秘密鍵
⚠️秘密鍵はノードの構築や報酬の受け取りに必要なものですので、流出した場合、これらを用いて第三者にノード構築を許し、ノード報酬の受取先を変更されてしまう可能性があります。
通常の秘密鍵同様、管理には注意を払いましょう。

あったらいいもの
・Fast Sync用のブロックデータ(要PC)⏩tqmさん提供スナップショット
・最新のharvesters.datファイル


今回冗長化してみたノードはallnodesというホスティングサービス上で構築、保守いただいている以下のノードです。

Host name:xym347.allnodes.me

モバイルノードで構築したPeerノードは以下
Host name:nononon node
Friendry name:allnodes347

いずれも同じノード公開鍵を持ちます。
ノード本体のアドレスは
NAET4IR2IT2JJ3KBOX4NRPSDKWLUUFDQ5T3YIOY
で、用意したtransportアカウントの秘密鍵と紐づくアドレスがこちらになります。


harvesters.datファイルが無い場合

今回自分は、ノードホスティングサービスのAllnodesですでに稼働しているxym347.allnodes.meのノードを冗長化させるため、サービス提供元のAllnodesにノードの各種秘密鍵を教えてもらえないか問い合わせをしました。
⚠️通常の提供サービス外の依頼になるため、必ず教えていただけるとは限りません。
(実際に問い合わせから教えてもらえるまで1か月くらいかかりました)
また、委任情報のデータであるharvesters.datファイルは毎日バックアップを行っているため共有が不可能との返答でした。

harvesters.datファイルが無い場合、Fast Sync用のブロックデータは使用できず、ブロック1から地道に同期を進めていく必要があります。
💡harvesters.datファイルへの情報書き込みはブロックデータの同期と共に進むため、同期済みブロックを使用してしまうとharvesters.datファイルへの委任情報書き込みが行われず、起動ノードが委任情報を取得できません。

冗長化を行う端末でモバイルノードアプリのインストールおよびアプリの権限設定等を実施したら、アプリを立ち上げ、ノードを構築していきます。
そのため、必要条件に記載した秘密鍵を準備します。
・ノードのtransportアカウントの秘密鍵

下部メニューの『Settings』から、『ノードの構築』を選択

画面の指示に従って、ネットワーク設定、作業フォルダの選択を進めていきます。
💡作業フォルダ選択時に、権限許可のポップアップが出た場合、必ず許可をしましょう。


『ノードSSL証明書/を作成するため、アカウントの秘密鍵を入力してください。』
この項目に、用意した既存ノードの『transportアカウントの秘密鍵』を入力します。

Host name』や『Friendly name』は既存のノードと異なるものでも問題ありません。

手順通りに進め、ノード構築を完了させます。


次に、冗長化ノードのハーベストに関する設定を実施していきます。

再度メニューから『Settings』画面を開き、『ハーベスティングの設定』項目を選択します。

各種設定項目を入力していきます。
既存ノードと設定が異なると意図しない挙動を起こす可能性があるため、慎重に進めていきます。


① harvestersSigningPrivateKey(ハーベスタ署名秘密鍵)
┗ここは空欄で問題ありません。

② harvestersVrfPrivateKey(ハーベスターVrf秘密鍵)
┗ここは空欄で問題ありません。

③ enableAutoHarvesting(自動収穫を有効状態)
┗ここは『false

④ maxUnlockedAccounts(最大委任受入数)
┗ここには既存ノードと同じ受入数を入力します。
⚠️すでに委任者がいる場合、それより低い受入数を設定してしまうと構築中のノードで委任者が正常に反映されない恐れがあります。

⑤ delegatePrioritizationPolicy(受け入れ優先度設定)
┗ここには委任枠以上の委任があった際の優先付け方法を入力しますが、既存ノードと同じポリシー設定を行います。
 Age - 先着順
 Importance - インポータンス順

⑥ beneficiaryAddress(報酬受取アドレス)
┗ここにはノード報酬を受け取るアドレスを入力します。
💡既存ノードと異なる受取アドレスでも問題ありません。
空欄の場合無徴収ノードとなります。

入力が完了したら、右下の保存ボタンを押し、ターミナルに戻ります。


ノード構築、ハーベスティングの設定が完了したら、『Server』を選択し、ノードを起動します。

あとは、最新ブロックに追いつけばモバイルノードを活用した既存ノードの冗長化は完了です。

最新ブロックまで追いついたら、委任情報が正確に認識されているか、メニュー→『Info』より、『委任ハーベスタ』を選択し、委任状況の確認を行いましょう。

harvesters.datファイルがある場合

最新状態の『harvesters.dat』がある場合は、最終委任者が委任トランザクションを発行したブロック以上に同期が進んでから移植する必要があります。
※最新状態でない『harvesters.dat』の場合はバックアップを取得したブロックより後に委任処理(再委任含む)を行ったハーベスターの委任がノードに正常に認識されません。

同期が進む前に移植した場合の挙動に関しては未確認です。
最新ブロックまで同期が完了したあとに、最新のharvesters.datを移植する方法が無難かと思います。

同期済みブロックにはノード情報は含まれないため、スナップショットや他のノードのものを持ってきても問題はないようです。

ノードの構築およびハーベスティングの設定についてはharvesters.datファイルが無い場合、と同様ですが、上記に記載した通り既存の同期済みブロックデータを活用できる点が異なります。
スナップショットデータを用いることで最新ブロックまでの同期完了にかかる時間を短縮することができるため、harvesters.datファイルを保持している場合は活用していきましょう。


そのほか

ノード証明書に関してはブロックチェーン上にデータがあるわけではなく、ネットワーク上で認識されるためのものとしてノード内に存在します。
(certificatesフォルダ内データ)

ノード構築を実施した日に証明書が発行されるため、証明書の期限に関してもノード端末ごとに異なり、個別で更新が必要になります。

ハーベスト設定のbeneficiaryAddress(報酬受取アドレス)を既存ノードと異なるアドレスに設定した場合、”そのノードがハーベストを獲得したら”そのノードで設定した受取アドレスに報酬が入ります。
💡ネットワーク上で同じノードと認識されていても、物理的にノードを分散させることで報酬の受取先を複数設定することが可能。
(ハインツさんとともにメインネットのモバイルノードで検証済み)
⚠️懸念点としては、ハーベストは最新ブロックを保持しているノードのみ獲得権利を得ることができますが、今後ネットワークが活発に活用されノード負荷が大きくなった場合、端末性能などにより最新ブロックを同期するタイミングが遅くなる≒ハーベスト獲得権利を得られるタイミングが遅れる≒ハーベスト頻度が下がるといったことが考えられます。
実際、検証時にはallnodes側で設定された受取アドレスでの獲得がほとんどで、冗長化したPeerノード側で設定した受取アドレスでの獲得頻度は低いです。
どの程度の割合で分散するのか、などは長期的に見ていく必要がありますが、しばらくこの状態で運用してみて(あくまでも自分の環境下での)割合なども出していきたいなと思っています。



モバイルノードで手軽に冗長化構成を構築することができるようになり、ブロック生成を担うPeer機能の面でノードの安定性が向上し、ネットワークの安定性も向上することができるようになりました。

同一の方法でallnodes等のホスティングサービスから切り替えることも可能ですので、ノード運営に関する選択の幅が広がったのではと思います!

既にノードを運営されている方も、ぜひモバイルノード試していただきたいです✨



⬜サポートオープンチャットの紹介


Symbolに関すること等、サポートしあえる場としてLINEのオープンチャットも運営してます。
多数の有識者が参加してくれているので、『分散型サポートセンター』としてやっていければと思っています。
何かお困りの際等にはお気軽にご参加、ご質問ください~✨



Communityが運営しているSymbol情報サイトはこちら



いいなと思ったら応援しよう!