序文

本書は、Heartbeatクラスタメッセージングレイヤ、Linux-HAクラスタリソースエージェント、Linux-HAが維持する他のクラスタ構成品を記述するリファレンスガイドです。

本書に関して皆さまのご意見をお寄せください。コメント、訂正、提案などを linux-ha@lists.linux-ha.org メーリングリストに投稿してください。


Heartbeat


クラスタメッセージングレイヤとしてのHeartbeat

Heartbeat はクラスタ基盤サービス(通信とメンバシップ管理)を提供するデーモンです。これによってクライアントプロセスは、他ノードで動作している通信相手プロセスの存在(と消失!)を知ることができ、メッセージの交換が簡単にできるようになります。

利用者にとって意味のある使い方にするには、Heartbeat デーモンとクラスタリソース制御部(CRM)を組み合わせて利用する必要があります。CRMはサービス(仮想IPアドレス、ウェブサーバ等)の起動や終了をつかさどるもので、これによってサービスの高可用化が実現できるようになります。

Heartbeatデーモンは、ユーザが使えるようにするためにクラスタリソースマネージャ(CRM)と組み合わせる必要があります。CRMは、クラスタが提供する高可用サービス(IPアドレス、webサーバなど)を起動・停止します。Heartbeatと連携する標準クラスタリソースマネージャはPacemakerです。Pacemakerは高い拡張性と多機能性を誇り、Heartbeatと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のビルドとインストールを行う必要があります。

ソースから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 スクリプトは、 automakeautoheaderautoconf および 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パッケージは、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 開発ヘッダ:ソースからこれらをビルドする方法は、ソースから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スクリプトは、 automakeautoheaderautoconf および 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パッケージは、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サーバ用の商用サポートされたエンタープライズパッケージは、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

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の設定を行い、クラスタリソースを追加します。以下の文書をよく読んでください。

  • Clusters From Scratchは、Pacemakerクラスタ設定を説明しています。この文書は、おもに、CorosyncでのPacemakerについて説明していますが、”Using Pacemaker Tools”の章の説明はHeartbeatクラスタの説明に適用できます。
  • DRBD User’s Guideの章で、PacemakerクラスタにDRBDを統合する方法が説明されています。
  • 各種のアプリケーションに対して、Heartbeat/Pacemakerクラスタを説明するいくつかのテクニカルガイドが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が有効にされたモードで起動できます。クラスタを起動するには、

  1. まだアクティブなノードで /etc/init.d/heartbeat stop を実行してください。これはクラスタリソースを停止します。
  2. スタンバイノード(CIBを作成したところ)で /etc/init.d/heartbeat start を実行してください。これは、ローカルHeartbeatインスタンスとPacemakerを起動し、他のクラスタノードがチェックインするのを待ちます。
  3. 他のノードで /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

CIBのバックアップを作成する

この時点で、ClusterInformation Base (CIB)のコピーを保存する必要があります。保存するCIBは、ファイル名が cib.xml に保存されています。このファイルは通常 /var/lib/heartbeat/crm にあります。

# cp /var/lib/heartbeat/crm/cib.xml

このステップは、クラスタにその時点で接続されている1つのノードでのみ実施してください。このファイルは削除しないでください。ファイルは後でリストアされます。

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 を終了してください。

CRMに関連したファイルを削除する

Warning

本項を読み進める前に、クラスタノードの1つにCIBのバックアップコピーを作成しておいてください(CIBのバックアップを作成するで説明されているように)。その後、ノードからローカルCRM関連ファイルを削除してください。

ファイルを削除するには、CRMがCIB情報を保存するディレクトリ(通常、 /var/lib/heartbeat/crm )からすべてのファイルを削除してください。

# rm /var/lib/heartbeat/crm/*

CIBをリストアする

Note

このステップは、すべてのクラスタノードでHeartbeatが停止されたままであり、すべてのクラスタノードで、それらのCIBコンテンツが削除されている場合にのみ実行してください。残留CIB設定を持つノードがまだある場合、CRMに関連したファイルを削除するの説明に従ってファイルを削除してください。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を自動的に配布します)。

ソフトウェアをアップグレードする

アップグレード中は、単独の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サービスを再起動しなかった場合、Heartbeatサービスを再起動するに進んでください。そうでなければ、次のノードに進み、 Heartbeatサービスを停止するソフトウェアをアップグレードするで説明されているように作業する必要があります。

Heartbeatサービスを再起動する

Note

パッケージ管理システムが、インストール中あるいはインストール後に自動的にHeartbeatサービスを再起動する場合、このステップは省略することができます。

まず、 /etc/init.d/heartbeat start で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