Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
758 lines (464 sloc) 50.3 KB
= Linux-HAユーザーズガイド
:doctype: book
[preface]
= 序文
本書は、Heartbeatクラスタメッセージングレイヤ、Linux-HAクラスタリソースエージェント、Linux-HAが維持する他のクラスタ構成品を記述するリファレンスガイドです。
本書に関して皆さまのご意見をお寄せください。コメント、訂正、提案などを linux-ha@lists.linux-ha.org メーリングリストに投稿してください。
= Heartbeat
== クラスタメッセージングレイヤとしてのHeartbeat
Heartbeat はクラスタ基盤サービス(通信とメンバシップ管理)を提供するデーモンです。これによってクライアントプロセスは、他ノードで動作している通信相手プロセスの存在(と消失!)を知ることができ、メッセージの交換が簡単にできるようになります。
利用者にとって意味のある使い方にするには、Heartbeat デーモンとクラスタリソース制御部(CRM)を組み合わせて利用する必要があります。CRMはサービス(仮想IPアドレス、ウェブサーバ等)の起動や終了をつかさどるもので、これによってサービスの高可用化が実現できるようになります。
Heartbeatデーモンは、ユーザが使えるようにするためにクラスタリソースマネージャ(CRM)と組み合わせる必要があります。CRMは、クラスタが提供する高可用サービス(IPアドレス、webサーバなど)を起動・停止します。Heartbeatと連携する標準クラスタリソースマネージャはhttp://www.clusterlabs.org[Pacemaker]です。Pacemakerは高い拡張性と多機能性を誇り、Heartbeatとhttp://www.corosync.org[Corosync]の両方のクラスタメッセージングレイヤをサポートします。
NOTE: Heartbeatリリース 2.1.4まで、Pacemakerは、Linux-HAプロジェクトの一環としてHeartbeatと共同開発されていました。しかし、当リリース後、Pacemakerプロジェクトは独立プロジェクトとして分割され、Heartbeatクラスタメッセージングを完全サポートしながら開発が進められました。
== コンポーネント構成
Heartbeatメッセージングレイヤは、連動するいくつかのコンポーネントから構成されています。
=== 通信モジュール
Heartbeat通信モジュールは、高度な認証機能を持ち、ローカルで順序化されたマルチキャストメッセージングを、基本的にはいかなるメディアででも(IPベースであってもそうでなくても)提供します。Heartbeatは、以下のネットワークリンクタイプでのクラスタ通信をサポートします。
* IPv4ユニキャストUDP
* IPv4ブロードキャストUDP
* IPv4マルチキャストUDP
* シリアル接続通信
WARNING: シリアル接続の接続性( +ha.cf+ のmanページを参照, +man ha.cf+ )に関しては特に注意してください。原則として、不明な点があればシリアル接続は使わないでください。
Heartbeatはノード故障を0.5秒以内に確実に探知します。Heartbeatは、設定を行うことにより、システムウォッチドッグ(watchdog)タイマに登録することもできます。
Heartbeatレイヤは、以下のサービスクラスを提供するAPIを持っています。
* クラスタ内通信:クラスタノードに対してパケットを送受信する
* 設定問合せ
* 接続性情報(自ノードは誰からのパケットを受信できているか):問合せおよび状態変更通知の両方
* 基本的なグループメンバシップサービス
=== クラスタコンセンサスメンバシップ(CCM)
CCMは、強く接続されたコンセンサスクラスタメンバシップサービスを提供します。CCMは、メンバシップに属すると判断された全てのノードが、同じメンバシップ内の他の全てのノードと通信できることを保証します。CCMは、OCFドラフトメンバシップAPI、および SAF AISメンバシップAPIの両方を実装しています。通常、CCMは一秒以下でメンバシップを計算します。
=== クラスタ配管ライブラリ
クラスタ配管(Plumbing)ライブラリは非常に便利な機能の集合であり、多くの内部コンポーネントによって使われる各種サービスを提供します。このライブラリが提供する主な機能として以下のようなものがあります。
* 圧縮API(と圧縮プラグイン)
* 非ブロック型ログ出力API
* 長時間動作することを前提としたメモリ管理
* 階層的name-valueペアのメッセージング機能:これにより移植性とバージョンアップグレードの互換性を向上させている(またオプションのメッセージ圧縮機能も提供する)
* シグナルの統合:シグナルがmainloopイベントとして扱える
* コアダンプ管理ユーティリティ:すべて状況においてコアダンプを同じ方法で取得する
* タイマ(glib mainloopタイマと同様:ただしtime of day クロックが飛んでも機能する)
* 子プロセス管理:子プロセスの停止を契機としてプロセスオブジェクトを起動する(子プロセス停止のメッセージも変更可能)
* トリガ(ソフトウェアによりトリガされる任意のイベント)
* リアルタイム管理:高優先度の設定と解除、および、プロセスのメモリへのロック
* 64ビットHZの精度での時間操作(longclock_t)
* セキュリティ目的のユーザID管理:何らかの +root+ 権限を必要とするプロセス用
* IPC、通常ファイルディスクリプタ、シグナルなどに対するmainloop統合。これは、これらすべての異なるイベントソースが一貫して管理され処理されることを意味します。
=== IPCライブラリ
すべてのプロセス間通信は、汎用IPCライブリを使って行われます。このライブラリは、柔軟なキューイング戦略を使ってIPCへの非ブロックアクセスを提供し、統合的なフローコントロール機能を提供します。IPC APIはソケット利用を要件とはしていませんが、現在提供されている実装ではUNIX(ローカル)ドメインソケットを使用しています。
また、このAPIは、通信相手プロセスの組み込みの認証機能や認可機能も含んでおり、ほとんどのPOSIX対応OSに移植可能です。これらのAPIは、必ずしもGlib mainloopと一緒に利用する必要はありませんが、Heartbeatではmainloopと統合した簡単で便利な方法を提供しています。
=== 非ブロック型ログ出力デーモン
+logd+ はHeartbeatのログ出力デーモンです。これは、syslogデーモンやファイル、あるいはそれら両方へのログ出力ができます。logdはブロックを行いませんが、その代わりログ出力が非常に遅れてしまったメッセージは破棄されます。
ログメッセージが再度出力できるようになれば、+logd+ は破棄したメッセージの数を出力します。キューのサイズは全体でもアプリケーション単位でも変更可能です。
= Heartbeatのインストール
== ソースからビルドしインストールする
Heartbeatクラスタメッセージングレイヤをソースからビルドとインストールする場合は、実際には以下のパッケージからをビルドすることになります。
* +heartbeat+ 本体
* +cluster-glue+ パッケージ:Heartbeatローカルリソースマネージャ(LRM)とSTONITHプラグインが含まれています。
Heartbeatのビルドは +cluster-glue+ に依存するため、_最初に_ +cluster-glue+ のビルドとインストールを行い、その後にHeartbeatのビルドとインストールを行う必要があります。
=== [[_building_and_installing_cluster_glue_from_source]]ソースからCluster Glueをビルドしインストールする
==== Cluster Glueビルド事前条件
Cluster Glueをビルドするには、ビルド環境上に以下のツールやライブラリが必要です。
* Cコンパイラ(通常、 +gcc+ )および関連C開発ライブラリ
* +flex+ スキャナジェネレータおよび +bison+ パーサコンパイラ
* +net-snmp+ 開発ヘッダ:SNMP関連の機能を有効にするため
* +OpenIPMI+ 開発ヘッダ:IPMI関連機能を有効にするため
* Python(言語インタプリタだけでライブラリヘッダは不要)
NOTE: このリストはデフォルトの設定の場合に適用されます。標準以外のconfigureオプション設定を行った場合、これ以外の依存パッケージが必要になる可能性があります。
==== Cluster Glueソースをダウンロードする
Cluster Glueソースコードを入手するには複数の手段があります。
===== リリース版 tarball(TAR書庫)をダウンロードする
Cluster Glueのリリースバージョンを圧縮 tarballとしてダウンロードする場合、Mercurialソースコードリポジトリから「タグ付きスナップショット」を取得することによって可能です。ダウンロードしたいCluster Glueのリリースバージョンが _x.y.z_ であれば、リリースタグは glue-_x.y.z_ という形式になります。
たとえば、1.0.1リリースをダウンロードしたい場合、以下のようなコマンドシーケンスになります。
---------------------------------------------------------------------
# wget http://hg.linux-ha.org/glue/archive/glue-1.0.1.tar.bz2
# tar -vxjf glue-1.0.1.tar.bz2
---------------------------------------------------------------------
===== 最新Mercurialスナップショットをダウンロードする
最新の開発コードは常に、Mercurialリポジトリから tipリビジョンとして利用可能です。
tipから自動生成されるtarballをダウンロードするには、以下のコマンドシーケンスを使います。
---------------------------------------------------------------------
# wget http://hg.linux-ha.org/glue/archive/tip.tar.bz2
# tar -vxjf tip.tar.bz2
---------------------------------------------------------------------
===== Mercurialからソースをチェックアウトする
手元の環境に Mercurial がインストールされている場合、この方法が使えます。リポジトリを _クローン_ することでソースをチェックアウトしてください。
---------------------------------------------------------------------
$ hg clone http://hg.linux-ha.org/glue cluster-glue
requesting all changes
adding changesets
adding manifests
adding file changes
added 12491 changesets with 34830 changes to 2632 files
updating working directory
356 files updated, 0 files merged, 0 files removed, 0 files unresolved
---------------------------------------------------------------------
==== Cluster Glueをビルドする
Cluster Glueのビルドは、GNU Autotoolsの活用により自動化されています。Cluster Glueのビルドとインストールを同じマシン上で行う場合は、以下のコマンドシーケンスを使います。
---------------------------------------------------------------------
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
---------------------------------------------------------------------
NOTE: +autogen.sh+ スクリプトは、 +automake+ 、 +autoheader+ 、 +autoconf+ および +libtool+ の便利なラッパーです。
数多くのconfigureオプションがサポートされており、これらのカスタマイズによりシステムに合わせてHeartbeatを最適化できます。+configure+ に +--help+ オプション をつけてを実行するとオプションのリストを表示できます。カスタマイズしたビルドを行うには以下のようなステップから構成されることになります。
--------------------------------------------------------------------
$ ./autogen.sh
$ ./configure --help
$ ./configure configuration-options
$ make
$ sudo make install
---------------------------------------------------------------------
よく使われる典型的な設定オプションとして、以下の例に示すように +--prefix+ 、 +--sysconfdir+ 、および +--localstatedir+ があります。
---------------------------------------------------------------------
$ ./autogen.sh
$ ./configure --help
$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ sudo make install
---------------------------------------------------------------------
==== ビルド済みパッケージ
===== RPMパッケージ
Cluster Glueソースツリーには、SuSEとRed Hatベースのディストリビューションの両方に対する RPM spec ファイルが含まれています。
* +cluster-glue-suse.spec+ は、OpenSUSEおよびSLES環境用です。
* +cluster-glue-fedora.spec+ は、Fedora、Red Hat Enterprise LinuxおよびCentOSに対するものです。
===== Debianパッケージ
Cluster Glue のDebianパッケージは、http://hg.debian.org/hg/debian-ha/cluster-glue/[+alioth.debian.org+ のMercurialリポジトリ]で維持されています。
したがって、本家Mercurialリポジトリからcloneしたりダウンロードする代わりに、 +alioth+ でホスティングされているものを使ってください。
+alioth+ リポジトリからソースをチェックアウトまたは展開したら、(他のDebianパッケージの場合と同様に)ソースツリーのトップで +dpkg-buildpackage+ を起動してください
=== ソースからHeartbeatをビルドしインストールする
==== Heartbeatビルドの事前条件
Heartbeatをビルドする場合、ビルド環境上では以下のツールやライブラリが必要です。
* Cコンパイラ(通常gcc)および関連C開発ライブラリ
* flexスキャナジェネレータおよびbisonパーサコンパイラ
* net-snmp開発ヘッダ:SNMP関連機能を有効にするため
* Open IPMI開発ヘッダ:IPMI関連機能を有効にするため
* Python(言語インタプリタだけでライブラリヘッダは不要)
* +cluster-glue+ 開発ヘッダ:ソースからこれらをビルドする方法は、<<_building_and_installing_cluster_glue_from_source,ソースからCluster Glueをビルドしインストールする>>を参照してください。
NOTE: このリストはデフォルトの設定の場合に適用されます。標準以外のconfigureオプション設定を行った場合、これ以外の依存パッケージが必要になる可能性があります。
==== Heartbeatソースをダウンロードする
===== リリース版 tarball(TAR書庫)をダウンロードする
Heartbeatのリリースバージョンを圧縮tarballとしてダウンロードする場合、Mercurialソースコードリポジトリから「タグ付きスナップショット」を取得することによって可能です。ダウンロードしたいHeartbeatのリリースバージョンが +x.y.z+ であれば、リリースタグは +STABLE-x.y.z+ という形式になります。
たとえば、3.0.4リリースをダウンロードしたい場合、以下のコマンドシーケンスになります。
---------------------------------------------------------------------
# wget http://hg.linux-ha.org/dev/archive/STABLE-3.0.4.tar.bz2
# tar -vxjf STABLE-3.0.4.tar.bz2
---------------------------------------------------------------------
===== 最新Mercurialスナップショットをダウンロードする
最新の開発コードは常に、Mercurialリポジトリから +tip+ リビジョンとして利用可能です。
+tip+ から自動生成されるtarballをダウンロードするには、以下のコマンドシーケンスを使います。
---------------------------------------------------------------------
# wget http://hg.linux-ha.org/dev/archive/tip.tar.bz2
# tar -vxjf tip.tar.bz2
---------------------------------------------------------------------
===== Mercurialからソースをチェックアウトする
手元の環境に Mercurial がインストールされている場合、この方法が使えます。リポジトリを _クローン_ することでソースをチェックアウトしてください。
---------------------------------------------------------------------
$ hg clone http://hg.linux-ha.org/dev heartbeat-dev
requesting all changes
adding changesets
adding manifests
adding file changes
added 12491 changesets with 34830 changes to 2632 files
updating working directory
356 files updated, 0 files merged, 0 files removed, 0 files unresolved
---------------------------------------------------------------------
==== Heartbeatをビルドする
Heartbeatのビルドは、GNU Autotoolsの活用により自動化されています。Heartbeatのビルドとインストールを同じマシン上で行う場合は、以下のコマンドシーケンスを使います。
---------------------------------------------------------------------
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
---------------------------------------------------------------------
NOTE: bootstrapスクリプトは、 +automake+ 、 +autoheader+ 、 +autoconf+ および +libtool+ の便利なラッパーとなります。 +ConfigureMe+ は、autoconf生成の +configure+ スクリプトに対する便利なラッパーとなります。
いくつかの設定オプションがサポートされており、それらをカスタマイズして、システムに対してHeartbeatを最適化できます。設定オプションリストを読み込むには +--help+ オプションで +configure+ を起動します。したがってカスタマイズされたビルドはこれらのステップで行えます。
---------------------------------------------------------------------
$ ./bootstrap
$ ./configure --help
$ ./configure <configuration-options>
$ make
$ sudo make install
---------------------------------------------------------------------
典型的な設定オプションは以下のような +--prefix+ 、 +--sysconfdir+ およ び +--localstatedir+ となります。
---------------------------------------------------------------------
$ ./bootstrap
$ ./configure --help
$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ sudo make install
---------------------------------------------------------------------
==== ビルドパッケージ
===== RPMパッケージ
RPM spec ファイルは、両方のSuSEとRed Hatベースのディストリビューションに対するHeartbeatソースで提供されています。
* +heartbeat-suse.spec+ :OpenSUSEおよびSLESのインストレーション用。
* +heartbeat-fedora.spec+ :Fedora、Red Hat Enterprise LinuxおよびCentOS用。
===== Debianパッケージ
Heartbeat用Debianパッケージは、http://hg.debian.org/hg/debian-ha/heartbeat/[+alioth.debian.org+ のMercurialリポジトリ]で維持されています。
したがって、上位Mercurialリポジトリからクローンしたりダウンロードする代わりに、+alioth+ でホスティングされているものを使います。
いったん、+alioth+ リポジトリからソースをチェックアウトしたりアンパックしたら、ソースツリーのトップから +dpkg-buildpackage+ を起動してください(他のDebianパッケージで行うように)。
== 事前ビルドパッケージをインストールする
Cluster GlueおよびHeartbeatは、以下の各種プラットフォームで事前ビルドバイナリパッケージとして提供されています。
* Debian( +squeeze+ 以後で完全に含まれており、 +lenny+ 用にバックポートパッケージが提供されている)
* Ubuntu(+lucid+ 以後)
* Fedora(リリース12以後)
* OpenSUSE(リリース11以後)
Red Hat Enterprise LinuxおよびSUSE Linux Enterpriseサーバ用の商用サポートされたエンタープライズパッケージは、http://www.linbit.com[LINBIT]から提供されています。本項は、これらのプラットフォームでバイナリパッケージをインストールするのに必要なステップを説明しています。
=== DebianおよびUbuntu
+cluster-glue+ および +heartbeat+ パッケージは、DebianおよびUbuntuに簡単にインストールできます。APTに正しいパッケージリポジトリが設定されていると前提して、以下のコマンドでこれらのパッケージをインストールしてください。
--------------------------------------------------------------------
aptitude install heartbeat cluster-glue
---------------------------------------------------------------------
必要であれば、Pacemakerは以下のコマンドでインストールしてください。(これについては本マニュアルの範囲外です。)
---------------------------------------------------------------------
aptitude install cluster-agents pacemaker
--------------------------------------------------------------------
=== Fedora、RHELおよびCentOS
Red Hatプラットフォームでは、YUMパッケージマネージャで +cluster-glue+ および +heartbeat+ パッケージをインストールします。 +/etc/yum.repos.d/+ で正しいパッケージリポジトリが設定されていると前提して、以下のコマンドでこれらの2つのパッケージをインストールしてください。
--------------------------------------------------------------------
yum install heartbeat cluster-glue
---------------------------------------------------------------------
必要であれば、Pacemakerは以下のコマンドでインストールしてください。(これについては本マニュアルの範囲外です。)
---------------------------------------------------------------------
yum install resource-agents pacemaker
---------------------------------------------------------------------
=== OpenSUSEおよびSLES
SUSEtプラットフォームでは、Zypperパッケージマネージャで +cluster-glue+ および +heartbeat+ パッケージをインストールします。正しいパッケージリポジトリが設定されていると前提して、以下のコマンドでこれらの2つのパッケージをインストールしてください。
---------------------------------------------------------------------
zypper install heartbeat cluster-glue
---------------------------------------------------------------------
必要であれば、Pacemakerは以下のコマンドでインストールしてください。(これについては本マニュアルの範囲外です。)
---------------------------------------------------------------------
zypper install resource-agents pacemaker
---------------------------------------------------------------------
= 管理タスク
== Heartbeatの初期設定を作成する
いずれのHeartbeatクラスタに対しても、以下の設定ファイルが提供されている必要があります。
* +/etc/ha.d/ha.cf+ -- グローバルクラスタ設定ファイル
* +/etc/ha.d/authkeys+ -- 相互ノード認証に対するキーを持つファイル
=== +ha.cf+ ファイル
以下は、簡単な +ha.cf+ ファイルの例です。
---------------------------------------------------------------------
autojoin none
mcast bond0 239.0.0.43 694 1 0
bcast eth2
warntime 5
deadtime 15
initdead 60
keepalive 2
node alice
node bob
pacemaker respawn
---------------------------------------------------------------------
+autojoin+ を +none+ に設定すると、クラスタノード自動発見機能(auto-discovery)を無効にし、ノードオプションによってクラスタノードが明確にリストされます。これにより、少数ノードのクラスタではクラスタ起動が早くなります。
この例では、 +bond0+ が共有ネットワークへのクラスタのインタフェースであり、 +eth2+ が両方のノードの間のDRBD(複製)専用のインタフェースであると前提されています。したがって、 +bond0+ はマルチキャストハートビートに使うことができ、 +eth2+ では、ブロードキャスト通信は, +eth2+ が共有ネットワークでないとして受け付けられます。
次の一連のオプションがノード故障探知機能を設定します。これらのオプションにより以下が設定されます。
* 時間 ( +warntime+ ):この時間の後、「Heartbeatは使用できなくなっているピアノードは停止している」という警告を発行します。
* 時間( +deadtime+ ):この時間の後、Heartbeatは、ノードが停止されたと認識します。
* 最大時間( +initdead+ ):この時間の間、Heartbeatは、クラスタ起動でノードがチェックインするのを待ちます。これらのすべてのオプションを秒で設定されます。
+keepalive+ は、Heartbeatのkeep-aliveパケットが送信される間隔を設定します。
+node+ オプションは、クラスタメンバを識別します。ここでリストされているオプション値は、 uname -nで指定されたクラスタノードのホスト名と正確に一致しなければなりません。
+pacemaker respawn+ は、Pacemakerクラスタマネージャを有効にし、Pacemakerが故障した場合でも自動的に再起動されるようにします。
NOTE: Heartbeatリリース3.0.4までは、 +pacemaker+ キーワードは +crm+ と呼ばれていました。新バージョンでは、後位互換アリアスとして古い名前が維持されていますが、 +pacemaker+ が優先的に使われる構文となっています。
=== +authkeys+ ファイル
+/etc/ha.d/authkeys+ は、相互クラスタノード認証に使われるシークレット(あらかじめ共有されている)を持っています。これはrootしか読み込むことができず、以下のフォーマットに従う必要があります。
---------------------------------------------------------------------
auth <num>
<num> <algorithm> <secret>
---------------------------------------------------------------------
+num+ は1で始まる単純なキーインデックスです。通常、 +authkeys+ ファイルでは1つしかキーがありません。
+algorithm+ が、使用されるシグネチャーアルゴリズムです。この場合、 +md5+ か +sha1+ を使うことができますが、 +crc+ (単純な周期的冗長チェックですが安全ではない)の使用は推薦されていません。 +secret+ は実際の認証キーです。authkeysファイルは生成されたシークレットを使って、以下のシェルハックで作成することができます。
---------------------------------------------------------------------
( echo -ne "auth 1\n1 sha1 "; \
dd if=/dev/urandom bs=512 count=1 | openssl md5 ) \
> /etc/ha.d/authkeys
chmod 0600 /etc/ha.d/authkeys
---------------------------------------------------------------------
=== クラスタ設定をクラスタノードに反映させる
ha.cfファイルとauthkeys configurationファイルの内容を反映させるためには、 +ha_propagate+ コマンドを使います。このコマンドは以下のいずれかを使って起動します。
---------------------------------------------------------------------
/usr/lib/heartbeat/ha_propagate
---------------------------------------------------------------------
または
---------------------------------------------------------------------
/usr/lib64/heartbeat/ha_propagate
---------------------------------------------------------------------
このユーティリティは、 +scp+ を使い、 +/etc/ha.d/ha.cf+ でリストされているノードに設定ファイルをコピーします。また、その後、このユーティリティは、sshを使いノードに接続し、 +chkconfig heartbeat on+ を発行して、システム起動でHeartbeatサービスを有効にします。
=== Heartbeatサービスを起動する
Heartbeatサービスは、マシンでの他のシステムサービスを起動するのと同じように起できます。システムプラットフォームに応じて、以下のいずれかのコマンドを使います。
---------------------------------------------------------------------
/etc/init.d/heartbeat start
---------------------------------------------------------------------
---------------------------------------------------------------------
service heartbeat start
---------------------------------------------------------------------
---------------------------------------------------------------------
rcheartbeat start
---------------------------------------------------------------------
<<_the_literal_ha_cf_literal_file,+ha.cf+>>の +pacemaker+ エントリを通じて、Heartbeatは、その残りのサービスと共にPacemakerデーモン(歴史的な理由により +crmd+ と名付けられた)を起動します。数秒後、プロセステーブルでHeartbeatプロセスを探知できます。
---------------------------------------------------------------------
# ps -AHfww | grep heartbeat
root 2772 1639 0 14:27 pts/0 00:00:00 grep heartbeat
root 4175 1 0 Nov08 ? 00:37:57 heartbeat: master control process
root 4224 4175 0 Nov08 ? 00:01:13 heartbeat: FIFO reader
root 4227 4175 0 Nov08 ? 00:01:28 heartbeat: write: bcast eth2
root 4228 4175 0 Nov08 ? 00:01:29 heartbeat: read: bcast eth2
root 4229 4175 0 Nov08 ? 00:01:35 heartbeat: write: mcast bond0
root 4230 4175 0 Nov08 ? 00:01:32 heartbeat: read: mcast bond0
102 4233 4175 0 Nov08 ? 00:03:37 /usr/lib/heartbeat/ccm
102 4234 4175 0 Nov08 ? 00:15:02 /usr/lib/heartbeat/cib
root 4235 4175 0 Nov08 ? 00:17:14 /usr/lib/heartbeat/lrmd -r
root 4236 4175 0 Nov08 ? 00:02:48 /usr/lib/heartbeat/stonithd
102 4237 4175 0 Nov08 ? 00:00:54 /usr/lib/heartbeat/attrd
102 4238 4175 0 Nov08 ? 00:08:32 /usr/lib/heartbeat/crmd
102 5724 4238 0 Nov08 ? 00:04:47 /usr/lib/heartbeat/pengine
---------------------------------------------------------------------
最後に、Pacemaker +crm_mon+ コマンドを通じて、クラスタが機能していることを確認できます。
---------------------------------------------------------------------
# crm_mon -1
============
Last updated: Mon Dec 13 14:29:36 2010
Stack: Heartbeat
Current DC: alice (083146b9-6e26-4ac8-a705-317095d0ba57) - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, unknown expected votes
24 Resources configured.
============
Online: [ alice bob ]
---------------------------------------------------------------------
=== これからの作業
これまでHeartbeatを設定してきましたが、引き続きPacemakerの設定を行い、クラスタリソースを追加します。以下の文書をよく読んでください。
* http://www.clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/[Clusters From Scratch]は、Pacemakerクラスタ設定を説明しています。この文書は、おもに、CorosyncでのPacemakerについて説明していますが、"Using Pacemaker Tools"の章の説明はHeartbeatクラスタの説明に適用できます。
* http://www.drbd.org/users-guide/[DRBD User's Guide]の章で、PacemakerクラスタにDRBDを統合する方法が説明されています。
* 各種のアプリケーションに対して、Heartbeat/Pacemakerクラスタを説明するいくつかのテクニカルガイドがhttp://www.linbit.com/en/education/tech-guides[LINBIT web サイト]で提供されています。
== 以前のHeartbeatバージョンからアップグレードする
=== Heartbeat 2.1クラスタからアップグレードする:CRMを使わない
CRMを使わない Heartbeat 2.1クラスタ( +haresources+ で設定されたクラスタ)を3.0にアップグレードするには、その時点の設定をPacemakerに最適な設定に変換します。
Note:このアップグレード手順はアプリケーションのダウンタイムを生じません。しかし、アップグレードが正しく予定され、テストされ、実行されるには、このダウンタイムは数分、おそらくは数秒(設定による)となるでしょう。
==== Heartbeatサービスを停止する
アップグレード手順はその時点のスタンバイノード(その時点でいかなるリソースをも実行していないクラスタノード)で開始してください。クラスタがactive-active設定(両方のノードがリソースを実行している)を使っている場合、1つのノードを選択し、以下のコマンドを発行して、ピアノードにすべてのリソースを転送してください。
---------------------------------------------------------------------
# hb_standby
---------------------------------------------------------------------
次に、 _そのノードでのみ_ 、Heartbeatサービスを停止してください。
---------------------------------------------------------------------
# /etc/init.d/heartbeat stop
---------------------------------------------------------------------
==== ソフトウェアをアップグレードする
アップグレードを行う場合、単独のHeartbeat 2.1ツリーがモジュラー部分に分割されていることに注意してください。これにより、Heartbeatはソフトウェアの3つの個々の部分と置き換えられます。これらの部分は、Cluster Glue、PacemakerおよびHeartbeat 3で、Heartbeat 3はクラスタメッセージングレイヤのみを構成しています。。
* ソースからアップグレードする: _Heartbeat 2.1 をインストールした_ アーカイブ(アンパックされた)で 、+make uninstall+ を実行し、Cluster GlueとHeartbeatをインストールしてください。
* ローカルでビルドされたパッケージをアップグレードする:パッケージを手動でインストールする場合、最初に、 +heartbeat+ パッケージをアンインストールしてから、 +cluster-glue+ 、バージョン3の +heartbeat+ パッケージ、 +resource-agents+ そして +pacemaker+ をインストールしてください。
* パッケージリポジトリを使ってアップグレードする:APT、YUMあるいはZypperリポジトリを使ってアップグレードを行っている場合、Heartbeatバージョン3およびPacemakerに対してはinstallコマンドだけが実行でき、依存関係は自動的に解決されます。
この時点ではまだHeartbeatサービスを再起動しないでください。
==== Pacemakerを使うためにHeartbeatクラスタを有効にする
ここで、クラスタメッセージングレイヤは、クラスタの起動でPacemakerを起動するよう指示される必要があります。これは +ha.cf+ 設定ファイルに以下を付加して行うことができます。
---------------------------------------------------------------------
crm respawn
---------------------------------------------------------------------
IMPORTANT: この時点で 、+ha.cf(5)+ マニュアルページに対して、ha.cfファイルをチェックして、古いオプションを削除する必要があります。 +ha.cf+ の修正が終わると、ファイルをピアノードにコピーしてください。
==== Heartbeatを再起動する
これでクラスタは、Pacemakerが有効にされたモードで起動できます。クラスタを起動するには、
. まだアクティブなノードで +/etc/init.d/heartbeat stop+ を実行してください。これはクラスタリソースを停止します。
. スタンバイノード(CIBを作成したところ)で +/etc/init.d/heartbeat start+ を実行してください。これは、ローカルHeartbeatインスタンスとPacemakerを起動し、他のクラスタノードがチェックインするのを待ちます。
. 他のノードで +/etc/init.d/heartbeat start+ を実行してください。これは、ローカルHeartbeatインスタンスとPacemakerを起動し、CIBを自動的にフェッチし、アプリケーションを起動します。
=== CRMが有効にされたHeartbeat 2.1クラスタからアップグレードする
本項は、有効にされた内蔵CRMで、Heartbeat 2.1クラスタをHeartbeat 3.0(Pacemaker)にアップグレードするステップを説明します。
NOTE: 正しく計画され実行されるアップグレード手順であれば、アップグレードは、アプリケーションのダウンタイムなしで数分で終了します。プロダクションクラスタをアップグレードする前に、本項で説明されている手順をよく読み理解してください。本項で説明されているすべてのコマンドは +root+ として実行される必要があります。すべてのクラスタノードでは、個々のステップを同時に実行しないでください。その代わり、次のステップに進む前に、それぞれのノードで手順を終えてください。
==== クラスタを管理されていないモードにする
このステップにおいて、クラスタは、そのリソースのコントロールを一時的に放棄します。これは、クラスタがそのノードやリソースをアップグレード中は監視しないで、その間、アプリケーションやノードの故障を是正しないことを意味します。しかし、その時点で実行されているリソースは実行を続けます。
---------------------------------------------------------------------
# crm_attribute -t crm_config -n is_managed_default -v false
---------------------------------------------------------------------
ほとんどの設定では、個々のリソースは個別に +is_managed+ 属性を設定しないで、クラスタ全体属性である +is_managed_default+ がそれらのすべてに適用されます。特定の設定において、この属性が設定されているリソースがある場合、それは、デフォルトが適用されるために削除される必要があります。
---------------------------------------------------------------------
# crm_resource -t primitive -r <resource-id> -p is_managed -D
---------------------------------------------------------------------
==== [[_backing_up_the_cib]]CIBのバックアップを作成する
この時点で、ClusterInformation Base (CIB)のコピーを保存する必要があります。保存するCIBは、ファイル名が +cib.xml+ に保存されています。このファイルは通常 +/var/lib/heartbeat/crm+ にあります。
---------------------------------------------------------------------
# cp /var/lib/heartbeat/crm/cib.xml
---------------------------------------------------------------------
このステップは、クラスタにその時点で接続されている1つのノードでのみ実施してください。このファイルは削除しないでください。ファイルは後でリストアされます。
==== [[_stopping_heartbeat_services]]Heartbeatサービスを停止する
Heartbeatは +/etc/init.d/heartbeat stop+ で停止できます。また、ディストリビューションでのシステムサービスを停止するには適切なコマンド( +service heartbeat stop+ 、 +rcheartbeat stop+ , etc.)を使用できます。
shutdownバグにより影響を受けるHeartbeat(レガシーバージョン)を実行している場合、管理されていないモード(unmanaged mode)では、正常な +crmd+ シャットダウンは正しく機能しません。この場合、上記のコマンドで、正常なサービスシャットダウンを起動した後、crmdプロセスを手動で終了してください。
* +ps -AHfww+ を使い、 +crmd+ のプロセスIDを読み込んでください。
* +TERM+ シグナルで +crmd+ を終了してください。
==== [[_wiping_files_related_to_the_crm]]CRMに関連したファイルを削除する
WARNING: 本項を読み進める前に、クラスタノードの1つにCIBのバックアップコピーを作成しておいてください(<<_backing_up_the_cib,CIBのバックアップを作成する>>で説明されているように)。その後、ノードからローカルCRM関連ファイルを削除してください。
ファイルを削除するには、CRMがCIB情報を保存するディレクトリ(通常、 +/var/lib/heartbeat/crm+ )からすべてのファイルを削除してください。
---------------------------------------------------------------------
# rm /var/lib/heartbeat/crm/*
---------------------------------------------------------------------
==== [[_restoring_the_cib]]CIBをリストアする
NOTE: このステップは、すべてのクラスタノードでHeartbeatが停止されたままであり、すべてのクラスタノードで、それらのCIBコンテンツが削除されている場合にのみ実行してください。残留CIB設定を持つノードがまだある場合、<<_wiping_files_related_to_the_crm,CRMに関連したファイルを削除する>>の説明に従ってファイルを削除してください。CIBをリストアするということは、<<_backing_up_the_cib,CIBのバックアップを作成する>>で説明されているCIBバックアップを +/var/lib/heartbeat/crm+ にコピーすることを意味します。
--------------------------------------------------------------------
# cp ~/cib.xml /var/lib/heartbeat/crm/cib.xml
# chown hacluster:haclient /var/lib/heartbeat/crm/cib.xml
# chmod 0600 /var/lib/heartbeat/crm/cib.xml
---------------------------------------------------------------------
このステップは1つのノードでのみ実施する必要があります。つまり、クラスタソフトウェアをアップグレードしようとしている最初のノードです。他のすべてのノードでは、 +/var/lib/heartbeat/crm+ ディレクトリは空の状態でなければなりません(PacemakerはCIBを自動的に配布します)。
==== [[_upgrading_software]]ソフトウェアをアップグレードする
アップグレード中は、単独のHeartbeat 2.1ツリーがモジュラー部分に分割されていることを認識してください。これにより、Heartbeatはソフトウェアの3つの個々の部分と置き換えられることになります。これらの部分は、Cluster Glue 、PacemakerおよびHeartbeat 3で、Heartbeat 3はクラスタメッセージングレイヤのみを構成するものです。
* ソースからアップグレードする: _Heartbeat 2.1 をインストールした _アーカイブ_ (アンパックされた)で、 +make uninstall+ を実行し、そして、Cluster GlueとHeartbeatをインストールしてください。
* ローカルでビルドされたパッケージをアップグレードする:パッケージを手動でインストールする場合、最初に、 +heartbeat+ パッケージをアンインストールして、その後、 +cluster-glue+ 、バージョン3の +heartbeat+ パッケージ、 +resource-agents+ そし て+pacemaker+ をインストールしてください。
* パッケージリポジトリを使ってアップグレードする:APT、YUMあるいはZypperリポジトリを使ってアップグレードを行っている場合、Heartbeatバージョン3およびPacemakerに対してはinstallコマンドだけを実行できるはずであり、依存関係は自動的に解決されます。
これが、クラスタでアップグレードされるべき最後のノードであり、パッケージ管理システムが、ソフトウェアアップグレード後にHeartbeatサービスを再起動しなかった場合、<<_restarting_heartbeat_services,Heartbeatサービスを再起動する>>に進んでください。そうでなければ、次のノードに進み、 <<_stopping_heartbeat_services,Heartbeatサービスを停止する>><<_upgrading_software,ソフトウェアをアップグレードする>>で説明されているように作業する必要があります。
==== [[_restarting_heartbeat_services]]Heartbeatサービスを再起動する
NOTE: パッケージ管理システムが、インストール中あるいはインストール後に自動的にHeartbeatサービスを再起動する場合、このステップは省略することができます。
まず、 +/etc/init.d/heartbeat+ start でCIBをリストアした(参照:<<_restoring_the_cib,CIBをリストアする>>)ノードでHeartbeatを再起動してください。次に、残りのクラスタノードでこのコマンドを繰り返してください。この時点で:
* クラスタは、まだ、管理されていないモード(unmanaged mode)(いかなるリソースをも起動、停止あるいは監視しないことを意味する)です。
* クラスタはそのノードに古いCIBを再ディストリビューションします。
* クラスタは、アップグレード前のCIBスキーマを使っています。
==== クラスタを管理されたモード(managed mode)に戻す
クラスタソフトウェアがアップグレードされたら、クラスタを管理されたモード(managed mode)に戻してください。
---------------------------------------------------------------------
# crm_attribute -t crm_config -n is_managed_default -v true
---------------------------------------------------------------------
==== CIBスキーマをアップグレードする
アップグレードされたクラスタは、理論的には、アップグレード前CIBスキーマを操作できますが、CIBを最新のスキーマにアップグレードすることを強く推奨します。アップグレードを行うには、すべてのノードでの間のクラスタ通信が再確立された _後_ 、以下のコマンドを実行してください。
---------------------------------------------------------------------
# cibadmin --upgrade --force
---------------------------------------------------------------------
= ヘルプ
== 問題を報告する
本章は、ソフトウェアに関連したバグや問題に正しく対処する方法を説明しています。
=== メーリングリスト
Linux-HAプロジェクトは2つのメーリングリストを維持しています。両方とも購読者限定のリストで、 +lists.linux-ha.org+ でホスティングされています。
==== Linux-HA
これは汎用のコミュニティメーリングリストです。Heartbeatやリソースエージェントに関した一般的な問題はここに投稿することができます。このリストの投稿先アドレスは linux-ha@lists.linux-ha.org です。
==== Linux-HA-dev
これは開発者用メーリングリストです。改良に関する提案がある場合や、バグを見つけたと思う場合はここに投稿してください。この投稿先アドレスは linux-ha-dev@lists.linux-ha.org です。
=== バグ追跡システム
Linux-HAプロジェクトは http://developerbugs.linuxfoundation.org でのLinux Foundationにより実施されているパブリックBugzillaインストレーションを使っています。既存のエントリでのバグやコメントを報告するには、最初にアカウントを作成する必要があります。アカウント作成には有効なEメールアドレスが必要です。
=== IRC
Linux-HA開発者は、通常、 +#linux-ha+ channel の +irc.freenode.net+ サーバで見つけることができます。
== パッチを提出する
Cluster GlueやHeartbeatで問題を見つけた場合、そして、それを訂正できる場合、パッチを開発者に送ってください。パッチを開発者に送るには、本項で説明されている手順に従ってください。以下のコマンドでホストリポジトリのワーキングコピー(Mercurial _クローン_ )を作成してください。
--------------------------------------------------------------------------
hg clone http://hg.linux-ha.org/dev heartbeat
--------------------------------------------------------------------------
新しいMercurialキューと新しいパッチセットを作成してください。
-------------------------------------------------------------------------
cd heartbeat
hg qinit
hg qnew --edit --force fix-superfrobnication
--------------------------------------------------------------------------
NOTE: +--force+ オプションはローカルな修正を、作成したパッチセットに適用します。
パッチメッセージでは、以下のような分かりやすい説明を記述してください。
--------------------------------------------------------------------------
High: IPC: fix superfrobnication on 63-bit platforms
In the IPC layer, superfrobnication breaks on 63-bit middle-endian
Linux platforms when ACPI is disabled. Fencepost align
foobar_create_reqqueue() and guard against memory spinlock starvation
to fix this.
--------------------------------------------------------------------------
これでパッチはメーリングリストで提供され評価されます。
--------------------------------------------------------------------------
hg email --to=linux-ha-dev@lists.linux-ha.org fix-superfrobnication
--------------------------------------------------------------------------
一旦、パッチが採用されると、ホスト開発者がそのパッチをリポジトリにプッシュします。この時点で、チェックアウトをホストから更新でき、自分自身のパッチセットを削除できます。
--------------------------------------------------------------------------
hg qpop -a
hg pull --update
hg qdelete fix-superfrobnication
--------------------------------------------------------------------------