【XCP-ng 8.3】 HCI 構成:XOSTOR の構築と障害時の動作確認

XCP-ng の 3 台のホストのローカル ディスクを XOSTOR(LINSTOR/DRBD によるレプリケーション)で 1 つの共有 SR にまとめ、ハイパーコンバージド(HCI)構成にする手順と、仮想マシンの移行・ホストの停止・NIC の故障の動作を確認した結果です。DRBD の通信は、2 本の NIC のボンド(bond0)を通して冗長化します。

目次

この記事の前提

参照した公式ドキュメント

構成

項目内容
プールdoc-pool(doc-xcp1〜3)。プールの設定手順で bond0(Storage-Migration、10.20.83.x)を作成済み
XOSTOR に使うディスク各ホストの /dev/sdb(40 GB、インストール時にローカル SR に含めなかったディスク)
レプリケーション2(データを 2 台のホストに 1 つずつ持つ)
プロビジョニングThin
SR 名xostor-sr01

公式ドキュメントの主な前提条件です。

条件内容
ホストの台数3 台以上(DRBD のクォーラムのため)。1 つのプールで最大 7 台
管理ネットワークパブリックな IP アドレスを使わない(LINSTOR のポートは認証なしで待ち受けるため)
DRBD のネットワーク10 Gbps 以上の専用の NIC を推奨(管理用と共用も可能)
レプリケーション数1・2・3 のいずれか。作成後は変更できません
dom0 のメモリLINSTOR のサービスがメモリを使うので、十分に割り当てる

XO での作成(XOA の登録が必要)

Xen Orchestra の [XOSTOR] → [New] で作成する方法が、公式の標準の手順です。

(1) 名前・説明・レプリケーション・プロビジョニング、プール、ネットワーク(任意)を入力します。

XOSTOR の作成画面
項目説明設定値
Name/DescriptionSR の名前と説明xostor-sr01
Replicationデータのコピー数2
ProvisioningThin(使った分だけ)/ThickThin
Pool対象のプール。必要なパッケージ(xcp-ng-release-linstor、xcp-ng-linstor)が各ホストに入りますdoc-pool
NetworkDRBD に使うネットワーク(空なら管理用)Storage-Migration

(2) [Disks] でホストを選び、使うディスク(/dev/sdb)をホストごとに追加します。[Summary] に、概算の容量(Approximate SR capacity:60 GiB)が表示されます。[Create] をクリックし、「パッケージの導入でツールスタックが再起動する」という確認で [OK] をクリックします。

ディスクの選択

この検証環境の XOA は未登録(無償のアカウントで登録していない状態)だったため、作成は「unknown error from the peer」で失敗しました([Settings] → [Logs] に xostor.create のエラーとして記録されます)。XOA を登録してから実行してください。この検証では XOA を登録せず、次の CLI の手順で同じ構成を作りました。

CLI での作成

公式ドキュメントに記載のあるコマンドを組み合わせて作成しました。

(1) 全ホストで、LINSTOR のパッケージを入れます。

yum install -y xcp-ng-release-linstor
yum install -y xcp-ng-linstor

(2) 全ホストで、XOSTOR に使うディスクに LVM のボリューム グループとシン プールを作ります。

vgcreate linstor_group /dev/sdb
lvcreate -l 100%FREE -T linstor_group/thin_device
lvchange -ay linstor_group/thin_device

(3) 全ホストで、ツールスタックを再起動して LINSTOR のドライバーを読み込みます。xe sm-list type=linstor で、ドライバー(LINSTOR resources on XCP-ng)が表示されることを確認します。

xe-toolstack-restart
xe sm-list type=linstor params=type,name-label

(4) プールのマスターで、LINSTOR の SR を作ります。この検証環境では 44 秒で作成されました。

xe sr-create type=linstor name-label=xostor-sr01 shared=true \
  host-uuid=$(xe host-list name-label=doc-xcp1 --minimal) \
  device-config:group-name=linstor_group/thin_device \
  device-config:redundancy=2 device-config:provisioning=thin
device-config説明
group-name手順 (2) で作ったボリューム グループ/シン プール
redundancyレプリケーション数
provisioningthin または thick

(5) DRBD の通信をストレージ用ネットワーク(bond0)に向けます。各ホストに LINSTOR のインターフェースを登録し、優先する NIC(PrefNic)に設定します。

linstor node interface create doc-xcp1 storage 10.20.83.131
linstor node set-property doc-xcp1 PrefNic storage
(doc-xcp2・doc-xcp3 も同じように実行)

linstor コマンドは、LINSTOR のコントローラーが動いているホストで実行します。どのホストか分からない場合は、linstor --controllers=192.168.1.131,192.168.1.132,192.168.1.133 node list のように全ホストを指定します。

(6) ノードとストレージ プールの状態を確認します。

linstor node list
linstor storage-pool list

3 台のノードが Online で、各ホストに LVM_THIN のストレージ プール(約 39.9 GiB)があることを確認します。

作成した SR の確認

(1) XO の [XOSTOR] に、作成した SR が表示されます(Size:59.88 GiB、Provisioning:thin)。

XOSTOR の一覧

(2) SR の [General] タブでは、種類が [linstor]、3 台のホストに接続されていることが分かります。容量は「最小のディスクの容量 × ホスト数 ÷ レプリケーション数」(40 × 3 ÷ 2 = 約 60 GiB)です。

SR の概要

SR の [XOSTOR] タブ(リソースの状態の表示)は、この検証環境の XOA では読み込み中のまま表示されませんでした。状態は linstor resource list で確認しました。

仮想マシンのディスクの移動(ストレージのライブ マイグレーション)

3Tier 構成の手順で iSCSI の SR に作った rocky-xcp01 を、動かしたまま XOSTOR に移しました。

(1) 仮想マシンの [Migrate] で、移動先のホストと [Select a destination SR](xostor-sr01)を選んで [OK] をクリックします。

移動先の SR の指定

(2) 完了すると、[Disks] タブの SR が xostor-sr01 に変わります。

移動後のディスク
項目結果
所要時間(20 GB のディスクとメモリ)208 秒
ping の欠落(0.2 秒間隔)1,016 回中 44 回(約 8.8 秒)
ゲスト OS再起動なし

linstor resource list で見ると、仮想ディスクの DRBD のリソースは、2 台に実データ(UpToDate)、残りの 1 台にクォーラム用の TieBreaker(データなし)が作られていました。

動作確認

ライブ マイグレーション(XOSTOR 上)

xe vm-migrate vm=rocky-xcp01 host=doc-xcp3 live=true
項目結果
所要時間27.5 秒(doc-xcp1 → doc-xcp3)
ping の欠落126 回中 35 回(約 7 秒)

ストレージ用の NIC の故障

仮想マシンが動いている doc-xcp2 で、bond0 のメンバーの eth3 のリンクを切りました。

確認したこと結果
ovs-appctl bond/show bond0eth3 が disabled、eth4 が active member(active-backup)
他ホストの bond0 の IP アドレスへの疎通応答あり
linstor resource listリソースはすべて Ok(UpToDate/Diskless/TieBreaker のまま)
仮想マシンの ping(0.2 秒間隔、約 80 秒間)欠落 0 回
仮想マシンのディスク書き込み(200 MB)正常に完了

リンクを戻すと eth3 は enabled に戻り、この間も ping の欠落はありませんでした。

ホストの停止と再同期(HA)

仮想マシンが動いている doc-xcp3(実データの複製を持つホスト)の電源を強制的に切りました。プールの HA は有効(ハートビート SR は iscsi-sr01)、仮想マシンの HA は restart です。

時刻・経過状態
17:49:39doc-xcp3 の電源を切る
165 秒後仮想マシンが doc-xcp2 で再起動し、ping が戻る
停止中doc-xcp3 のノードは OFFLINE(1 時間後に自動で除外=Auto-eviction の予定と表示)。仮想ディスクは doc-xcp1 の複製(UpToDate)を使い、doc-xcp2 は Diskless(ネットワーク経由で読み書き)。ディスク書き込みは正常
17:52:53doc-xcp3 の電源を入れる
17:56:39doc-xcp3 の複製の再同期(SyncTarget)が終わり、UpToDate に戻る(電源投入から約 3 分 46 秒)

ホストが長時間停止すると、LINSTOR はそのノードを自動で除外(Auto-eviction)し、残りのホストで複製数を保とうとします。メンテナンスで長く止めるときは、公式ドキュメントの「DrbdOptions/AutoEvictAllowEviction」の説明を参照してください。

HA のハートビート SR を XOSTOR にする設定(xe pool-ha-enable heartbeat-sr-uuids=<xostor-sr01 の UUID>)は、この検証環境では「SR_BACKEND_FAILURE_1200 Invalid image type: aio」で失敗しました(失敗すると HA は無効のまま残るので、ほかの SR で有効にし直しました)。そのため、ハートビートには iSCSI の SR を使っています。

次の手順

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次