みなりん*のブログ

内容はなんでもありです。暗号通貨に特化している訳ではありません。

NEM スーパーノードの構築 第3回(サーバ設定編 Ubuntu 16)

第1回・第2回と、DTIの提供するServersMan@VPSを例にして紹介させていただきました。今回はパトロン様のご提供にて、GMOVPSNEMのスーパーノードを構築させていただきました。本当にありがとうございます。

f:id:mizunashi_rin:20170218082433p:plain

こちらのサーバにて今回利用するプランの概要は次の通りです。

  • VPS スペック
    • CPU 仮想2Core
    • ディスク 50GB
    • メモリ 1GB
  • OS

多くの点で同じ作業となりますので、基本は下記の記事を参照してください。こちらには上書き部分を記載しています。

http://blog.minarin.moe/entry/2017/02/15/002342blog.minarin.moe

まずは前記事の1.〜2.9章までの記事を参照してスーパーノードを構築する部分まで終了させます。

前回のOSUbuntu14を使用しておりましたが、今回のOSバージョンではシステムのプロセス管理方法が新しいもの(systemd)に変わっております。一件似てる様に思えても、最新の管理方法を採用しておりますので、私自身初めてです。

では、ここから本題に入ります。基本的に以下で表示される章番号は、前の記事を上書きする形となります。

2. サーバ側の設定

2.10 自動起動の設定

本章2.7迄でスーパーノードとしてきちんと動作をしております。但し、サーバが何かしらの理由で再起動した場合や、NISやServantプログラムが単体で異常終了してしまった場合には、スーパーノードとして動いていない事となり報酬も得られません。

ここでは、サーバ起動時に自動でサービスをスタートされる事と、プロセスの異常終了時に自動的に再起動させる設定を行います。

まずは、NISサーバの自動起動ファイルを作成します。

以下の内容のファイル/etc/systemd/system/nem-nis.serviceをroot権限にて新規に作成します。

[Unit]
Description = NEM NIS Server
After = network.target

[Service]
WorkingDirectory = /home/nem/nemServer
ExecStart = /home/nem/nemServer/nix.runNis.sh
Restart = always
Type = simple
User = nem
Group = nem
LimitNOFILE=100000
[Install]
WantedBy = multi-user.target

もしも、エディター等不慣れな場合は、次の方法で作成する事もできます。ここでは、catコマンドを使って標準入力からファイルの内容を書き込みます。

root@localhost:/~# cd /etc/systemd/system
root@localhost:/etc/systemd/system# ls nem-nis.service
ls: cannot access 'nem-nis.service': No such file or directory
 (その名前のファイルやディレクトリが存在しないと言われます)
root@localhost:/etc/systemd/system# cat > nem-nis.service
 (ここにファイルに記述する文字列を一気にペーストします)
 (ペースト後カーソルが行頭に無い場合は一度リターンキーを押し改行します)
 (CTL-d を入力すると標準入力が閉じファイルが作成されます)
root@localhost:/etc/systemd/system# ls nem-nis.service
nem-nis.service
root@localhost:/etc/systemd/system# 

作成しましたら、chmod 755 /etc/systemd/system/nem-nis.serviceを実行し、実行権限を付与します。

同様な操作で、以下の内容のファイル/etc/systemd/system/nem-servant.serviceをroot権限にて新規に作成します。

[Unit]
Description = NEM Servant program
After = network.target nem-nis.target

[Service]
WorkingDirectory = /home/nem/nemServer/servant
ExecStart = /home/nem/nemServer/servant/startservant.sh
Restart = always
Type = simple
User = nem
Group = nem
LimitNOFILE=100000
[Install]
WantedBy = multi-user.target

作成しましたら、chmod 755 /etc/systemd/system/nem-servant.serviceを実行し、実行権限を付与します。

最後に追加した2つのファイルをsystemdに教えてあげる為に、systemctl daemon-reloadのコマンドを実行しておきます。

上記登録方法で登録した方法で起動テストを行いますので、現在動いているNISとServantのプロセスを停止します。

root@localhost:/# pgrep -fl org.nem  (※Ubuntsu14 では、-fa でしたので間違わない様に!)
459 java -Xms1G -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter 
477 java -Xms256M -Xmx256M -cp .:jars/* org.nem.rewards.servant.NodeRewardsServant 
 (※ここで表示された先頭の数字が後ろに続くプロセスのプロセスIDとなります)

root@localhost:/# kill -SIGTERM 459 477
 (又は)
root@localhost:/# pkill -SIGTERM -f org.nem

root@localhost:/# pgrep -fl org.nem (何も表示されなければプロセスは終了しています)
root@localhost:/# 

現在は、NISサーバ及びServantプログラムが停止している状態ですので、再起動時の自動起動の設定を行なった上で手動で起動させてみます。

root@localhost:/# systemctl enable nem-nis.service
root@localhost:/# systemctl enable nem-servant.service
root@localhost:/# systemctl start nem-nis.service
root@localhost:/# systemctl start nem-servant.service
root@localhost:/#

これで、問題がなければNISサーバとServantサーバは正常に起動しているはずです。 念のためにきちんと動作をしているか調べます。systemctlコマンドを使って調べる事も可能ですが、プロセスを見た方が簡単なので以下の様に確認します。

root@localhost:/# pgrep -fl org.nem (※Ubuntsu14 では、-fa でしたので間違わない様に!)
8873 java -Xms1G -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter 
8887 java -Xms256M -Xmx256M -cp .:jars/* org.nem.rewards.servant.NodeRewardsServant 
root@localhost:/#
 (10秒程待ち同じコマンドを実行します)
root@localhost:/# pgrep -fl org.nem
8873 java -Xms1G -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter 
8887 java -Xms256M -Xmx256M -cp .:jars/* org.nem.rewards.servant.NodeRewardsServant 

この時、コマンドを実行した時に先頭に表示されるプロセスIDが同一であれば正常に動いています。 もし、数字が異なっている場合は、一度下記の様にしてプロセスの起動を停止します。

root@localhost:/# systemctl stop nem-nis.service
root@localhost:/# systemctl stop nem-servant.service
root@localhost:/# systemctl disable nem-nis.service
root@localhost:/# systemctl disable nem-servant.service
root@localhost:/#

うまく動作しない場合は、もう一度2.10章で作成したファイルが間違ってないかどうか確認しながらやり直してみてください。 問題なく動いている様であればsystemdの設定は終了です。

2.10.1 ログファイルの設定変更(新章)

この時点でNISサーバとServantプログラムは正常に動いていますが、ログファイルに問題があります。 現状では、詳細なログファイルは再起動と共に捨てられてしまいます。更には通常のログは/var/log/syslogにリアルタイムに出力され続けます。NISサーバの出力するログファイルはかなり多いので、他のログは埋もれてしまう事になります。

ここでは、journalシステムの設定変更を行います。

まず、mkdir /var/log/journal コマンドにて、journalディレクトリを作成します。journald(正確にはsystemd-journald)はメモリー領域に詳細なログを貯めているのですが、このディレクトリを作るとその配下に情報を貯める様になります。実際のログファイルの閲覧には、journalctlコマンドを使います。

次に、syslogファイルにも出力しているので、これを出力しないようにします。設定ファイルは、/etc/systemd/jounald.confです。

root@localhost:/var/log# cd /etc/systemd/
root@localhost:/var/log# cp -p journald.conf journald.conf.org

 32行目を編集します
 32c32
 < #ForwardToSyslog=yes (編集前)
 ---
 > ForwardToSyslog=no (編集後)

root@localhost:/var/log# systemctl restart systemd-journald.service (jounaldの再起動)

tail -f /var/log/syslogコマンドにて、NISサーバ等のメッセージが流れる様に出てこなければ問題ありません。 そして、NISサーバ等のログは、jounalctlコマンドで参照する事ができます。リアルタイムにログを見るのであれば、journalctl -fと入力します(この場合サービスを指定していませんので、systemの全てのログが流れていきます)。

なお、jounaldが保存するログファイルは、デフォルトの設定ではディスクの全容量に対して10%以上になった場合、または空き容量が15%以下になった場合に、古いエントリーから順に削除されます。ここでは行いませんが、任意に容量を指定する事も可能です。

あとがき

いかがでしたでしょうか。同じOSでもバージョンによってこれだけ大きく変化をしていきます。 プロセス管理方法は、時代的に他のUNIXでも SysVinit → upstart → systemd へと進化をしています。

今後は、他のOSをレンタル出来る機会があれば、また記事を作成するかもしれません。 そして次回は、OS回りの設定を書きたいと思っています。