KVMでHAクラスタの機能検証環境を構築
- 2011/08/04 17:50 クラスタの基本構成まで書いた。
- 2011/08/05 18:50 サービスリソースの構成も書いた。
「RHCS設計・運用入門」という資料を作るにあたって「そういえば、あの設定ってどういう動きになるんだっけ???」みたいなことをサクッと確認できる環境をKVMで用意しました。せっかくなので構築手順を残しておきます。
ハードウェア依存の機能や微妙なパラメータチューニングの確認は、きちんと物理サーバでやるべきですが、こういう手軽な環境を手元のPCに用意しておくともろもろの作業効率が格段に上がります。(インフラ技術はいぢり倒して学ぶのが王道ですしね。)
参考資料)High Availability Add-On 非公式技術情報
前提ソフトウェア
RHEL6.1のHigh Availability Add-Onを使用します。以前はRed Hat Cluster Suite(RHCS)として有名だったやつですが、なにげに名称が変更されています。
レポジトリからまとめて導入する時はこれでOKです。
# yum groupinstall "High Availability"
High Availabilityグループで入るのは下記のパッケージ(とその前提パッケージ)なので、Fedoraでがんばる方はこれらと同等パッケージをご使用ください。
# rpm -q cman ccs omping rgmanager cman-3.0.12-41.el6_1.1.x86_64 ccs-0.16.2-35.el6.x86_64 omping-0.0.1-4.el6.x86_64 rgmanager-3.0.12-11.el6_1.1.x86_64
VM環境の準備
こんな感じの仮想ネットワークとVM2個を用意します。KVMの仮想ネットワークの構成方法はプロのためのLinuxシステム・ネットワーク管理技術の第5章に詳しく書いてあります。
メモメモ
ハートビートが切断してあるノードの状態が不明になった場合、相手のノードは、管理ネットワークを通じてこのノードを強制再起動します。物理サーバ環境であれば、各ノードのリモート管理NIC(IPMIの接続ポート)を管理ネットワークに接続しておいて、ここから強制再起動を実施します。
これは、ハートビートが通じない、すなわちハートビート・ネットワークが切れているかも知れない状態で実施する必要がありますので、ハートビート・ネットワークと管理ネットワークを兼用することはできません。必ずハートビート・ネットワークとは独立した経路で強制再起動できる方法を用意してください。
どうしてもネットワークが3経路用意できない場合は、サービスネットワークとハートビート・ネットワークを兼用するか、サービスネットワークと管理ネットーワークを兼用することになります。前者の場合は、サービスネットワークの通信負荷が上がってもハートビートが切れないかどうか入念な事前確認が必要です。(サービスネットワークと管理ネットワークを兼用できるかどうかは、クラスタとは直接関係なく、ネットワークの管理ポリシーに依存することですね。)
node01とnode02それぞれにRHEL6.1を入れて、前述のHigh Availabilityグループを導入します。その他には、このぐらいの準備をします。
・iptablesはoffっておく。
・ntpdで時刻同期しておく。
・/etc/hostsは下記のとおり。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.7.121 node01 192.168.7.122 node02 192.168.7.123 node03 192.168.8.121 node01m 192.168.8.122 node02m 192.168.8.123 node03m 192.168.9.121 node01h 192.168.9.122 node02h 192.168.9.123 node03h
・両ノードのrootユーザ同士でSSHの公開鍵認証を設定して、パスワード無しのSSHが打てるようにしておく。
共有ストレージの準備
ホストLinuxのiSCSIターゲットを使用します。外付ストレージ装置を用意しないでここまでできるってLinuxはすばらしぃですね。
まず、ホストLinuxで下記を実行します。
# yum install scsi-target-utils # mkdir -p /var/lib/tgtd/cluster01 # cd /var/lib/tgtd/cluster01 # dd if=/dev/zero of=volume01.img bs=1M count=100 # dd if=/dev/zero of=volume02.img bs=1M count=1000
targetedモードでSELinuxを動かしている場合は、Volumeファイルは/var/lib/tgtd/以下に置く必要があるので注意してください。続いて、/etc/tgt/targets.confの末尾に下記を追加します。
backing-store /var/lib/tgtd/cluster01/volume01.img backing-store /var/lib/tgtd/cluster01/volume02.img
最後にtgtdサービスを起動します。
# chkconfig tgtd on # service tgtd start # tgt-admin -s Target 1: iqn.2011-08.com.example.yourhost:tgt01 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Readonly: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 105 MB, Block size: 512 Online: Yes Removable media: No Readonly: No Backing store type: rdwr Backing store path: /var/lib/tgtd/cluster01/volume01.img Backing store flags: LUN: 2 Type: disk SCSI ID: IET 00010002 SCSI SN: beaf12 Size: 1049 MB, Block size: 512 Online: Yes Removable media: No Readonly: No Backing store type: rdwr Backing store path: /var/lib/tgtd/cluster01/volume02.img Backing store flags: Account information: ACL information: ALL
上記のようにvolume01.imgとvolume02.imgがLUNとして構成されていればOKです。それぞれこの後で、Quorum Diskと共有データ領域として使用します。
node01とnode02では、それぞれ次の手順でiSCSI LUNを認識させます。
# chkconfig iscsi # service iscsi start # iscsiadm -m discovery --type sendtargets --portal 192.168.8.1 # service iscsi restart
fdiskで見て、100MBの/dev/sdaと1GBの/dev/sdbが認識されていればOKです。(仮想マシンに接続した仮想ディスクは、virtioドライバを使っているので/dev/vdXXの前提です。)なお、iSCSIについては、プロのためのLinuxシステム構築・運用技術の第3章に詳しく書いてあります。
クラスタ構成の準備
いよいよクラスタの構成ですが、初めに下準備をしておきます。これは、node01、node02で共通に実施します。
ricciサービスを起動します。これはリモート管理用のデーモンで、cluster.confを動的に変更する際に必要になります。
# chkconfig ricci on # service ricci start
また、リモート管理の際にricciユーザのパスワードで認証するため、事前にパスワードの設定が必要です。
# passwd ricci
クラスタのトポロジーを管理するcmanとリソースの監視を行うrgmanagerは自動起動しないようにします。障害などでノードが再起動した際に、障害が残ったノードが勝手にクラスタに参加するのを防ぐためです。