Azureでsymbolノードを立てよう
🎗️

Azureでsymbolノードを立てよう

タグ
AzureSymbol
公開日
July 5, 2022

こんにちは、松本です。

本日はAzureでsymbolのノードの構築方法を記事にしました。

かれこれノードの運用方法がわからず、悪戦苦闘しましたがなんとか身につけたので、読んでいただけますと幸いです。

AzureのポータルにアクセスしてVirtual Machinesを選択しましょう。

パソコンの中にキューブのデザインがVirtual Machinesです。

視覚的にもわかりやすいデザインで探すのが簡単でした。

image

Azureのトップページ(セキュリティ系の情報は見えないようにしました)

これ以降はセキュリティ上スクリーンショットが厳しいので、載せていません。

まず、ノードを立てるのに耐えれるAzureのVMを探しましょう。

Azureではversionの番号を数字で表現しますv2 ~ v5 (2022年時点)基本的にバージョンは新しい方を選ぶ必要があります。

新しく作るにあたって古いバージョンを作る意味はないそうです。(基本的に上位互換)

Azureで使用するスペックとしては

Dシリーズが汎用的なので、こちらを使用します。

vcpu数は8が推奨でそれに対応するメモリは32GiBになります

ですので、Standard D8ds v5(8vcpu 数、32GiBメモリ)を選択しました。

次にデータドライブを選択します。

基本的にはデータドライブは1024GiBを選択します。

サイズは750GiBが推奨なので1024GiBを選択(その以下が512GiB)次に最大IOPSは1500以上が推奨なのでデータディスクは最大でIOPSが5000なのでそのまま使用します。

この時VM削除時にデータドライブも削除するように設定します。

pemキーを新しく作る

pemキーは共通化するとなんやかんやで面倒なので、VM単位で区別します。

Bastionはなんかうまくいかなかったりするので、注意です。(勉強しないとな)

タグをつける

タグはつけましょうName: VMの名前Service: VMの使用用途Owner: 作成者

つける癖をお願いします。

さてこれでいろいろ設定できたので、VMを作成します。

リソースグループ

Azureではリソースグループ単位でサービスを管理できます。どのリソースとどのリソースが結びついているのか?という部分が確認できます。

VMに接続しましょう。

chmod 400 <keyname.pem>// ダウンロードしたpemキーです

ssh -i <keyname.pem>azureuser@IPv4

このノード接続はVMのメニューに「接続」という項目があるのでそこで確認できます。

さてそれでは接続しましょう。

VMにデータディスクをマウントします。

symbolのノードをどこで立てるか問題が発生しますが、推奨要件の750GBが必要なので、このデータ領域を確保する必要があります。

そしたら先ほどのデータドライブをマウントする必要があります。

ログイン

ssh -i <pemkey.pem> azureuser@IPv4address

ログインをしたらまずはどのようにデータディスクが適応されているのか確認します。

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

となります、このコマンドを実行するとVMのデータサイズを確認することができます。

azureuser@symbol-main-09:~$ lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda     1:0:0:0       1T
└─sda1             1024G /datadrive
sdb     0:0:0:0      30G
├─sdb1             29.9G /
├─sdb14               4M
└─sdb15             106M /boot/efi
sdc     0:0:0:1     300G
└─sdc1              300G

今こちらはデータディスクがマウントされている状態を示していますが、最初にVMを立ち上げた時はこのようになります。

azureuser@symbol-main-09:~$ lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda     1:0:0:0       1T
sdb     0:0:0:0      30G
├─sdb1             29.9G /
├─sdb14               4M
└─sdb15             106M /boot/efi
sdc     0:0:0:1     300G
└─sdc1              300G

こんな感じです。

ちなみに「sda」となっていますが、これは接続したタイミングや再起動したタイミングによって変わるそうです。

ここではsdaでした、この「sda」が「sdc」になることもあります。(今の所sdbは見たことがないです。)

ここでのsdaはデータディスクになりますが、そしたらsdcとはなんでしょうか?となります。

現在選択しているのはDシリーズの8vcpuのv5になります。ここの一時ストレージが300GiBになりますので、こちらが該当します。

そしたらここでデータディスクはアタッチされている(接続されている)ので次は使えるように(マウント)をできるようにしましょう。

マウントする

さてマウントをしていきましょう。

参考記事。

■望む結果

VMをリブートして再起動したときにマウントされていればOK(以前半角空白と全角空白があってうまくマウントされていなかった)

■パーティションparted ユーティリティを使用すれば、データ ディスクのパーティション分割とフォーマットを行うことができます。

データディスクをパーティション分割する必要があります。これは全部100%を使用するとしてもパーティションとして実施する必要があります。

azureuser@symbol-main-09:~$ lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda     1:0:0:0       1T
sdb     0:0:0:0      30G
├─sdb1             29.9G /
├─sdb14               4M
└─sdb15             106M /boot/efi
sdc     0:0:0:1     300G
└─sdc1              300G

さて、以前検索したときに確認した内容としてはsdaにありました。ですのでここはsdcではなくsdaにパーティションを作成する必要があります。

sudo parted /dev/sda --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo mkfs.xfs /dev/sda1
sudo partprobe /dev/sda1

こういった感じでパーティションができます。

azureuser@symbol-main-09:~$ lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda     1:0:0:0       1T
└─sda1             1024G
sdb     0:0:0:0      30G
├─sdb1             29.9G /
├─sdb14               4M
└─sdb15             106M /boot/efi
sdc     0:0:0:1     300G
└─sdc1              300G

こういうふうにsda1が1024G分のパーティションができていればOKです。

■マウント

まずはルートディレクトの下の階層にdatadriveというディレクトリを作成します。

sudo mkdir /datadrive

mount を使用して、ファイル システムをマウントします。

sudo mount /dev/sda1 /datadrive
再起動後にドライブを自動的に再マウントするために、そのドライブを /etc/fstab ファイルに追加する必要があります。 ドライブを参照する場合に、デバイス名 ( /dev/sdc1 など) だけでなく、UUID (汎用一意識別子) を /etc/fstab で使用することもお勧めします。 UUID を使用すると、OS が起動中にディスク エラーを検出した場合に、間違ったディスクが特定の場所にマウントされるのを防ぐことができます。 その後、残りのデータ ディスクは、その同じデバイス ID に割り当てられます。 新しいドライブの UUID を確認するには、blkid ユーティリティを使用します。

■新しいドライブのUUIDを確認する

sudo blkid

こちらはサンプルを編集しています。

/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sda1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"

最後の行の/dev/sda1はファイルディスクにマウントしたものです、そこのUUIDが一意の識別子なのでこのUUIDをコピーします(ダブルクォートは削除します)

次に、テキスト エディターで次のように /etc/fstab ファイルを開きます。

sudo nano /etc/fstab

この例では、前の手順で作成した /dev/sda1 デバイスに対して UUID 値を使用し、マウント ポイントとして /datadrive を使用します。 次の行を /etc/fstab ファイルの末尾に追加します。

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive xfs defaults,nofail 1 2

チェック

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

結果

azureuser@symbol-main-09:~$ lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda     1:0:0:0       1T
└─sda1             1024G /datadrive
sdb     0:0:0:0      30G
├─sdb1             29.9G /
├─sdb14               4M
└─sdb15             106M /boot/efi
sdc     0:0:0:1     300G
└─sdc1              300G

再起動チェック

sudo reboot
ssi -i <azure.pem> azureuser@IPv4
lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

結果

azureuser@symbol-main-09:~$ lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda     1:0:0:0       1T
└─sda1             1024G /datadrive
sdb     0:0:0:0      30G
├─sdb1             29.9G /
├─sdb14               4M
└─sdb15             106M /boot/efi
sdc     0:0:0:1     300G
└─sdc1              300G

こうなっていればOKです。

これでマウントはOKです。

symbol-bootstrapの設定

さてログインしている前提で話します。

ssi -i <azure.pem> azureuser@IPv4

ここからは/datadriveの下の階層で実施する話です。まずは設定を最新の状態にしましょう。

sudo apt update
sudo apt upgrade -y
sudo apt install -y jq

この状態で最新の状態になるようです。

で次にグローバルな環境にいろいろと入れていきます。

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh | bash
source .bashrc
nvm install  v14.12.0
curl https://get.docker.com | sh
sudo usermod -aG docker azureuser
sudo reboot
ssi -i <azure.pem> azureuser@IPv4
sudo systemctl start docker
sudo systemctl enable docker

ここまでくるとDockerが動いているみたいです。

sudo curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
npm install -g symbol-bootstrap

これでsymbol-boostrapがグローバル環境に入った模様です。

次にsymbol-bootstrapを使うのですが、一旦ディレクトリを作ります。

mkdir symbol-bootstrap
cd symbol-bootstrap

これで/datadriveの下にsymbol-bootstrapというディレクトリが完成しました。

次にmypresets.ymlを設定します。(どうせ後で変わるので内容は以下でOKです。)

nano mypresets.yml

書く内容

beneficiaryAddress: なんかアドレス入れてや
maxUnlockedAccounts: 50
minFeeMultiplier: 10

起動

symbol-bootstrap compose
symbol-bootstrap start -d

これでsymbol-bootstrapが起動できました。

次にデータベースとデータを最新の状態に移し替えます。これをすることで、ファイナライズやブロックの生成を簡潔にすることができます。

wget https://symbol-archives.s3.ap-northeast-1.amazonaws.com/archives/mainnet.databases.tar.gz
wget https://symbol-archives.s3.ap-northeast-1.amazonaws.com/archives/mainnet.data.tar.gz

ダウンロードができたら展開しましょう!

tar xvzf mainnet.databases.tar.gz
tar xzvf mainnet.data.tar.gz

これには時間がかかるので、別のシェルで並行作業をする方がいいかと思います(20分ぐらいかかる)お菓子持ってこようね。

ただこの作業をするだけで0ブロックから同期しなくていいので、マジで快適。

ダウンロードができたら一旦symbol-bootstrapを止めます

symbol-bootstrap stop

今あるdatabasesを削除します。

rm -rf target/databases

解凍したdatabasesをtargetの下の階層に移動します。

mv databases target

target/nodes/node/dataを削除します。

rm -rf target/nodes/node/data

解凍したdataをtarget/nodes/nodeの下の階層に移動します。

mv data target/nodes/node

起動します。

symbol-bootstrap run -d

これでhttpの野良ノードになります。

今日はここまで、こっからは移行するためやHttps化について書くのでそれは別記事にします。