見出し画像

パルワールド身内マルチサーバー保守記_01

はじめに

2024年1月19日にsteamで早期アクセスとして発売されたゲーム、パルワールド。
ゲーム友達と会話の流れで「マルチする?」ということになり、軽く調べたらSteamCMDというのを経由してlinuxサーバを自前で立てることもできる事が分かった。

現職AWSインフラエンジニアの血が騒ぎ、ほなAWSでやるかと去年資格取得のために用意したメルアドでアカウントを立ち上げ、EC2をポチるのであった。


このエントリは、普段仕事で触っているAWSを友達のために使ってみたらなんか興が乗ってしまい、ちまちまと小賢しい仕組みを仕込んでゲーム本編とはまた違った側面で面白がっている様子を日記風に振り返るものです。
テック記事ではないので直接の知見には不十分で、全体的に不親切な単語選びになりそうですが、クラウドインフラに携わる人がちょっとニヤニヤできればいいなという狙いでやっていきます。

ゲーム本編の面白さ?それこそいろんなところで賑わっているので特別言及はしません。おもろいです。

初日:20240120

土曜日。雑談しながらAWSアカウントを開設。
何はともあれEC2、という所で、AmazonLinux2023で起動しsteamcmdの導入から進めてみた。が、yumで管理されてないっぽかったりwgetでDLしても必要パッケージが足りなかったりでなかなかDLまで進まない。普段インフラに偏りすぎてプロビジョニングに触れる機会が少なく、こういうときもエラー文を読んで何が起こってるのかをうっすら把握する程度に留まりがちだ。

「ごめーん初期設定グダってる」などと会話しつつ、最終的にはAmazonLinux2023を諦め、aptでの導入案内のあるubuntuで作り直したらあっさり全部通った。一時間ドブに捨てたぞ畜生。

いったん雑談していた友達にアクセスしてもらいつつ、もうちょい作り込むかと思い自動起動設定(systemctl)の仕込みと定期アプデチェックのスクリプトをcronで突っ込んだ。cronをEventbridge+SSM run commandに任せる案もあったが面倒さが勝った。

あとはオマケとして、AWS Backupによる日次AMI取得。こういうのは何かの拍子に巻き戻したくなるもんだ。
もうひとつついでに、Eventbridge Schedulerで定期起動と定期停止を実装。身内で遊ぶ分には24時間稼働は流石にもったいないので、夕方から深夜にかけてだけ動いていればいいやのスケジュールにした。

とりあえずお試しでという所で、インスタンスタイプt3.largeのEBS 20GB。
ふたりで遊んでいる時の負荷はというとCPU30%とmemory70%くらいの消費か?クレジット消費しているので、遅かれ早かれ力尽きそうだった。
紹介記事だと、割と2vCPU/8GiBで進めてるっぽく。t4g.largeに世代上げするか、cpu気にしてc6g.xlargeにしてしまうかで迷う。t4g.xlargeだとむしろメモリ過多っぽく見えるんだよな…

二日目: 20240121

悩んだ末、やっぱりインスタンスの世代は上げたいよなという気持ちになる。ただt3系からt4g系へはアーキテクチャの変更を伴うためそのまま切り替えはできない。サーバのセーブデータを移送できるかとちょっと調べたがめぼしい記事は無かったので全部やり直す方向にした。
というわけで友人へ相談。「いっかい島爆破してもいい?」

どっかん


結果としてアーキテクチャ変更作戦は失敗した。なんか初手のapt updateでパッケージ見つけられなくて止まるんだけど!?なんなんこのAMI(ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-arm64-server-20231207)?

先述の爆破、とはいいつつまだ止めたりはしてなかったが、まあゲーム的にも強くてニューゲームするか、という流れになり単純に作り直し。どちらにしろt3は未来がなさそうだったので、m6a.xlarge採用と相成った。

CPUは20%前後。メモリは…ゲーム稼働時間に応じてちゃんとひっ迫している

$ free
               total        used        free      shared  buff/cache   available
Mem:        16006312    14053084     1264284         828      688944     1666032
Swap:              0           0           0
$ w
 15:40:00 up  9:12,  0 users,  load average: 0.94, 0.88, 0.78
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
$

ゲームの方はというと、参加者が増え3人に。

三日目:20240122

月曜日。サーバー参加者がさらに一名追加。
一日目に仕込んだ仕組みがうまくいってるかどうしても心配になるが、自分の知らないところで他のメンバーがふつうに遊んでいる様子から間接的に無事を知る。うむ、血の通った運用仕事の風景だ(?)

このゲーム職場でもちまちま話題になっていて、マルチサーバの身内運用の話でもちょっと盛り上がった。流石ご同業、といったところで、テラリアのサーバを運用している同僚がいたりする。
その時の話題でswap追加しといた方がいい、という話になり、せっかくだしやっとくかと着手した。

swap追加、そこそこ馴染みのある作業だけど頻度が少なく、毎回記事検索しながらやっている。

~# sudo fallocate -l 1G /swapfile
~# ls /
bin   dev  home  lib32  libx32      media  opt   root  sbin  srv       sys  usr
boot  etc  lib   lib64  lost+found  mnt    proc  run   snap  swapfile  tmp  var
~# sudo chmod 600 /swapfile
~# sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=783df150-b75c-44c0-800b-1830df9bc1a0
~# sudo swapon /swapfile
~# sudo swapon --show
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2
~# free -m
               total        used        free      shared  buff/cache   available
Mem:           15631        4567        5034           0        6029       10777
Swap:           1023           0        1023
~# w
 13:48:17 up  4:38,  1 user,  load average: 0.16, 0.40, 0.41
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ssm-user pts/1    -                13:43    0.00s  0.02s  0.02s sudo -i

よいしょ~

これで快適性が増せばいいなあ

四日目:20240123

火曜日。サーバー参加者はさらに2名増え6人で遊ぶ場所に。盛況だ。

そしてこの日、4~5人で5時間くらい遊んでいるタイミングでスッとゲーム画面がロード中になり、サーバー接続失敗。
数分待って自動復旧したが、まあなんかあったんだろうなとサーバーへ潜った。
/etc/log/syslog 眺めたらOOM。やっぱメモリ枯渇か。

Jan 23 15:13:22 ip-xxx-xxx-xxx-xxx kernel: [22989.139386] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=palworld-dedicated.service,mems_allowed=0,global_oom,task_memcg=/system.slice/palworld-dedicated.service,task=PalServer-Linux,pid=444,uid=1002
Jan 23 15:13:22 ip-xxx-xxx-xxx-xxx kernel: [22989.139455] Out of memory: Killed process 444 (PalServer-Linux) total-vm:23032560kB, anon-rss:15597300kB, file-rss:3072kB, shmem-rss:0kB, UID:1002 pgtables:37640kB oom_score_adj:0
Jan 23 15:13:22 ip-xxx-xxx-xxx-xxx systemd[1]: palworld-dedicated.service: A process of this unit has been killed by the OOM killer.
Jan 23 15:13:22 ip-xxx-xxx-xxx-xxx systemd[1]: palworld-dedicated.service: Killing process 621 (Backgro-rker #1) with signal SIGKILL.
Jan 23 15:13:24 ip-xxx-xxx-xxx-xxx systemd[1]: palworld-dedicated.service: Failed with result 'oom-kill'.
Jan 23 15:13:24 ip-xxx-xxx-xxx-xxx systemd[1]: palworld-dedicated.service: Consumed 5h 1min 47.045s CPU time.
Jan 23 15:13:24 ip-xxx-xxx-xxx-xxx systemd[1]: palworld-dedicated.service: Scheduled restart job, restart counter is at 1.
Jan 23 15:13:24 ip-xxx-xxx-xxx-xxx systemd[1]: Stopped Palworld Dedicated Server.
Jan 23 15:13:24 ip-xxx-xxx-xxx-xxx systemd[1]: palworld-dedicated.service: Consumed 5h 1min 47.045s CPU time.
Jan 23 15:13:24 ip-xxx-xxx-xxx-xxx systemd[1]: Started Palworld Dedicated Server.

昨日追加したswapもしっかり食いつぶしてました。
CPU負荷は35%前後で推移しているので、とにかくメモリ食いなんだなという印象。
m6a.2xlargeにしてメモリ32GiB確保も視野に入るところだが…まだケチりたい気持ちがあるのと、再起動後もデータの巻き戻り等は発生してなかったのでいったん許容してもらおうかなという気持ちで現状維持。

さて。メモリ枯渇のついでにストレージも眺めてみたら、こちらもヤバかった。

~# df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/root         15G   13G  2.1G  86% /
tmpfs            7.7G     0  7.7G   0% /dev/shm
tmpfs            3.1G  848K  3.1G   1% /run
tmpfs            5.0M     0  5.0M   0% /run/lock
/dev/nvme0n1p15  105M  6.1M   99M   6% /boot/efi
tmpfs            1.6G  4.0K  1.6G   1% /run/user/0

初日のストレージ使用が6.8Gほどだったので油断していたが、ゲームの進行なり参加者の増加なりで着実に圧迫していく様子。そりゃそうか。
ストレージ溢れはマジで何もできなくなるので、大人しく拡張に着手。

作成時のストレージはgp2 15G。gp3を選択するのを忘れていたのでこちらの変更も一緒にやってしまうことにした。オンラインで変更できるの便利だ。
(仕事ではterraformで構築している一方で今回は全部コンソールでぽちぽち作業しており、随所で変な凡ミスに見舞われる。横着は良くないね)

~# sudo growpart /dev/nvme0n1 1
CHANGED: partition=1 start=227328 old: size=31229919 end=31457247 new: size=62687199 end=62914527
~# resize2fs /dev/root
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 4
The filesystem on /dev/root is now 7835899 (4k) blocks long.

~# df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/root         29G   13G   17G  43% /
tmpfs            7.7G     0  7.7G   0% /dev/shm
tmpfs            3.1G  848K  3.1G   1% /run
tmpfs            5.0M     0  5.0M   0% /run/lock
/dev/nvme0n1p15  105M  6.1M   99M   6% /boot/efi
tmpfs            1.6G  4.0K  1.6G   1% /run/user/0
~# date
Tue Jan 23 16:14:10 UTC 2024
~#

よいしょ~

他のメンツがわいわいVCして遊んでいるのをBGMに作業していたが、処理中に重いとか止まったとかが全くなかった。オンライン拡張って便利だねと改めて思うのと同時に、「無停止デプロイの恩恵ってこういうことか」とちょっとエモくなった。

to be continued…?

サーバー運用、その気になったらいくらでもこだわれるなあというのを実感して普段の仕事に思いを馳せつつ、障害がちまちまと発生してモグラ叩きをやるのも仕事の日常風景だなと遠い目になった。

そして…友達のためだからか、はたまたインフラ屋が向いてるのかは知らないが、諸対応は割と楽しさを感じている。\趣味と実益兼ねまくり/

サーバー参加者はもうちょい増えそうだし、対応は概ね行き当たりばったりなのでどうせまた何か障害を踏みそうな気もする。
話のタネになりそうな事があったらまた日記化するかも。


この記事が気に入ったらサポートをしてみませんか?