Site icon rpine lab Tech Blog

趣味のプログラミング(Web系・バックエンド)や自宅ラボ(Homelab)構築・マイコンを使った電子工作などを雑多に扱った技術ブログです。

🗄️ Proxmox VEでCephストレージを使ったHCIを構築

はじめに

Cephストレージを導入することで、Proxmox VEのノードを使った分散ストレージをProxmoxクラスター上に構築し、HCI (Hyper-Converged Infrastructure) を実現できます。

メリット

  • 機能面
    • HA (High Availability):ノードが死んでも自動的に別ノードでVMが立ち上がる
    • (ライブ)マイグレーション:ストレージの移動が不要で、RAMの転送だけで済むので高速
  • 性能面
    • スケーラビリティ:ノードの追加で容量を簡単に拡張可能
    • 耐障害性:複数の物理ディスク・ノードに冗長化することでディスク障害に対応

環境

  • Proxmox VE:8.3.0
  • ミニPC×3台
    • Proxmox VEのクラスターを構築済み(本ブログの参考記事
    • Ceph用物理ストレージを増設(各ノードにそれぞれ512GB・512GB・1TBのSSDを搭載)
  • ネットワーク:1 GbE Ethernet

    ※本当はCeph用のネットワーク(10 GbE)を物理的に分けて用意した方が良い

準備

まず、Ceph用のストレージを準備します。

  1. Ceph用に使うストレージを各ノードに増設(OS用ディスクとは別に用意)
  2. Ceph用ストレージを初期化(Web UIでノード選択→Disks→Wipe Diskボタン)

インストール・設定

Cephのインストール(1台目)

  1. Web UIのサイドバーで1台目のノード選択→Cephを選択
  2. Install Cephをクリック
    Image in a image block
  3. Cephのバージョン選択
    • Cephバージョンは基本的にデフォルトで問題ない
    • RepositoryはProxmox無償版を利用している場合No-Subscriptionに変更
    Image in a image block
  4. Cephパッケージのインストール

    Ceph関係の必要なパッケージがインストールされます。

    Image in a image block
  5. ネットワーク設定

    Cephでの通信に使うネットワークを指定します。帯域を圧迫してしまうため、PVEの管理ネットワークとは別の物理インターフェースにネットワークを分けることが推奨されています。(同じでも動作は可能)

    • Public Network: Ceph上のディスクを利用しているVMとの通信など、Cephの通信に使われるネットワーク。
    • Cluster Network: レプリケーションなどの通信に使うネットワーク。Public Networkと同じで良ければ空欄のままにする。
    Image in a image block
  6. セットアップ完了画面
    Image in a image block

Cephのインストール(2台目以降)

2台目以降も同じ手順を繰り返します。ただし、ネットワーク設定はクラスターで共通なので設定不要です。

Cephセットアップの設定画面(2台目以降)
Cephセットアップの設定画面(2台目以降)

インストールの確認

ここまでの作業が完了した状態で任意のノードのCephタブを見ると、次のような画面でCephの状態が確認できます。まだストレージの追加などが完了していないためWARN状態になっています。これから各ノードにサービスを追加したりストレージを追加したりすることでCephを利用できるようにします。

Image in a image block

MONの追加

Ceph Monitor (MON) はCephクラスターを管理する役割を持っていて、冗長構成を取るために最低3ノードに配置する必要があります。(4・5台以上ノードがある場合も、3ノードで動作させれば十分)

初期状態では1台目のノードにのみMONがインストールされていますので、他の2ノードにもMONを作成します。

  1. サイドバーからノードを選択→Ceph→Monitorタブを選択
  2. MonitorのCreateボタンをクリック
  3. MONをインストールするノードを選択し、Createをクリック
    Image in a image block
  4. 2ノードに対して上記の作業を実施して、下の画面のようにMonitor欄に3つのノードが追加できていれば完了
    Image in a image block

Managerの追加

Ceph Manager (MGS) はダッシュボードやAPI、メトリクスなどを提供しており、MONの補助サービス的な役割です。クラスタで最低1ノードで動作していれば問題ないですが、可用性のために2ノード以上に配置するのが推奨です。

初期状態で1台目のノードにManagerが作成されているので、最低限別の1ノードにもManagerを追加します。

  1. サイドバーからノードを選択→Ceph→Monitorタブを選択
  2. ManagerのCreateボタンをクリック
  3. Managerをインストールするノードを選択し、Createをクリック
    Image in a image block
  4. Managerが追加されていればOK
    Image in a image block

OSDの追加

Ceph Object Storage Daemon (OSD)は実際にデータの読み書きをするデーモンで、各ノードの物理ディスクごとに作成します。Cephを動作させるためには最低3OSD(=3物理ストレージ)が必要です。

  1. サイドバーからノードを選択→Ceph→OSDを選択
  2. Create: OSDをクリック
  3. 追加するディスクを選択(一覧にない場合はディスクを初期化する必要あり)
    Image in a image block
  4. 1~3の手順を各ノードのストレージごとに実施
    Image in a image block
  5. 3OSD以上追加した状態で、Cephタブを確認してStatusがHEALTH_OKになっていれば完了
    Image in a image block

プール作成

プールはオブジェクトを格納する論理グループで、Proxmoxから利用するためにはVMディスクを格納するためのプールの作成が必要です。

  1. サイドバーからノードを選択→Ceph→Poolsをクリック
  2. プールの作成画面
    • Name: プールの名前を適当に決めて入れる
    • Size: 1つのオブジェクトを何レプリカに複製するか(基本デフォルトの3でいいはず)
    • Add to Storage: チェックを入れる(Proxmoxのストレージとして利用できるようにする)
      Image in a image block
  3. プール作成完了
    Image in a image block

Cephクラスタの状態確認

Cephタブを見ることで、Cephの状態や各ノードのステータス、ストレージの総容量などの統計を確認することができます。

Image in a image block

VM作成

新規VMをCephストレージに作成

VMをCephストレージ上に作成する方法は通常のVM作成と同様ですが、ストレージ選択時に先ほどのプールを指定します。これによりVMディスクがCephに配置され、ライブマイグレーションなどの機能が利用可能になります。

VM作成ウィザードのディスク作成画面
VM作成ウィザードのディスク作成画面

既存のVMのディスクをCephに移動

ローカルにディスクを置いている既存のVMの場合は、VMディスクをCephストレージに移動することができます。ディスク移動作業はVMを起動したまま可能です。

  1. VMのHardwareからディスクを選択し、Disk Action→Move Storageをクリック
    Image in a image block
  2. Target StorageでCephのストレージを選択(移動後に元のデータを削除してよければDelete sourceにチェックを入れる)
    Image in a image block
  3. 転送完了を待つ
    Image in a image block

実践

Cephストレージ上においたVMを使って色々な機能を試してみます。

マイグレーション

ProxmoxのVMにはマイグレーション(実行ホストの移動)機能があります。Cephを利用することで、ディスクの転送が不要になるため高速なマイグレーションが可能になります。

  • 停止しているVMの場合:瞬時に完了
  • 起動中のVMの場合(ライブマイグレーション):RAMデータのみの転送で高速
マイグレーション手順

(今回は起動中のVM=ライブマイグレーションを実施)

  1. 対象VMをクリック→上ツールバーのMigrateボタンをクリック(もしくはVMを右クリック→Migrate)
  2. Target nodeに移動先のノードを指定してMigrateボタンをクリック
    Image in a image block
  3. マイグレーション完了を待つ(RAMの転送のみでマイグレーションが完了するので高速)
    Image in a image block

HA

Ceph構成を利用することでHA(High Availability: 高可用性)機能が利用できるようになります。

HA機能を利用することで、ノードが死んだ際に別のノードでVMを自動起動することが可能になります。

HA対象のリソース追加手順
  1. サイドバーのDatacenter(クラスター)→HA
    Image in a image block
  2. ResourcesのAddボタンをクリック
  3. HAリソースの追加画面
    • VM: HA動作させたいVMを選択
    • Max. Restart: あるノードで起動に失敗した際に再起動を試みる最大回数
    • Max. Relocate: 起動に失敗した際に起動ノードの変更を試みる最大回数
    • Group: HAグループ(別途作成)を指定(起動ノードを限定しない場合省略可)
    • Request State: HA追加直後のVMの規定状態
    • Comment: コメント
Image in a image block
  1. Addボタンをクリック

    ResourcesにVMが追加されてればOK

    Image in a image block
確認

試しにVMが起動しているノードを落としてHA機能が動作するかテストしてみます。

Image in a image block

このVMの起動ノードを落としてみます。(予め他のVMは全部シャットダウンorマイグレーションで別ホストに移動しておく)

Image in a image block

しばらくすると期待通り、別のノードでVMが立ち上がります。(Node項目に注目)

Image in a image block

まとめ

本記事では、Proxmox VEクラスターとCephを組み合わせることでHCIを実現し、それを使った機能を色々試してみました。

  • Ceph(分散ストレージ)による冗長化ストレージの導入
  • 高速VMマイグレーション
  • HA(高可用性)機能

参考サイト

Proxmox公式Wiki

Proxmox公式ドキュメント