Wait a moment...

Symbolテストネットノードの構築スクリプト (for Ubuntu Server 18.04)

38207
44uk_i3
nem714xem (11)
2289
4
2020-02-11 02:46:57
Symbolテストネットノードの構築スクリプト (for Ubuntu Server 18.04)

symbol-testnet-bootstrap の 0.9.2.1-beta4 が公開されました。

https://github.com/nemfoundation/symbol-testnet-bootstrap/tree/0.9.2.1-beta4

 

それに伴って、前回のスクリプトに若干の改良を加えたものを公開いたします。

また、この記事でもそうですが、Symbolという名称を使うことにしました。

 

前回の記事

 

Catapultテストネットノードの構築スクリプトを作りました。(AWS EC2 Amazon Linux2 向け) https://nemlog.nem.social/blog/36829

 

手順は前回の記事とほとんど同じですが、改めてすべての手順を記述しましたので、この記事に沿っていただければと思います。

 

 

リポジトリ

 

44uk/sym-node-setup: Setup Symbol node script.

https://github.com/44uk/sym-node-setup

 

今回はスクリプトが3つあります。

  • roles/sym-peer-setup.sh
  • roles/sym-api-setup.sh
  • roles/sym-api-harvest-setup.sh

 

構築したいタイプのスクリプトを利用してください。それぞれの役割は次の通りです。

Peerが無ければブロック生成やチェーンの信頼が弱くなり、APIが無ければ誰もチェーンにアクセスできない、ということになり、

どちらもネットワークでは不可欠な存在となっています。

今後、ネットワークのテストが予定されているそうなので、その時に足りない役割があった場合は募集がかかるかもしれませんが、

それまでお試しでやるならば、お好きにどうぞという感じです。

要求スペックは目安ですが、 Peer < API < API-harvest となっています。

低価格なスペック低めのVPSなどで挑戦する場合は Peer を選ぶと安定動作をするかもしれません。

 

peer

ブロック生成をするノード。

Peerノードと呼ばれます。

 

api

チェーンへのアクセスAPIを提供するノード。

APIノードと呼ばれます。

 

api-harvest

PeerとAPIの両方を担うノード。

Dualノードと呼ばれます。

 

 

使用方法

 

「インスタンス」をクリックします。

 

「インスタンスの作成」をクリックします。

 

スクロールして「Ubuntu Server 18.04 LTS」を選択します。

 

「t2.micro」を選択して、「次のステップ」をクリックします。

厳密には、このサーバインスタンスですと、symbol-testnet-bootstrap が想定する最低スペックを満たしていないので、

ブロックチェーンネットワークに負荷がかかった場合に、パフォーマンスが追いつかなくなる可能性があります。

(今回は無料利用枠の対象ということで選択しています)

 

「ユーザーデータ」の部分にスクリプトを貼り付けます。

貼り付けたら「次のステップ」をクリックします。

 

スクリプトは次のリンクから取得してください。

44uk/sym-node-setup: Setup Symbol node script.

https://github.com/44uk/sym-node-setup/tree/master/roles

 

構築するノードのタイプ向けのスクリプトをクリックしてください。

ファイルの内容を貼り付けます。

「Raw」をクリックするとテキストで表示されるので、コピペしやすくなります。

 

テキストで表示されるので「Ctrl + A」などで全選択してコピーして、ペーストに使用してください。

 

※補足

sym-api-setup.sh を使用する場合ですが、0.9.2.1-beta4 では一発で立ち上がらない問題があります。

BOOTSTRAP_TAG=0.9.2.1-beta4 を BOOTSTRAP_TAG=master に書き換えて実行してください。

これは次のバージョンでは解決するはずなので、一時しのぎです。

 

 

「サイズ」を「30」に変更します。「終了時に削除」にチェックが入っていることを確認して、「次のステップ」をクリックします。

次の画面(タグの追加)では何もせず、「次のステップ」をクリックしてください。

 

セキュリティルールを上記のように設定してください。

これは sym-api-setup.sh (API) または sym-api-harvest-setup.sh (Peer + API) を使用する場合の設定です。

(すみません、 50080 も同様に設定してください)

「確認と作成」をクリックします。

 

これは sym-peer-setup.sh (Peer) を使用する場合の設定です。

 

「起動」をクリックします。

 

「キーペア名」にはお好きな名前をつけて、「キーペアのダウンロード」をクリックして、サーバの秘密鍵を保存してください。

sshでのサーバログインについては、それを解説する記事などをご参照ください。

ただしポート番号は「50022」にスクリプトが変更するので、そこだけ設定を気をつけてください。

「インスタンスの作成」をクリックします。

 

インスタンス名をクリックします。

 

しばらく待つと「running」と「2/2のチェックに合格」という状態になったら準備完了です。

そこから、スクリプトによるセットアップの完了(5分程度かかります)を待つと、「パブリックIP」のIPアドレスでアクセスできるようになります。

 

キャプチャはAWS EC2のものですが、Ubuntu Server 18.04 であれば他のクラウドサービスでも使用できるはずです。

ConoHaやVultrなどでスタートアップアップスクリプトが使えるので試してみてください。

 

【参考記事】

 

【月額880円~】コピペして待つだけでCatapultのテストネットノードを構築できるスクリプト作ったよー https://nemlog.nem.social/blog/38376

 

動作確認

 

http://34.200.255.61:50080/chain/height.json にアクセスしてみてください。

そのノードが同期している最新ブロック高です。

 

APIまたはDualノードのスクリプトを使った場合は、http://34.200.255.61:3000/chain/height にアクセスしてみてください。

これも最新ブロック高を表示します。

 

(IPアドレスはサーバインスタンスを作るごとに変わるので、自分のサーバに割り当てられたIPアドレスで置き換えてください)

 

Symbol Explorer

http://explorer-xym.nemtech.network/

 

この数値に追いつけば、他のノードと最新ブロックまでの同期ができたということになります。

 

APIノードでは、/node/peers にアクセスすると、そのノードがつながっているノードの一覧が表示されます。

 

http://api-xym-3-01.ap-northeast-1.nemtech.network:3000/node/peers

 

ただし、この結果はアクセスしたノードがつながっているノードだけなので、

自分のノードがどのノードとつながっていて、この結果に表示されるかはわかりません。

 

SYM Node Explorer

https://nem2-node-explorer.firebaseapp.com/

 

こちらのサイトでは1時間に一回程度、各ノードを巡って見つかったノードを収集して一覧にしています。

時間が経てばこのサイトにも現れてくるので、IPアドレスや設定したFRIENDLY_NAMEで検索して確認してみてください。

 

 

また、http://34.200.255.61:50080/ にアクセスすると、デバッグ用の情報がおいてあるディレクトリも確認できます。

 

/debug にアクセスするにはスクリプトの USER と PSWD に設定されている値でログインできます。

ここには、symbol-server がエラーを出したときのログと、Dockerコンテナのログ、ハードウェア情報を保存するようにしています。

今後のテストネットのテストにおいて不具合調査のための資料としてコアデブへ渡せるような準備をしてみました。

 

 

技術的な解説(と言い訳)

 

全体的な処理は前回のスクリプトと代わりありませんが、流れとしては次の処理を自動化しています。

 

  • ノード動作用ユーザの作成
    ssh接続ポートの変更
    docker,docker-composeのインストール
    symbol-testnet-bootstrapのdocker-composeをサービス化
    任意のfriendly_nameを設定(変数に値を入れてください)
    任意のhostを設定(変数に値を入れてください)
  • デバッグ用情報をサーバログイン無しに確認できるような仕組みの構築

 

今回はsymbolというユーザー(USER変数を書き換えれば任意のユーザー名にできます)を作成し、

そのユーザーにコンテナの起動を実行させるようにしました。

Symbolノードのコンテナを実行するユーザーを局所化することで、

サーバ自体のセキュリティを高めることができました。

 

それに伴って Docker の userns-remap という設定を使って、コンテナ内部で作成されたファイルの所有者を、

コンテナを起動させるsymbolユーザーに割当たるようにしてみました。

 

前回のスクリプトでは data/ や state/ のディレクトリがコンテナ内部で作成されて、

ホストマシン側には root が所有者となって保存されていましたが、この問題を解決できました。

(ただし、どのコンテナを動かしてもsymbolユーザーのものにマッピングされてしまうので、

その点では問題がありますが、Symbolノード専用サーバとするならば割り切れるでしょう)

 

ここで、Amazon Linux2 のextraパッケージでインストールできるDockerのバージョンが18.x系でした。

この18.x系のDockerではuserns-remapという設定が使用できないようで、Dockerが起動しませんでした。

19.x系のDockerでしか使えない設定のようです(どのバージョンから使えるのかまでは調査していません)

 

今回のスクリプトがUbuntuだけの対応となっているのは、

Amazon Linux2でDocker 19.xのインストールがうまく行かなかったためです。

一応、yumパッケージでのインストールをコメントアウトしていれてはあるので、

こちらを使用すればCentOS7でならインストールできると思われます(が動作未確認です)

 

ここまではSymbolと関係なく、Dockerのインストールの話です。

まぁUbuntuだろうとCentOSだろうとAmazon Linuxだろうとそんなにパフォーマンスが変わるわけではないし、

建てちゃえばあとは維持するだけだから、簡単にセットアップできればええやろー

 

また、前回のスクリプトではDockerのコンテナログが、起動している間は無尽蔵に貯まってしまうという問題も秘めていました。

ログはrsyslogに出力するようにし、ローテーションするようにも設定しました。

 

そのログを公開ディレクトリにコピーすることで、サーバにログインせずともログをダウンロードできるようにしました。

テストネットの大規模テストに向けて、障害が起きたノードをログファイルをコアデブへすぐに渡せるような準備してみました。

ハードウェア情報もダウンロードできるようにしています。

今後どのようなテストが行われるのかまだわかりませんが、ログファイルがデバッグの役に立つことは間違いありません。

 

通常、サーバの情報を外部に公開するようなことはしない(ハッカーにセキュリティホールのヒントを与えてしまうため)のですが、

パスワードで保護もしてありますし、利便性を重視してみました。

最悪の場合はサーバインスタンスを削除してしまえばよいです。

 

このスクリプトはアップデートすることには対応していないので、

前回構築した方は、お手数ですが、サーバを初期化しての再築城をお願いします。

 

今後、新しい symbol-testnet-bootstrap 出た場合は、スクリプトのバージョン変数部分を置き換えることで対応できます。

(新しいバージョンが確認できたら、スクリプトも書き換えて対応しますが、自分で一足先にやりたい人はどうぞ)

 

ぜひ、試してみて、フィードバックをいただければ幸いです。

 

質問はコメント欄でも良いですし、Twitter @44uk_i3 に直接くれても大丈夫です。

よろしくおねがいします。

 

 

 

Comment
44uk_i3
44uk_i3
2020-02-27 10:19:55ID:176249

>>ねむのすけねむたろう::さん
築城の助けになったようで良かったです。
遅ればせながら記事を拝見いたしました。Kagoyaも良い選択肢かもしれませんね。
いろんなインフラでの築城記事が増えると助けになってよいかもしれません。

ねむのすけねむたろう
ねむのすけねむたろう
2020-02-22 16:08:59ID:175534

非常にわかりやすく解説委していただきありがとうございます。
私も築城してみましたので、記事にしてみたいと思います。

44uk_i3
44uk_i3
2020-02-12 13:02:59ID:173260

>>ちくぽか::さん
ありがとうございます。無事動いたようでよかったです。
今後、テストに関して何か動きがあるのではないかと思っていますので、
その際にもご協力・ご参加いただけたら幸いです!

ちくぽか
ちくぽか
2020-02-11 23:07:17ID:173160

やわらかチュートリアルありがとうございます。
これなら自分でもやれそうだと思ったので、peerで一つ作ってみました。

heihtが追いついていくとこがブロックチェーンっぽくて嬉しいですね。
貴重な体験をありがとうございました!

この記事を書いた人
Twitter: @44uk_i3