Fujitsu Cloud Direct ブログ

初心者エンジニア向け技術ブログ

【第二回】非エンジニアがクラウド上にMinecraftサーバーを構築するまでの記録(完結)

こんにちは、 id:h1r0k15454k1 です。
前回の記事に続き、今回は実際のMinecraftサーバー構築をした上で、負荷試験をやっていきたいと思います。

作業環境

  • Macを使っています。
  • terminal.app(Mac純正のターミナル)を使って作業します。

秘密鍵の設置

ユーザーホームディレクトリ(~/)に.sshというディレクトリを作成します。
秘密鍵を配置する用のディレクトリです。

% mkdir ~/.ssh

作成したディレクトリに、秘密鍵を移動させます。

% mv ~/Downloads/秘密鍵.pem ~/.ssh/秘密鍵.pem

※先ほど作成したディレクトリ「.ssh」に移動するように指定してください。

パーミッションの変更

.sshディレクトリの権限を変更します。

% chmod 700 ~/.ssh

証明書ファイルのパーミッションを変更します。

% chmod 600 ~/.ssh/証明書.pem

接続

証明書の設定ができたところで、サーバーに接続します。

% ssh -l root -p 22 -i ~/.ssh/秘密鍵.pem ホスト名

初回はフィンガープリントの確認が表示されるため、yesを入力します。
また、パスフレーズを聞かれるため、入力します。

OpenJDKのインストール

これからインストールするMinecraftサーバーはJavaで稼働します。
そのため、Javaの実行環境であるOpenJDKをインストールします。

% sudo apt update
% sudo apt install -y openjdk-17-jdk

インストールが完了したら、バージョン確認コマンドを実行し、インストールされていることを確認します。

% java --version

OpenJDKのバージョンが表示されたらインストール完了です。

PaperMCのダウンロード

こちらから、PaperMCのダウンロードリンクをコピーします。
現時点での最新URLは https://api.papermc.io/v2/projects/paper/versions/1.19.4/builds/546/downloads/paper-1.19.4-546.jar となります。

次に、/rootの上に/minecraftというディレクトリを作成し、その中にPaperMCをダウンロードします。

% mkdir /root/minecraft
% cd /root/minecraft

ダウンロードが完了したら、lsコマンドでファイルがダウンロードできていることを確認してください。

% ls

PaperMCの実行/EULAの同意

いよいよ、サーバーを起動したいと思います。

% java -Xms7000M -Xmx7000M -jar paper-1.19.4-546.jar

そうすると、「You need to agree to the EULA in order to run the server. Go to eula.txt for more info.」というメッセージが表示され、起動に失敗すると思います。
これはEULA(End User License Agreement)といって、利用規約に同意する必要があるということを指しています。
再度lsコマンドを入力すると、eula.txtというテキストファイルが作成されていると思いますので、そちらを編集し、利用規約に同意します。

% ls
% vi eula.txt

vi(テキストエディタ)が起動しますので、iを押して挿入モードに切り替えた後、3行目のeula=falseの部分をeula=trueに書き換えて、Esc→:wq→Enterで上書き保存します。
上書き保存が完了した後、再度サーバーを起動します。

% java -Xms7000M -Xmx7000M -jar paper-1.19.4-546.jar

これで起動完了です。
グローバルIPをMinicraftソフトのサーバーアドレスに入力するとMinecraftサーバーにログインすることができるようになります。

負荷検証

では、早速構築したサーバーで遊んでいきたいと思うんですが、折角なら、どの程度の負荷に耐えることができるのか、検証をして行きたいと思います。
というわけで、これまで数多のMinecraftサーバーに負荷をかけてきた有識者Aさんにご協力いただき、かけられるだけの負荷をかけていただきました。

効率的に負荷をかけてもらうために、Aさんに管理者権限を渡しました。
SSHした後、minecraftディレクトリにops.txtを作成し、管理者権限を渡したい人のユーザー名を記入し、プロセスを再起動します。

% vi /root/minecraft/ops.txt

テキストファイルにAさんのユーザー名を入力した後、

:wq

でテキストエディタを終了し、サーバーを再度起動することで、管理者権限を渡すことができます。
というわけで、検証をしていただきました。

第一ラウンド:村人大量出現

同一座標に大量に村人を設置することで、村人同士の接触が高速に行われ、どの程度負荷を与えることができるかを検証いただきました。
結果、なんの問題もなく処理を継続しました。

勝者:FJcloud-V!

第二ラウンド:ニワトリ大量出現

村人に次いで、ニワトリを大量設置しました。
ニワトリは、消滅時に鶏肉などをドロップする影響で、若干村人よりも処理が重くなることが予想されます。
結果、変わらず問題なく処理されました。

勝者:FJcloud-V!

第三ラウンド:ボート大量密集

ボートを一箇所に大量密集させた後に開放することで、ボート同士が瞬時に大量にぶつかり、高負荷を与えることができます。
結果、こちらも難なく処理。

勝者:FJcloud-V!

第四ラウンド:ネザー/オーバーワールド高速往復

ネザーゲートを設置し、ネザーとオーバーワールド間を高速往復することにより、負荷を与えようとしていただきました。
しかし、ネザーに移動した際の描画があまりにも高速で、検証にならず、FJcloud-Vの不戦勝。

勝者:FJcloud-V!

第五ラウンド:スカルクセンサー大量同時反応

音に反応して処理を行われるスカルクセンサーを大量に平面に設置し、その上に音符ブロックを設置することで、大量のスカルクセンサーを反応させ、負荷向上を狙いました。
しかし、こちらも難なく処理。

勝者:FJcloud-V!

第六ラウンド:オーバーワールド高速移動

エンダードラゴンを討伐後、エンドで手に入れることができるエリトラという高速移動に使用する装備を用い、オーバーワールド内を高速で移動することで、大量のマップを同時に生成させ、負荷向上を狙いました。
こちら、カクつくものの特に落ちることはありませんでした。負荷が一定以上になる前に処理を止めている印象を受けました。

勝者:FJcloud-V!(?)

第七ラウンド:松明大量設置

松明を大量に並べることで、光の処理を大量に行わせ、負荷向上を狙いました。
結果、しばらくして処理が耐えられなくなったのか、サーバーがダウンしました。

勝者:Aさん!

まとめ

というわけで、サーバー構築し、負荷検証として段階ごとに処理を重くしていってもらったのですが、6段階耐えることができました。
Aさんいわく、普通に遊ぶ分には一切問題にならないレベルとのことで、特にネザーなどのワールド間を移動する際の描画の速度がとても速いとのことでした。
カタログ上、現在運用している近いスペックの物理サーバーよりやや負荷に強い印象といった形だそうです。

これまで、ゼロからMinecraftサーバーを構築したことはなかったので、OpenJDKのインストールなど、やったことがない対応をいくつかやれたので、少しサーバーに詳しくなれたかな? と思いました。

あと、マイクラ民の皆様はご存じと思いますが、Minecraft Mod/Pluginを対象としたマルウェア“fractureiser”にはご注意くださいね!