クラスタ管理 · 4 min read · Jan 30, 2026
Debian Lenny における Ganeti を使用した Xen クラスター管理
Debian Lenny における Ganeti を使用した Xen クラスター管理
Version 1.0
Author: Falko Timme
Ganeti は Xen に基づくクラスター仮想化管理システムです。このチュートリアルでは、2 つの物理ノードのクラスター上に 1 つの仮想 Xen マシン(インスタンスと呼ばれる)を作成し、このインスタンスを 2 つの物理ノード間で管理およびフェイルオーバーする方法を説明します。
この文書にはいかなる種類の保証もありません!これがあなたにとって機能することを保証するものではありません!
[更新 2010/01/21] Ganeti 開発チームからメッセージを受け取りました:
“ […] 最近、私たちは人々があなたの指示に従おうとし、古いまたは非常に古いバージョンの Ganeti をインストールしてしまうという不幸な事実に気づきました。両方のチュートリアルを更新し、最近の Ganeti バージョンに対して更新されていないことを示す注記を追加し、人々に http://docs.ganeti.org/ganeti/ の最新のドキュメントを参照するようにお願いできますか? “
このチュートリアルは古いバージョンの Ganeti に基づいています。最新のドキュメントについては http://docs.ganeti.org/ganeti/ を参照してください。
1 前提条件
このチュートリアルでは、物理ノード node1.example.com と node2.example.com を使用します:
- node1.example.com: IP アドレス 192.168.0.100; クラスターのマスターとなります。
- node2.example.com: IP アドレス 192.168.0.101; 仮想マシン(インスタンス)のプライマリノードとなります。
両方のノードには 500GB のハードドライブがあり、/ パーティションに 20GB、スワップに 1GB を使用し、残りは Ganeti に使用できるように未パーティションのままにします(最小は 20GB です!)。もちろん、パーティショニングはお好みに変更できますが、未使用の最小スペースを忘れないでください。
私が作成するクラスターは cluster1.example.com と名付けられ、IP アドレスは 192.168.0.102 になります。クラスター IP 192.168.0.102 は常にクラスターのマスターにバインドされるため、どのノードがマスターであるかを知らなくても、クラスター IP(またはホスト名 cluster1.example.com)を使用して SSH でマスターに接続できます。
Xen 仮想マシン(Ganeti 用語ではインスタンスと呼ばれる)は inst1.example.com と名付けられ、IP アドレスは 192.168.0.105 になります。inst1.example.com は DRBD を使用して 2 つの物理ノード間でミラーリングされます - これはネットワーク RAID1 の一種と見なすことができます。
ご覧の通り、node1.example.com がクラスターのマスターとなり、クラスターを制御および管理できるマシンであり、node2.example.com が inst1.example.com のプライマリノードとなります。つまり、inst1.example.com は node2.example.com で実行され(inst1.example.com のすべての変更は DRBD を介して node1.example.com にミラーリングされます)、node2.example.com をメンテナンスのために停止する場合などに、node1.example.com にフェイルオーバーするまで実行されます。これはアクティブ-パッシブ構成です。
2 つのノード間で役割を分けることは良い実践だと思いますので、1 つのノードがダウンした場合にクラスターのマスターとプライマリノードを同時に失うことがないようにします。
ここで言及されているすべてのホスト名がすべてのホストに解決可能であることが重要です。つまり、これらは DNS に存在する必要があるか、すべてのホストの /etc/hosts ファイルにすべてのホスト名を追加する必要があります(これが私がここで行うことです)。
すべてのクラスター ノードは同じネットワーク インターフェイス (例: eth0) を使用する必要があります。1 つのノードが eth0 を使用し、もう 1 つが eth1 を使用している場合、Ganeti は正しく機能しません。
それでは、始めましょう…
2 物理ノードの準備
node1:
node1 に静的 IP アドレス 192.168.0.100 を設定したいので、/etc/network/interfaces ファイルは次のようになります(allow-hotplug eth0 を auto eth0 に置き換えています。そうしないと、ネットワークを再起動できず、システム全体を再起動する必要があります):
vi /etc/network/interfaces| # ループバックネットワークインターフェイス auto lo iface lo inet loopback # プライマリネットワークインターフェイス #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
ファイルを変更した場合は、ネットワークを再起動します:
/etc/init.d/networking restart次に /etc/hosts を編集します。次のようにします:
vi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # 以下の行は IPv6 対応ホストにとって望ましい ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
次に、コマンド
hostnameと
hostname -fが完全なホスト名 (node1.example.com) を出力することを確認します。異なるものが表示された場合 (例: node1 のみ)、次のようにします:
echo node1.example.com > /etc/hostname
/etc/init.d/hostname.sh startその後、ホスト名コマンドは完全なホスト名を表示するはずです。
次に、システムを更新します:
aptitude updateaptitude safe-upgradenode2:
次に、node2.example.com で同じことを行います(node2 の IP が異なることに注意してください!):
vi /etc/network/interfaces| # ループバックネットワークインターフェイス auto lo iface lo inet loopback # プライマリネットワークインターフェイス #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.101 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
/etc/init.d/networking restartvi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # 以下の行は IPv6 対応ホストにとって望ましい ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
echo node2.example.com > /etc/hostname
/etc/init.d/hostname.sh startaptitude updateaptitude safe-upgrade3 空き HDD スペースに LVM を設定
node1/node2:
ハードドライブについて調べてみましょう:
fdisk -lnode1:~# fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00023cd1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 6141 48829567+ 8e Linux LVM
node1:~#これから、両方の物理ノードで残りのハードドライブを使用してパーティション /dev/sda3 を作成し、LVM 用に準備します:
fdisk /dev/sdanode1:~# fdisk /dev/sda
このディスクのシリンダ数は 60801 に設定されています。
それには何の問題もありませんが、これは 1024 より大きく、特定のセットアップでは次のような問題を引き起こす可能性があります:
- ブート時に実行されるソフトウェア (例: 古いバージョンの LILO)
- 他の OS からのブートおよびパーティショニングソフトウェア (例: DOS FDISK, OS/2 FDISK)
Command (m for help): <– n
Command action
e extended
p primary partition (1-4)
<– p
Partition number (1-4): <– 3
First cylinder (6142-60801, default 6142): <– ENTER
Using default value 6142
Last cylinder or +size or +sizeM or +sizeK (6142-60801, default 60801): <– ENTER
Using default value 60801
Command (m for help): <– t
Partition number (1-4): <– 3
Hex code (type L to list codes): <– L
0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext’d (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): <– 8e
Changed system type of partition 3 to 8e (Linux LVM)
Command (m for help): <– w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
node1:~#
もう一度ハードドライブを見てみましょう:
fdisk -l
node1:~# fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00023cd1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 6141 48829567+ 8e Linux LVM
/dev/sda3 6142 60801 439056450 8e Linux LVM
node1:~#
良さそうです。新しいパーティションテーブルをカーネルが読み込むために、両方の物理ノードを再起動する必要があります:
reboot
再起動後、LVM をインストールします(おそらくすでにインストールされていますが、確認する方が良いです):
aptitude install lvm2
再起動後、両方のノードで /dev/sda3 を LVM 用に準備し、ボリュームグループ xenvg に追加します:
pvcreate /dev/sda3
vgcreate xenvg /dev/sda3
(Ganeti は独自のボリュームグループを使用したがるため、xenvg を作成します。理論的には、十分な未割り当てスペースを持つ既存のボリュームグループを使用することもできますが、gnt-cluster verify コマンドはこれについて文句を言います。)新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。