当ページでは、HCI(ハイパーコンバージドインフラストラクチャ)の構築を進めてゆきます。
HCI構成の特徴や3Tier構成との違いなどについてはこちらのページをご覧ください。
1. 構築要件 #
XCP-ng仮想基盤にてHCI環境を構築するためには以下の構成が必要になります。
- ホストのサイジング方法や構成例についてはこちらのページで紹介しています。
- 1台の物理DISKでも技術的には構築可能(参)なようですが、サポート対象外となります。
- オンボードNICのみでも構築可能ですが、2種類の通信が混在するため通信速度は低下します。
- XOAにはXOSTORの機能がインクルードされています。
1台の物理DISKのみで構築する手順(参考)
ChatGPTいはく、XCP-ngを通常に導入した後にLVMでパーティションを切って論理的なセカンダリDISKを作成(LVMローカルストレージ領域を縮小し空き領域を確保 > 空き領域にXOSTOR用パーティションを作成 > XOSTOR用パーティションにPVとVGを作成)するという流れになるようです。通常であれば、XCP-ng導入前にパーティションを切っておきたいところですが、XCP-ngの導入先は物理DISKしか選択できないため、以上のような流れになるようです。
2. 構築準備 #
HCI仮想環境を構築する上で必要となるセカンダリDISKとセカンダリNICの事前設定を行います。
1)セカンダリDISKの設定 #
通常、DISKがBIOSで認識されてさえいれば、XOSTORのセットアップを行うだけでデータ同期領域が作成されますが、過去に論理ボリュームを作成したことのある中古DISKを使用した場合は、エラーが発生して作成に失敗するため、各ホストで以下の設定を事前に行っておく必要があります。(新品DISKを増設した場合はこの設定は不要ですので次の段階に進んでください)
ホストにターミナル接続し、セカンダリDISKのデバイス名を確認します。(注)
# fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors ← セカンダリDISKのデバイス名
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/sdb: 128.0 GB, 128035676160 bytes, 250069680 sectors ← XCP-ngが導入されたプライマリDISKのデバイス名
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 3B6EDE89-A05A-4716-983D-0197B2BD5F1E
# Start End Size Type Name
1 46139392 83888127 18G Microsoft basic ← root(/)
2 8390656 46139391 18G Microsoft basic ← backup root(/)
3 87033856 250069646 77.8G Linux LVM ← Local Storage(LVM)
4 83888128 84936703 512M BIOS boot ← boot
5 2048 8390655 4G Microsoft basic ← Log(/var/log)
6 84936704 87033855 1G Linux swap ← swap
セカンダリDISKのデバイス名は「sdb」であるとは限りません。
上記の例でもセカンダリDISKのデバイス名は「sda」になっています。
セカンダリDISKのパーティションを一旦削除します。
# fdisk /dev/sdx ← セカンダリDISKのデバイス名(sdaまたはsdb)に読み替えてください
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help):d ← パーティション削除
XOSTOR用のPV(Physical Volume)を作成します。
# pvcreate /dev/sdx ← セカンダリDISKのデバイス名(sdaまたはsdb)に読み替えてください WARNING: dos signature detected on /dev/sdx at offset 510. Wipe it? [y/n]: y ← Yesで応答(ここが肝) Wiping dos signature on /dev/sdx. Physical volume "/dev/sdx" successfully created. ← PVが作成されたことを確認 # pvs ← Physical Volume の状態を確認します PV VG Fmt Attr PSize PFree /dev/sda lvm2 --- 232.89g 232.89g ← PVが作成されていることを確認 /dev/sdb3 XSLocalEXT-UUID lvm2 a-- 77.73g 0 ← こちらはXCP-ngシステムのPVです
2)セカンダリNICの設定 #
セカンダリNICを増設した場合は、各ホストで以下の設定を事前に行っておく必要があります。(増設していない場合はこの設定は不要ですので次の段階に進んでください)
左メニューより「Home」>「Hosts」を選択し、「ホスト一覧画面」に進みます。
> 対象ホストをクリックし、「ホスト詳細画面」に進みます。

Networkタブをクリックします。

プライマリNIC(eth0)しか表示されていない場合は、「Refresh」ボタンをクリックします。

セカンダリNIC(eth1)が表示されたことを確認し、Modeの「None」をクリックします。
注)表示されない場合はホストがセカンダリNICを認識していない可能性が高いため確認してください。

プルダウンから「Static」を選択します。

固定IPアドレスとサブネットマスクを入力し、「OK」をクリックします。(注)

- 固定IPアドレスはプライマリNICとは別のネットワークのIPアドレスを指定します。
- セカンダリNICはHUBのみで繋がっているため、DNS/Gatewayは指定しません。
Modeが「Static」となり設定した固定IPアドレスが表示されていることを確認します。
> Statusの「Disconnected」をクリックします。

接続しますかのポップアップ確認画面が表示されますので「OK」をクリックします。

Statusが「Connected」に変わり、通信可能状態になったこと確認をします。

セカンダリNICが繋がっているHUBでリンクアップ(緑点灯)していることも確認します。

ホストにターミナル接続し「ip address」コマンドを使って、セカンダリNIC(eth1)に紐づいたブリッジ(xenbr1)が作成されていることを確認します。
# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP group default qlen 1000
link/ether 44:8a:5b:c0:06:49 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master ovs-system state UP group default qlen 1000
link/ether 98:b7:85:1f:cf:d8 brd ff:ff:ff:ff:ff:ff
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 2a:55:7a:14:f8:f8 brd ff:ff:ff:ff:ff:ff
5: xenbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 44:8a:5b:c0:06:49 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global xenbr0
valid_lft forever preferred_lft forever
8: vif2.0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc mq master ovs-system state UP group default qlen 1000
link/ether fe:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff
10: xenbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 98:b7:85:1f:cf:d8 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.1/24 brd 10.10.10.255 scope global xenbr1
valid_lft forever preferred_lft forever
全てのホストで設定が完了したら、各ホスト間でそれぞれPINGが通るか確認します。
# ping 10.10.10.1
# ping 10.10.10.2
# ping 10.10.10.3
3. HCI環境の構築 #
分散ストレージソリューション(XOSTOR)を使ってHCI環境の構築を行ってゆきます。
XOSTORは、Xen Orchestraを導入することで利用可能となり、Xen OrchestraのWebUI管理画面からHCI環境の構築が行えるようになります。
1)XOSTORストレージの作成 #
HCI環境の肝となる「分散レプリケーション用ストレージ」を作成します。
左メニューより「XOSTOR」を選択し、XOSTOR画面で「+New」ボタンをクリックします。

①Generalセクションの設定を行います。
> ストレージ一覧画面に表示される「名称」と詳細画面に表示される「説明」を入力します。

②Settingsセクションの設定を行います。
> Replication:プルダウンからレプリケーション数(1~3)を選択します。(参)
> Provisioning:プルダウンからストレージ容量の割当方式(Thin/Thick)を選択します。

| レプリケーション数(複製数)の違い | ||
| 複製数1 | : | 1台の故障でデータは消失/ストレージ利用効率100%(非推奨) |
| 複製数2 | : | 1台の故障ならデータ消失なし/ストレージ利用効率50%(推奨) |
| 複製数3 | : | 2台故障してもデータ消失なし/ストレージ利用効率33%(注) |
ホスト3台の環境で複製数3を選択した場合、1台でも通信不能となり複製数3が維持できなくなると安全装置が働いて残りのホストが読取専用に切り替わる仕様になっているため、複製数3は4台以上のホスト環境で選択することが推奨されています。
③Poolセクションの設定を行います。
> プルダウンから作成済みのプールを選択します。
> Diskセクションに割当可能なDiskを持つホストが表示されたことを確認します。(注)

この段階では、XOSTORにDISKが割り当てられていないため、各ホストには「No disks」と表示されます。XOSTORへのDISK割当は後述の「Disksセクション」で行います。
④Networkセクションの設定を行います。
> 識別しやすいネットワークインターフェース名(物理NIC名など)を入力します。
> プルダウンより分散レプリケーション通信で利用する物理NICを選択します。

⑤Disksセクションの設定を行います。
注)Disksセクションの設定は以下の手順をホストの数だけ繰り返します。
対象ホストをプルダウンから選択します。
> 対象ホストのセカンダリDISK(/dev/sdx)をプルダウンから選択します。

対象ホストのセカンダリDISKがXOSTORに割り当てられたことを確認します。

全てのホストのセカンダリDISKがXOSTORに割り当てられたことを確認します。
> Summaryセクションにて設定内容を確認(警告が出ていないかも確認)します。
> 設定に間違いがなく警告も出ていなければ「+Create」ボタンをクリックします。

確認画面がポップアップされますので、「OK」をクリックします。

XOSTORストレージが作成されるまでしばらく(数分)待機します。(注)

作成中は「Create」ボタンがグレーアウトしカーソルが回っているため、その間は画面の更新などはせずそのまま待機してください。
XOSTORストレージが作成されると「詳細画面」が表示されます。
> 利用可能なストレージ容量(参)を確認の上、「Hosts」タブをクリックします。

| XOSTOR利用可能容量=DISK2のPV容量(*1)× ホスト数 ÷ 複製数(*2) | |
| *1 | Phisical Volume 容量:物理DISK容量 × GB表記変換率(*3) |
| *2 | 複製数:XOSTOR構成時に設定したレプリケーション数(1~3) |
| *3 | 変換率:物理DISK容量(10003)をPV容量(10244)に変換する係数(0.93) |
XOSTORストレージがプール内の全てのホストに接続(共有)されていることを確認します。

2)デフォルトストレージの変更 #
デフォルトストレージをホストのローカルストレージからXOSTORストレージに変更します。
左メニューより「Home」>「Storage」を選択し、「ストレージ一覧画面」に進みます。
> プール共有の「XOSTORストレージ」が一覧に追加されていることを確認します。
> マスターホストのローカルストレージがデフォルトになっていることを確認します。

XOSTORストレージにマウスをポイントすると2つのアイコンが表示されるので、ディスクアイコンの方にマウスを合わせ「Set as default SR」と表示されたら、そのままクリックします。

デフォルトストレージがXOSTORストレージに変更されたことを確認します。

3)XOAのマイグレーション #
XOAもHA対象にするため、XOAの仮想ディスクイメージ(VDI)をローカルストレージからXOSTORストレージに移動させます。
左メニューより「Home」>「VMs」を選択し、「仮想マシン一覧画面」に進みます。
> 稼働中のXOA(仮想マシン)をクリックし、詳細画面に移動します。

右上の「マイグレート」アイコンをクリックします。

ポップアップ画面にて移動先ホストをプルダウンから選択します。(注)

別ホストのローカルストレージではなくXOSTORストレージに移動させることが今回の目的なのですが、マイグレーションの仕様上、移動先ホストを指定する必要があります。
XOSTORストレージをプルダウンから選択(注)し、「OK」をクリックします。

ここでストレージを選択しないまま進めてしまうと移動先ホストのローカルストレージに移動してしまうため、XOSTORストレージを必ず選択してください。
左メニューより「Home」>「VMs」を選択し、「仮想マシン一覧画面」に戻ります。
> XOAのステータスが稼働中(●)から移動中(●)に変わったことを確認します。

左メニューより「Tasks」を選択し、「タスク一覧画面」に移動します。
> XOA移動タスクの進行状況を確認しながら完了するまでしばらく待機します。(注)

ホストのローカルストレージ(DISK1)上にあるXOAのディスクイメージをXOSTORストレージ(複数ホストのDISK2)に複製・分散しながら物理的に移動させるため、システムの環境にもよりますがある程度の時間(それでも10分程度)を要します。
XOA移動タスクが完了した(タスクがなくなった)ことを確認します。

左メニューより「Home」>「VMs」を選択し、「仮想マシン一覧画面」に戻ります。
> XOAのステータスが稼働中(●)に戻ったことを確認し、XOAをクリックします。

Diskタブをクリックします。

保管先ストレージ(SR)がXOSTORストレージになっていることを確認します。

4. HA機能の有効化 #
1)プール全体の設定 #
プール全体のHA機能はデフォルトで無効となっているため、有効化する必要があります。
・手動でホストを停止/再起動する際は、事前にHAを無効化しておく必要があります。
・複数のプールを構築して運用している場合は、プールごとに設定する必要がります。
左メニューより「Home」>「Pools」を選択し、「プール一覧画面」に進みます。
> 対象のプールをクリックし、詳細画面に移動します。

Advancedタブをクリックします。

High Availabilityのスイッチをクリックします。
注)この時点では即座にONにはなりません。

Heartbeatを担う共有ストレージ(XOSTOR)をプルダウンから選択し、「OK」をクリックします。

HeartbeatストレージとしてXOSTORストレージが登録されたことを確認します。
注)この時点でもまだHigh AvailabilityのスイッチはONにはなりません。

左メニューより「Tasks」を選択し、「タスク一覧画面」に移動します。
> HA有効化タスクの進行状況を確認しながら完了する(消える)まで3分ほど待機します。

左メニューより「Home」>「Pools」を選択し、「プール一覧画面」に戻ります。
> プール名の横に「HA有効中マーク」が表示されていることを確認します。
> プールをクリックし、詳細画面に移動します。

Advancedタブをクリックします。

High AvailabilityのスイッチがONになっていることを確認します。

以後はHigh AvailabilityスイッチのON/OFFだけでHA有効/無効が切り替えられます。
2)VM別の個別設定 #
仮想マシンの作成時はデフォルトでHA対象になりますが、HAが不要な仮想マシン(開発・テスト用VMなど)は個別設定によりHA対象外に変更することができます。
- 手動でVMを停止させる場合は、事前にHA対象外にしておく必要があります。
(対象外にしておかないとHA機能によりVMは勝手に再起動してしまいます) - 仮想環境を管理するXOAもVMですが、XOAは常にHA対象にしておいてください。
- HA対象にしているVMでもリソースの状態により起動に失敗する場合もあります。
左メニューより「Home」>「VMs」を選択し、「仮想マシン一覧画面」に進みます。
> 対象の仮想マシンをクリックし、詳細画面に移動します。

Advancedタブをクリックします。

Xen settingsセクションの「HA」のプルダウンからHA発動時の挙動を選択します。

| ▼HA発動時の挙動 | ||
| restart | : | 必ず起動を試みます |
| best-effort | : | リソースに余裕があれば起動を試みます |
| Disabled | : | 起動を試みません(HA対象外となります) |
3)動作テスト結果(参考) #
プールマスターのホストに疑似的な障害を発生させることでHAのテストを行ってみました。
以下のテスト方法が正しいかは不明なため、あくまでも参考程度としてください。
| テスト方法 | HA 発動 | 結果 | 結果内容 |
|---|---|---|---|
| サービスネットワークの遮断 | 〇 | 失敗 | ・プールマスタのHAは成功したが、XOA含めVMは再起動しなかった ・なぜかすべてのホストが勝手に再起動し、xapiやdrbdのサービスが失敗していた ・ホストの再起動後にVMの起動は何度も試みているようだったが都度失敗していた ・ネットワークケーブルを挿し直し、失敗していたサービスを手動起動させることで何とか復旧した |
| ストレージネットワークの遮断 | ✕ | 失敗 | ・HAは発動されず、サービスも正常のまま稼働し続けた(参) 参)ストレージネットワークの通信はサービスネットワークも利用できる冗長構成になっているため、 ストレージネットワークが遮断されてもサービスネットワークが生きてさえいれば故障とは判断 されず、結果、HAが発動しなかったのではないかとみています |
| 両ネットワークの遮断 | 〇 | 失敗 | ・サービスネットワークの遮断時と全く同じ結果となった |
| 電源の遮断 | 〇 | 成功 | ・プールマスタ/VMどちらも移動し、HAが成功した(ホストの再起動もなし) ・電源復旧時も電源遮断したホストは無事プールに復帰した(注) 注)プール復帰後、電源を遮断したホストのXAPIサービス(xapi-wait-init-complete.service)が 停止していることが判明したが、サービスを手動起動させることで完全復旧に至った |
以上でHCI仮想環境の構築は完了です。
次ページでは、実際に仮想マシンを操作する方法(作成・複製・削除など)を紹介してゆきます。
