crmshのスタートアップガイド
Pacemakerクラスタの設定と運用管理に使うcrmコマンドは、コマンドやパラメータのタブ補完機能を備えた、キャラクタベースの使いやすい管理ツールです。その最新版のバージョン2.1は、Pacemakerのリソース管理機能だけでなく、Corosyncの設定管理機能、Corosync+Pacemakerによるクラスタ自体の初期化・起動・停止などの機能も備えています。
以下のドキュメントは、crmsh開発チームのDejanならびにKristofferの承諾を得て、crmshのGetting Startedを日本語に翻訳したものです。
誤訳、タイプミスなどの指摘、改善のためのアドバイスなどのフィードバックを歓迎いたします。この記事の末尾にコメントとしてお書きください。
crmshを始めましょう
crmshを何台かのマシンにインストールできたら、それらをクラスタとして動作させるための設定を始められます。このガイドは、Pacemaker上で1つのリソースを実行して、複数のノード間でフェールオーバできるようにするまでの手順を、ステップごとに紹介します。さらに、このクラスタを例にして、より高度なクラスタ管理のトピックも紹介します。
まだインストールしていない方は、installation instructionsを参考にしてインストールしてください。crmshならびにこれが必要とする依存関係を満足するパッケージのインストールが必要です。
まず最初に、すべてのノードで次のコマンドを実行して、2.1以上のバージョン番号が表示されることを確認しておいてください。
crm --version
構築するクラスタの例
このガイドでは、以下の2台のサーバを使ったクラスタを構築します。もちろんあなたの環境では、ホスト名やIPアドレスを適宜置き換えてください。
ホスト名 | IPアドレス |
alice | 10.0.0.2 |
bob | 10.0.0.3 |
クラスタスタック
GNU/Linuxのクラスタスタックの構成は、永年にわたって少しずつ変遷してきました。このガイドで取り扱う組み合わせは、現時点でもっとも一般的と考えられるものです。とはいえ、それでもクラスタを構成するための別のやり方もあります。
簡単に言えば、高可用クラスタは、処理能力に冗長性を持たせた複数のコンピュータ(「ノード」と呼ぶことが多いです)で構成され、そのうちの1台から数台が何らかの理由でダウンした場合、ダウンしたノードが担当していた処理を残りのノードが引き継ぐように構成されます。
クラスタスタックは、クラスタを構成するすべてのノードで動作するプログラム群です。ネットワークを通じてすべてのノードが相互に通信し、リソースをいつどのノードで起動または停止するかを決定します。
スタックの中心的なプログラムはPacemakerです。CIBの情報にもとづいてリソースを管理し、それらをクラスタ構成ノード上に配置します。
CIBはPacemakerが維持するXMLドキュメントです。すべてのクラスタリソースについて、構成パラメータ、実行可能なノードや実行方法に関する制約条件などが記録されています。このドキュメントをエディタで編集することはありません。またcrmshを使うことにより、XMLの構造を意識せずにすみます。
Pacemakerと並ぶスタックの構成要素は、クラスタにおける通信システムであるCorosyncです。Corosyncは、クラスタノード間の通信機能を提供し、Pacemakerがリソースを管理する対象になるクラスタ構成メンバを管理します。Corosyncの設定ファイルはetc/corosync/corosync.confです。crmshを使うと、PacemakerだけでなくCorosyncの設定も管理できます。
これら2つのコンポーネントと並ぶスタックの重要な構成要素は、リソースエージェントです。これは、クラスタの中でソフトウェアの動作を構成したり制御できるようにするための統一的なインタフェースを備えた、スクリプトのコレクションです。仮想IPアドレス、数種類のWebサーバ、数種類のデータベース管理システムなどをクラスタで管理するためのエージェントなどが用意されています。
crmshはクラスタスタックの構成と管理のための統合的なインタフェースを提供する、コマンドライン・ツールです。
SSH
crmshはクラスタ構成ノードであればどのノード上でも実行できます。すべてのクラスタ構成ノードを制御できるためには、コマンドをリモート実行する必要があり、crmshはsshを通してこれを実現します。
相互に他のノードの名前からIPアドレスを決定できるよう、/etc/hostsを設定してください。たとえばaliceとbobで構成されるクラスタで、aliceにrootでログインしてからpinb bobを正しく実行できるには、ネットワークのどこにbobがあるかを把握できる必要があります。aliceとbobのIPアドレスは上述のとおりなので、両方のノードの/etc/hostsを次のような内容で作成します。
10.0.0.2 alice 10.0.0.3 bob
次に、パスワードなしで相互にログインできるよう、SSH鍵をインストールします。将来的にこのステップも自動化したいところですが、今のところは手作業で設定しなければなりません。
まず、どちらかのノード(今回はalice側)で次のコマンドをroot権限で実行します。
# SSHサーバを起動する sudo systemctl start sshd # 共有キーを生成する mkdir -m 700 -p /root/.ssh ssh-keygen -q -f /root/.ssh/id_rsa -C "Cluster Internal" -N '' cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
クラスタの他のノード(今回はbob)で次のコマンドをroot権限で実行します。
mkdir -m 700 -p /root/.ssh scp -oStrictHostKeyChecking=no \ root@alice:'/root/.ssh/id_rsa*' /root/.ssh cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
これらが成功すれば、両方のノードで相互にSSHで接続するときに、パスワードを要求されなくなります。次のステップに進む前に、パスワードなしで相互接続できるように設定してください。
インストールと設定
crmshの次のコマンドを実行すると、CorosyncとPacemakerの実行に必要な基本パッケージがインストールされ、systemdが設定されます。
crm cluster init nodes=alice,bob
訳注 Red Hat Enterprise LinuxやCentOS上でcrmshバージョン2.1.2を使っている場合、上記コマンドを実行するとFailed to install cluster-glueなどというエラーになります。この場合、/usr/share/crmsh/utils/crm_pkg.pyに次のパッチを適用してください。(2015-05-27補足: このパッチはソースツリーに取り込まれましたので、将来のバージョンではこのパッチは不要になる見込みです。)
--- /usr/share/crmsh/utils/crm_pkg.py.orig 2015-05-25 00:19:52.186000000 -0500 +++ /usr/share/crmsh/utils/crm_pkg.py 2015-05-25 00:20:47.258000000 -0500 @@ -178,7 +178,7 @@ cmd = [self._yum, '--assumeyes', - '-d', 2, + '-d', '2', 'install', name] rc, stdout, stderr = run(cmd) @@ -195,7 +195,7 @@ pre_version = self.get_version(name) cmd = [self._yum, '--assumeyes', - '-d', 2, + '-d', '2', 'update', name] rc, stdout, stderr = run(cmd) @@ -212,7 +212,7 @@ cmd = [self._yum, '--assumeyes', - '-d', 2, + '-d', '2', 'erase', name] rc, stdout, stderr = run(cmd)
ファイアウォール
クラスタノードにファイアウォールを設定する場合、以下のポートを開けておく必要があります。
- TCP: 5560
- UDP: 5404, 5405
- TCP: 21064 (DLMを使う場合)
- TCP: 30865 (csync2を使う場合)
- TCP: 7630 (Webインタフェースのhawkを使う場合)
TIP: ファイアウォールの設定に問題があれば、crm statusの実行結果にUNCLEANという診断が表示されます。このような結果に出会ったら、ファイアウォールが必要な通信をブロックしているか、ノード間のネットワーク接続に別の問題が生じている可能性が高いです。
クォーラム
クラスタを構築する最初のステップとして、Corosyncを設定します。ここでクォーラムを検討・設定しなければなりません。クラスタ構築をできるだけ簡単にするには、クラスタを構成するノードの数を奇数にすることを推奨します。つまり、3台や5台のサーバでクラスタを構築するということです。これは「過半数の定足数」を確保できるようにするためです。ノード間のどこか1箇所でネットワーク接続が切れた場合、どこで切れた場合でも片方のセグメントは他のセグメントよりも多いノードを確保できます。
Corosyncに正しくクォーラムを管理させるには、votequorumを有効にします。次のコマンドを実行してください。
crm corosync set quorum.provider corosync_votequorum
Corosyncは過半数とみなすノード数を知っておく必要もあります。通常は2を指定します。
crm corosync set quorum.expected_votes 2
クォーラムの設定を変更したら、これをクラスタ全体に伝えて有効にするために、Corosyncを再起動する必要があります。以下のコマンドを順番に実行してください。
crm corosync push crm cluster stop crm cluster start
NOTE: クラスタがすでに開始していた場合のみ再起動する必要があります。
Pacemakerの開始
CorosyncとPacemakerの両方を開始するには、次のコマンドを実行します。
crm cluster start
クラスタの動作状態の確認
Pacemakerの実行状態、どのノードがクラスタに参加しているか、または有効なリソースを確認するには、statusコマンドを実行します。
crm status
コマンドの実行が失敗したりタイムアウトしたら、コマンドを実行したノードのCorosyncまたはPacemakerに問題が起こっています。前提になるパッケージが不足していないか、ファイアウォールが必要な通信をブロックしていないか、などを確認してください。問題が見つかった場合、cluster healthコマンドも有用です。
クラスタの健康診断
クラスタを構成するサーバの健全性を確認するには、次のコマンドを実行します。
crm cluster health
このコマンドは、クラスタを構成するすべてのノードで複数の診断プログラムを実行します。そして、ディスク空き容量、通信上の問題点、不適切なバージョンのソフトウエアなどを診断します。
クラスタを構成する前や、ノード間通信に何らかの本質的な問題がある場合、このコマンドは正しく動作できません。このような場合には、次の例のようにクラスタ構成ノードのリストをオプションとして指定してください。
crm cluster health nodes=alice,bob
リソースの追加
正しくクラスタを構成し、期待どおりに動作することを確認するために、Dummyリソースを組み込んでみましょう。Dummyは、どのソフトウェアも管理しないシンプルなリソースエージェントです。複雑なリソースを組み込むときのテスト目的で、stateというパラメータをDummyに指定することもできます。
Dummyリソースを次のコマンドでクラスタに組み込めます。
crm configure primitive p0 Dummy
このコマンドは新しいリソースを作成します。リソースの名前はp0で、Dummyエージェントによって制御されます。
crm statusコマンドを実行すると、リソースp0がどちらか片方のノードで開始したことが確認できます。
# crm status Last updated: Wed Jul 2 21:49:26 2014 Last change: Wed Jul 2 21:49:19 2014 Stack: corosync Current DC: alice (2) - partition with quorum Version: 1.1.11-c3f1a7f 2 Nodes configured 1 Resources configured Online: [ alice bob ] p0 (ocf::heartbeat:Dummy): Started alice
リソースを開始または停止するには、resource startまたはresource stopコマンドを使います。
crm resource stop p0 crm resource start p0