はじめに
こんにちは、KMC4回生のsegreです。最近は部内のサービスを破壊することにハマっています。今回は部内の主要サーバの破壊と創造を行ったので事の顛末を紹介します。
マシンの紹介
KMCには主に4台のデスクトップPC内でLinuxサーバを動かしています。4台をさくっと紹介します。 デスクトップPCはすべてサーバーラックに収められています。
shourin
最下段の左にあるのがshourinというマシンです。2022年に導入されたミドルレンジPCです。主に実験用/初心者用という位置づけになっています。
nozomi
最下段の右にあるのがnozomiです。2021年に導入された、当時最高のCPUとグラボを盛り込んだPCです。メモリは100Gあります。主に機械学習やメモリを使うゲーム用のサーバーになっています。
tamanegi
shourinとtachyoの上にある中央が青く光った箱がtamanegiです。元はデスクトップPC用のケースに入っていましたが、ラッキングしたかったのでラックマウントに対応したケースに詰め替えました。2019年から稼働しているこの中で最も古いPCです。メールサーバーやLDAPサーバー等重要なサーバーが収められています。
sakashita
tamanegiの上にある1Uのラックサーバーがsakashitaです。こちらはOBの方に譲っていただいたものです。HDDベイが大量にあるため、ストレージサーバーとなっています。メモリも潤沢であるため複数のゲームサーバーが動いています。
Proxmoxクラスタを組んだ
今まで各マシンではKVMでVMを管理していました。しかし、サーバー間のマイグレーションのやりにくさ、管理の難しさからGUIで管理できるようにしたいという声が上がり、この度Proxmoxクラスタを組むことになりました。
初期状態ではtamanegiとtachyonに多数のVMが存在し、shourinとsakashitaにはVMが存在しませんでした。
移行手順
2台でProxmoxクラスタを組む
まずはVMが何も入っていないshourinとsakashitaにProxmoxをインストールして2台でProxmoxクラスタを組みました。
VMをProxmoxクラスタに移す
続いて、tamanegiとtachyonのVMをshourinとsakashitaにマイグレーションしました。ここではライブマイグレーションすることができないので、VMを一時停止しdiskをコピーして移しました。移す際にVMの停止を忘れていたり、Proxmoxに移したことでNIC名が変わったりしたためややトラブルがありましたが、なんとか移し切りました。 ただ、tamanegi上で動いていたファイルサーバーだけはtamanegiに存在するディスクを用いていたためマイグレーションできませんでした。そのため、ファイルサーバーはtamanegiのOSを入れ替えた後に新たに構築することにしました。
OSをProxmoxに入れ替える
tamanegiとtachyonのVMはファイルサーバーを除きProxmoxに移ったので、OSをProxmoxに入れ替えます。
4台でProxmoxクラスタを組む
tamanegiとtachyonを既存のProxmoxクラスタに参加させます。これで4台でクラスタが組めました。
VMをLive Migrationする
先ほどshourinとsakashitaに移したVMをtamanegiとtachyonに戻したら作業完了です。proxmoxクラスタを組んだので1ボタンで簡単にLive Migrationできました。 結果として、以下の写真の通り4台でクラスタリングを行い、現在22個のVMが稼働しています。
移行中のトラブル
ここでは移行中に起こったトラブルを紹介します。
VMのデータ不整合
まずは先程も述べたVMの停止忘れによるデータの不整合です。本来は停めてからdiskをコピーする必要がありましたが、停止を忘れていたため、Migration時にデータの不整合が生じ、サーバーが機能しなくなることがありました。
ディスク破損
冒頭にtamanegiのケースをラックマウント対応ケースに入れ替えたと申しまたが、このときにディスクのピンを曲げてしまいました......さらば4TB SSD。
ちなみに、これとは別にSSDがかなり低速になる問題があり、そのSSDを交換したばかりの出来事だったため、RAIDを組み直すのにかなり苦労しました。
移行後
無事、稼働しているVMが一覧で簡単に見られるようになりました。 一方で、問題というほどでもないのですが、VM作成のコストが高いという声もありました。
KMCでは構成管理ツールにitamaeを用いています。itamaeはVMを作る際に簡単にSSHやLDAPの登録ができるため非常に便利なのですが、VMを作るたびにマシンの定義をする必要があり、VMを頻繁に作成・削除するような場合には適しているとは言えません。
実現したこと
VMを簡単に作成できるようにするために、VMを作成したと同時にIPアドレスを自動で割り当てて固定し、VMのAレコードをDNSサーバーに登録して名前解決可能にする仕組みを作成しました。 これらはProxmoxでSDNの機能として提供されており、ほぼGUI上で作成することができました。Proxmox恐るべし......
IPアドレス固定
IP割り当てには、ProxmoxのIPAMを用いてIP管理を行いました。また、DHCPサーバーから受け取ったIPを用いてIPを自動で固定するようにcloud-initの設定を行いました。IPAM+cloud-initを用いることでVMを作成すると同時にDHCPサーバーから受け取った重複のないIPアドレスで固定されたマシンを作成することができます。 IPAMとcloud-init共にProxmoxのSDN機能として提供されていたため、簡単に構築することができました。詳しくは私が投稿した Proxmox VEでIPAM+cloud-initを用いてIP管理 をご覧ください。
DNS登録
Aレコードの登録にはPowerDNSで権威サーバーを立て、PowerDNSのREST APIをProxmoxから呼び出すことで実現しました。API呼び出しはProxmoxのSDN機能を利用しました。DNSサーバー自体は自分で構築する必要がありますが、この仕組みもSDNを用いれば簡単に実現できました。こちらも詳しくは私が投稿した Proxmox VEでVM作成時にDNSに自動登録 をご覧ください。
おわりに
今回は部内マシンのOSをすべて入れ替えて、Proxmoxクラスタを組みました!かなり大規模な改修であり、かつ主要なサーバーのダウンタイムをできる限り短くするため長時間ぶっ通しで作業したのでかなり大変でした。ProxmoxのSDN機能もまだまだ知らない機能があるのでもっとうまく活用していきたいです。ご覧いただきありがとうございました!