Raspberry Pi 4B でちゃんと動くMinecraft Serverを作りたい

Raspberry Pi の限界に挑戦するわよ

Natsu-dev

大晦日の深夜に RTA in Japan を視聴しながらの更新です。今ちょうどやってた Cook, Serve, Delicious! 3?! というゲームの RTA メッチャ面白かったです。

今回ですが、Raspberry Pi 4B でもプレイ時にストレスの少ない自宅サーバーを構築できないものか…と色々試してみて、とりあえず形になったので書き残しておこうという感じです。

サーバー構築の方針

ゲーマー仲間とマイクラのマルチで一緒に遊ぶために24時間稼働の自宅サーバーを構築することにしたのですが、当初使っていた中古の Intel Core i7-3770 搭載のデスクトップPCでは、動かしっぱなしにするとなると電気代が気になる上に、だいぶ使い込まれていた中古なため外出中にトラブルが発生する可能性がありました。

なので、以前に新品で購入して使っていたラズパイを使うことにします。

過去にこのブログでは『CUIの画面で何とかしてスクリーンショットを撮りたい』、OUCRCでは『ぼっちは寂しいのでプログラミングで彼女(概念)を生み出してみた』などで登場したものです。

余談ですが、OUCRCの方の彼女(概念)の記事が、知らないうちに部内の記事コンテストで技術部門 3位に入賞していたようです。嬉しいです。どうして。

 

Raspberry Pi のメリット、デメリット

デスクトップPCと比較したときの Raspberry Pi でマイクラ自宅サーバーを構築するメリットは以下のようになると思います。

  • 消費電力が小さい
  • 置き場所に困らない
  • 安価で手軽に構築できる

逆にデメリットは以下のような感じでしょう。

  • CPU、メモリなどの基本的なマシンスペックが超厳しい
  • Micro SD カードが起動ドライブのため読み書きが遅く、また耐久性が心配

私の場合はデスクトップPCのサーバーが中古のため信頼性があまり高くないというのもラズパイを選択した理由になります。

各種デメリットへの対処

ということで、ラズパイでサーバーを構築する上で発生するデメリットにどうにか対処する方法について考えていきます。 といってもソフトウェア的な部分だけではどうにもならないレベルで性能不足なので、一部追加のお買い物をしてラズパイをサイボーグ化するところまでやります。本気出していこうな。

① CPU、メモリなどの基本的なマシンスペックが超厳しい

正直に言ってコレが一番やばいです。マイクラサーバーの構築に関して言えるのは、低消費電力のためにそのマシンスペックを完全に犠牲にしているのだぞということです。覚悟は良いか…?

仕方ないので可能な限りの軽量化を試みるのですが、軽量化のために検討できる部分としては OS をどうするかとサーバーアプリケーションをどうするかという話になってくると思います。

OSの検討

例えば軽量な Linux のディストリビューションと言えばArch Linuxとかがありますね。必要なモンは自分で入れてセットアップしてくれよな! というシンプルイズベストを地で行くような軽量ディストリビューションです。

実は Arch Linux のウェブドキュメントでもサーバーとしての運用が十分に可能であることが示されており正直メチャクチャ魅力的だったのですが、結論から申し上げると導入難易度が高いという点でひとまず先送りにしました。ドキュメントがとんでもなく充実しているので、もっと勉強して実際に使ってみて、ある程度ちゃんと扱えるレベルに達したら導入してみようかと思います。

ということで、今回は導入が比較的簡単でラズパイに最適化されている Raspberry Pi OS Lite を導入することにします。適当な Micro SD カードに Windows から Raspberry Pi Imager という公式のツールで OS を焼く感じです。儂にデスクトップ環境は必要ないわい!!!という強い意志のもと、Lite 版を選択している次第です。全身全霊 CLI 操作の翁。

サーバーアプリケーションの検討

サーバーアプリケーションには公式サイトから配布されているアプリケーション以外にも、いくつかの亜種的なものが存在します。代表的なものとして BukkitSpigot と呼ばれるものがありますが、今回は比較的軽量であるという Paper を導入してみようと思います。

この Paper ですが、Spigot の派生であるため Spigot で使えるプラグインは同様に使えるようで、元々 Spigot で立てていたサーバーからの移行も可能らしいです。また開発コミュニティも活発で、最近大変な問題になっている Log4J 関連の脆弱性への対応も素早い印象です。そういったところから、個人的に扱いやすそうだと感じたため選択しました。

② Micro SD カードが起動ドライブのため読み書きが遅く、また耐久性が心配

マイクラサーバーって結構ドライブへの読み書きが多いと思うので、流石にそういった部分を読み書きが高速ではない Micro SD カードに任せるというのはしんどそうです。なのでこれに関しては追加のお買い物をして力ずくで解決していくのですが、具体的にはラズパイを SSD ブート化して Micro SD を使わない構築にしようという形になります。

私の場合は手元に余っている 240GB の SATA SSD があったのでこいつを使おうと思います。中古 PC にくっついてたやつなので型番とかはわかりません。

SATA はそのままではラズパイに接続できないので、SATA - USB 3.0 変換アダプタを購入しました。Logitec の LHR-A25SU3 という型番のものです。

この変換アダプタを用いて PC に接続してみたところ、普段使っている外付け SSD と同等の読み込み速度、半分以上の書き込み速度が出ていていい感じでした。

↑ 今回使用する SSD + 変換アダプタの速度

↑ Samsung 製外付け SSD (MU-PA500B/IT) - USB 3.0 接続

 

いやまぁ、普通に USB 3.0 接続の外付け SSD ドライブを買うのもアリです。というか冷静に考えなくてもそっちの方が素直でよろしいんじゃないか?

実際に構築する

ということで用意したモノは以下のようになります。

  • Raspberry Pi 4B (4GB RAM)
  • Raspberry Pi 用ケース
  • 電源ケーブル
  • LAN ケーブル
  • SATA - USB 変換ケーブル
  • 2.5inch SATA SSD

サーバーそのものは以下の構成で構築しています。

  • OS: Raspberry Pi OS Lite 64bit
  • Server: Paper 1.17.1

サーバーアプリケーションの起動時に、 java コマンドのオプションに -Xmx2560M と指定することで最大メモリ領域として 2.5GB を確保するようにしています。私のラズパイの実装 RAM が 4GB( htop コマンドで確認したところ実際に利用可能な領域は 3.75GB)のため、多少 OS やその他のバックグラウンドプロセスのために余裕を持たせる形としています。

2.5GB ではなく 3GB の割り当てでも良かったのですが、サーバーの挙動が軽くなるどころかむしろ逆にちょっと不安定になった 気 が す る ので控えめの設定です。

また、サーバーの状態を監視するための Discord ボットを導入して動作させています。

私の家はIPアドレスが固定ではないため、ダイナミック DNS サービスである MyDNS を利用しています。定期的に更新作業が必要です。めんどくさいのでまだやっていませんが追々自動化します。

動作の様子

実際に動かしてみました。 ちなみに私は夜見れなが好きです。マジで可愛い。 これのためにスイパラにじさんじコラボカフェ行きました。

誰も入っていないアイドルの状態ではこんな感じです。

思ったよりは CPU 使用率が高くないので意外とどうにかなるんじゃないか…?という期待をしているところです。 プレイヤーが増えたらどうなるのかは未知数です。年末年始だし集まってくれるといいなぁ。

起動時にはやはり性能不足のせいかラグくなり、オーバーロードが発生している警告が出てきます。 ですが起動が完了して安定してしまえば、それ以降は特に警告など表示されることなく動作しているようです。

気になる CPU 温度ですが、冷却ファンとヒートシンクがあれば 室温 20℃ で大体 40℃ ちょいで安定するようです。

かなり前に検証したモノなので記憶が怪しいですが、ファンなしだと温度は 60℃ 程度まで上がったような気がします。 したがって、大したヒートシンクを載せていないのであればファンは必須だと思われます。

結論

ラズパイは色々やることちゃんとやればマイクラサーバーは動かせます。試しに1ヶ月ぐらい連続で稼働させてみようと思うので、何かあれば追記、編集などしようと思います。頼むから燃えないでくれよな。