マインクラフトをマルチサーバ運営する方法について語ってみたいと思います。
マルチサーバと言っても、マルチワールドやマルチができるサーバのことではありません。マインクラフトサーバ(bukkitやspigotなども同様)を複数起動して運営することです。単一の物理サーバに複数のマインクラフトを立ち上げる事もあるし、物理サーバを分けて運営することもできます。物理サーバを分けた場合は、データ連係をどうするかが多少面倒になりますね。
そもそもなんでマルチサーバ運営を考える必要があるのか?
- 負荷分散。PvPサーバ運営者が気にする点かな。
- 複数管理者連携。
- バニラサーバとModサーバ運用←私はこれ
- その他(ログイン人数を合算させたりなど、見た目上一つにしたいとか)
ちなみにかなり面倒なので、心して掛かった方がいいです。
以下、考えなければならないことと、実現方法です。
目次
ベースシステム
サーバを束ねるには、親となるシステムを構築する必要があります。マインクラフトクライアントからはそこにログインし、そこから適切なサーバへ振り分けられます。
- マインクラフトサーバ
bukkit…プラグインが豊富なサーバ。広く使われてるので情報が多く扱いやすい。
spigot…bukkit互換の軽量サーバ。後述のcauldron、BungeeCordとの親和性が高い。
forge…Modサーバを作るためのフレームワーク。Modの前提となっている場合が多い。また、クライアント側にもModが必要となるので、参加者側のハードルが上がる。当然、bukkitプラグインなどは使えない。
cauldron…spigot+forge。以前はMCPCという名称だった。 - マルチサーバ管理
BungeeCord…複数のマイクラサーバを連動させることができる。見た目上はバニラでは無いサーバに見えてしまいますが、ログイン先がバニラならバニラで入れます。サーバ間移動も相手がオフラインだったり、前提Modが必要だったりする場合は移動しないよう制御をしてくれます。
BungeeCordの説明は過去に書いてるのでそっちを見て下さい。
単純に入れればマルチサーバ化できる訳では無く、前提がいろいろあるので注意が必要です。
データ連動
サーバが違うとデータも別扱いです。お金、経験値、アイテムなどです。
ちなみに同じデータファイルを複数のサーバで共有した場合、競合が発生して高い確率でデータが壊れるか、書き込みができなくなります。なので、通常のデータ連係はデータベースを使わなければなりません。
幸いにもbukkit系のプラグインはデータベースに対応しているものが多いので、それを使っていきましょう。データベースの種類はSQLiteかMySQLがほとんどです。
MySQLの方がサーバを建てなければならないなど難易度が高いですが、使い方を覚えてしまえば連携のしやすさはこっちが容易です。
SQLiteはサーバが必要無い為、使用するのは容易ですが、サーバが無い分、マルチサーバからアクセスするのが難しいです。っていうかそもそもどういうやり方がいいのか想像付きません。
私の管理しているサーバでは以下の連動ができることを確認してます。それ以外もできるかもしれませんが、未検証です。
- お金
CraftConommyを使ってます。元々Essentialsを使ってましたが、これはDBに対応してませんね。CraftConommyはDBに対応してるし、Essentialsのお金データをインポートできるので楽です(他の経済プラグインも対応してます)。
なお、変換の際にプレイヤー名にハイフンかアンダーバーが使われてると勝手に変換される(どちらかというとEssential側の仕様)ので、注意して下さい。 - mcMMO、Jobs
これらもDBに対応しており、複数サーバから同時にアクセスできます。私のサーバはJobsを連携してませんが、これはゲーム性の観点でしてないだけで、技術的にはできます。
注意しなければならないのは、例えばTownyの様なプラグインはデータ連係できますが、サーバ間データ連動ができないので問題が起きます。例えばサーバ二カ所でTownyを起動した場合、税金は二重課金されます。さらにお金が連動できていなければ片側のサーバでお金不足になる事もあります。
HarkEyeなども連動できそうですが、怖いのでやってません。
念のため補足しておきますが、DB連動できたとしてもお互いのトランザクション処理がちゃんとできているかは別問題です。上記のレベルであれば今の所問題は起きてません。
機能連携
ゲームでの機能連携ですが、だいたい以下の方法でできます。詳しくは過去のコンテンツを見て下さい。
- Dynmap
Dynmap-MultiServerを使う事で連動できます。 - 投票
BVotifierでできます。Votifierと連動もできます。 - チャット
CloudChatというツールでできます。私は使いたいと思ってますがまだ使ってません。ローマ字変換とか無いので。 - サーバ間ゲート
TeleportSignsでできます。他にもHomeコマンド連動とかできるのも有るみたい。
運用
マルチサーバを運用する上でいくつか気になることもあると思います。思いつく限り書き連ねてみようと思います。
- ロビーとなるサーバは安定させるべき
単体でロビーサーバがあるのがベターですが、Modサーバなど安定しないサーバがある場合、ログインできなかった場合の待避サーバが設定できますので、そこにロビーサーバなどの安定したサーバを指定すべきです。そうすることで一カ所のサーバが死んでもプレイヤーは別のサーバで遊ぶことができます。 - BungeeCordの扱いが難しい
これが止まるとどのサーバにも入れません。また、管理者コマンドが少ないので、何かあったときに自由がきかないでやむを得ず再起動しなければならなくなる曲面も多いです。 - ワールド名は同一にしない。
同じ名前のワールドがあるとおかしな動きをする物があります。特にデフォでworldという名前が使われているので、ここがネックになる場合があります(server.propertiesで変えられます) - サーバ同士の連動性
例えばMySQLのDBサーバを建てた場合、マインクラフトサーバを上げたまま、DBサーバを止めてはダメです。ちゃんと、
マインクラフトサーバ停止→DBサーバ停止→DBサーバ起動→マインクラフトサーバ起動
という順序を踏みましょう。停止は多少前後しても影響は少ないですが、起動は前後を間違えると確実にエラーが多発&ゲームに影響がでます。
ちなみに私はJobArrangerというジョブコントローラを使って前後を管理してます。
参考になりました、ありがとうございます
いいね小並感