5 設定および管理の基本事項 #
HAクラスタの主な目的はユーザサービスの管理です。ユーザサービスの典型的な例は、Apache Webサーバまたはデータベースです。サービスとは、ユーザの観点からすると、指示に基づいて特別な何かを行うことを意味していますが、クラスタにとっては開始や停止できるリソースにすぎません。サービスの性質はクラスタには無関係なのです。
この章では、クラスタを管理するときに知っておく必要があるいくつかの基本的な概念について説明します。後続の各章では、SUSE Linux Enterprise High Availabilityが提供する各管理ツールを使用して、主要な設定および管理タスクを行う方法を説明します。
5.1 ユースケースのシナリオ #
通常、クラスタのカテゴリは次のいずれかです。
2ノードクラスタ
2ノードより多いクラスタ。これは通常、奇数のノード数を意味します。
異なるトポロジを追加して、異なるユースケースを生成することもできます。次のユースケースは最も一般的です。
- 1つの場所の2ノードクラスタ
設定:FC SANまたは同様の共有ストレージ、レイヤ2ネットワーク。
使用シナリオ:サービスの高可用性、およびデータレプリケーションのデータ冗長性なしに焦点を当てた埋め込みクラスタ。このようなセットアップは無線ステーションや組立てラインコントローラなどに使用されます。
- 2つの場所の2ノードクラスタ(最も広く使用されている)
設定:対称的なストレッチクラスタ、FC SAN、およびレイヤ2ネットワークのすべてが2つの場所に及ぶ。
使用シナリオ:サービスの高可用性、およびローカルデータの冗長性に焦点を当てた従来のストレッチクラスタ。データベースおよびエンタープライズリソース計画に適しており、最も一般的な設定の1つです。
- 3つの場所の奇数のノード数
設定:2×N+1ノード、FC SANが2つの主な場所に及ぶ。FC SANを使用しない補助的な3番目のサイト、過半数メーカーとして機能する。レイヤ2ネットワーク、少なくとも2つの主な場所に及ぶ。
使用シナリオ:サービスの高可用性、およびデータの冗長性に焦点を当てた従来のストレッチクラスタ。たとえば、データベース、エンタープライズリソースプランニング。
5.2 クォーラムの判断 #
1つ以上のノードとその他のクラスタ間で通信が失敗した場合は、常にクラスタパーティションが発生します。ノードは同じパーティション内の他のノードのみと通信可能で、切り離されたノードは認識しません。クラスタパーティションは、ノード(投票)の過半数を保有する場合、クォーラムを持つ(「定足数に達している」)と定義されます。これを実現する方法は「クォーラム計算」によって実行されます。クォーラムはフェンシングの要件です。
クォーラムはPacemakerによって計算または決定されません。Corosyncは、Pacemaker設定を変更することなく、2ノードクラスタのクォーラムを直接処理できます。
クォーラムの計算方法は、次のような要因によって影響されます。
- クラスタノード数
実行中のサービスを継続させるため、2ノードを超えるクラスタはクラスタパーティションの解決においてクォーラム(過半数)に依存します。次の数式に基づき、クラスタが機能するために必要な動作ノードの最少数を計算できます。
N ≥ C/2 + 1 N = minimum number of operational nodes C = number of cluster nodes
たとえば、5ノードクラスタでは、最低3つの動作ノード(または障害が発生する可能性のある2ノード)が必要です。
2ノードクラスタまたは奇数のクラスタノードのいずれかを使用することを強くお勧めします。2ノードクラスタは、2サイト間のストレッチセットアップで重要です。奇数のノード数を持つクラスタは、1つのシングルサイトで構築するか、または3つのサイト間で分散させることができます。
- Corosyncの設定
Corosyncはメッセージングおよびメンバーシップ層です。5.2.1項 「2ノードクラスタのCorosync設定」および5.2.2項 「NノードクラスタのCorosync設定」を参照してください。
5.2.1 2ノードクラスタのCorosync設定 #
ブートストラップスクリプトを使用する場合、Corosync設定には次のオプションを持つquorum
セクションがあります。
quorum { # Enable and configure quorum subsystem (default: off) # see also corosync.conf.5 and votequorum.5 provider: corosync_votequorum expected_votes: 2 two_node: 1 }
デフォルトで、two_node: 1
が設定されている場合、wait_for_all
オプションが自動的に有効になります。wait_for_all
が有効でない場合、クラスタは両方のノードでパラレルに開始される必要があります。または、最初のノードが、見つからない2番目のノードで起動フェンシングを実行します。
5.2.2 NノードクラスタのCorosync設定 #
2ノードクラスタを使用しない場合、Nノードクラスタに奇数のノードを使用することを強くお勧めします。クォーラム設定の場合、次のオプションがあります。
crm cluster join
コマンドを使用したノードの追加、またはCorosync設定の手動調整。
/etc/corosync/corosync.conf
を手動で調整する場合、次の設定を使用します。
quorum { provider: corosync_votequorum 1 expected_votes: N 2 wait_for_all: 1 3 }
Corosyncからのクォーラムサービスの使用 | |
予想される投票数。このパラメータは | |
wait for all (WFA)機能を有効にします。WFAが有効な場合、クラスタはすべてのノードが認識可能になった後でのみ定足数に達します。一部の起動時の競合状態を回避するために、 |
5.3 グローバルクラスタオプション #
グローバルクラスタオプションは、一定の状況下でのクラスタの動作を制御します。それらは、セットにグループ化され、Hawk2やcrm
シェルなどのクラスタ管理ツールで表示したり、変更したりできます。
事前に定義されている値は、通常は、そのまま保持できます。ただし、クラスタの主要機能を想定どおりに機能させるには、クラスタの基本的なセットアップ後に、次のパラメータを調整する必要がある場合があります。
5.3.1 グローバルオプションno-quorum-policy
#
このグローバルオプションは、クラスタパーティションにクォーラムがない(ノードの過半数がパーティションに含まれない)場合どうするかを定義します。
次の値を使用できます。
ignore
no-quorum-policy
をignore
に設定すると、クラスタパーティションは、クォーラムがない場合でも、クォーラムがあるように動作します。このクラスタパーティションは、フェンシングを発行し、リソース管理を継続できます。SLES 11では、この値が2ノードのクラスタ用の推奨設定でした。SLES 12以降、値
ignore
は廃止されます。使用しないでください。設定と条件に基づいて、Corosyncはクラスタノードまたは単一ノードに「クォーラム」を与えます。または与えません。2ノードのクラスタの場合、ノードが失われた場合の唯一の意味のある動作は、常に反応することです。最初のステップとして、クォーラムを失ったノードのフェンシングを試行してください。
freeze
クォーラムが失われた場合は、クラスタパーティションがフリーズします。リソース管理は続行されます。実行中のリソースは停止されません(ただし、イベントの監視に対応して再起動される可能性があります)。ただし、影響を受けたパーティション内では、以後のリソースが開始されません。
一定のリソースが他のノードとの通信に依存しているクラスタの場合(たとえば、OCFS2マウントなど)は、この設定が推奨されます。この場合、デフォルト設定
no-quorum-policy=stop
は、次のようなシナリオになるので有効でありません。つまり、ピアノードが到達不能な間はそれらのリソースを停止できなくなります。その代わり、停止の試行は最終的にタイムアウトし、stop failure
になり、エスカレートされた復元とフェンシングを引き起こします。stop
(デフォルト値)クォーラムが失われると、影響を受けるクラスタパーティション内のすべてのリソースが整然と停止します。
suicide
クォーラムが失われると、影響を受けるクラスタパーティション内のすべてのノードがフェンシングされます。このオプションは、SBDと組み合わせる場合にのみ機能します。第13章 「ストレージ保護とSBD」を参照してください。
5.3.2 グローバルオプションstonith-enabled
#
このグローバルオプションは、フェンシングを適用して、STONITHデバイスによる、障害ノードや停止できないリソースを持つノードのダウンを許可するかどうか定義します。通常のクラスタ操作には、STONITHデバイスの使用が必要なので、このグローバルオプションは、デフォルトでtrue
に設定されています。デフォルト値では、クラスタは、STONITHリソースが定義されていない場合にはリソースの開始を拒否します。
何らかの理由でフェンシングを無効にする必要がある場合は、stonith-enabled
をfalse
に設定しますが、これはご使用の製品のサポートステータスに影響を及ぼすことに注意してください。また、stonith-enabled="false"
を指定すると、Distributed Lock Manager (DLM)のようなリソースやDLMによるすべてのサービス(lvmlockd、GFS2、OCFS2など)は開始できません。
STONITHがないクラスタはサポートされません。
5.4 Hawk2の概要 #
クラスタリソースを設定および管理する場合、Hawk2、またはcrmシェル(crmsh)コマンドラインユーティリティのいずれかを使用します。
Hawk2のユーザフレンドリなWebインタフェースを使用すると、High AvailabilityクラスタをLinuxまたは非Linuxマシンから同様に監視および管理することができます。Hawk2には、(グラフィカルな)Webブラウザを使用して、クラスタの内部または外部の任意のマシンからアクセスできます。
5.4.1 Hawk2の要件 #
Hawk2にログインするには、次の要件を満たす必要があります。
- hawk2 [Package]
Hawk2で接続するすべてのクラスタノードにhawk2パッケージをインストールする必要があります。
- Webブラウザ
Hawk2を使用してクラスタノードにアクセスするマシンに必要なものは、JavaScriptとクッキーを有効にして接続を確立できるグラフィカルなWebブラウザです。
- Hawk2サービス
Hawk2を使用するには、このWebインタフェースで接続するノード上で、それぞれのWebサービスが開始されている必要があります。手順5.1「Hawk2サービスの開始」を参照してください。
crmシェルで提供されているブートストラップスクリプトを使用してクラスタを設定した場合、Hawk2サービスはすでに有効になっています。
- 各クラスタノードのユーザ名、グループおよびパスワード
Hawk2ユーザは
haclient
グループのメンバーである必要があります。インストール時にhacluster
という名前のLinuxユーザが作成されますが、このユーザがhaclient
グループに追加されます。セットアップ用に
crm cluster init
スクリプトを使用している場合は、hacluster
ユーザに対してデフォルトパスワードが設定されます。Hawk2を起動する前に、安全なパスワードに変更してください。crm cluster init
スクリプトを使用しなかった場合は、最初にhacluster
のパスワードを設定するか、またはhaclient
グループのメンバーである新しいユーザを作成します。Hawk2を使用して接続する各ノードでこれを実行します。- ワイルドカード証明書の処理
ワイルドカード証明書は、複数のサブドメインに対して有効な公開鍵証明書です。たとえば、
*.example.com
のワイルドカード証明書は、ドメインwww.example.com
、login.example.com
などを保護します。Hawk2はワイルドカード証明書と従来の証明書をサポートします。
/srv/www/hawk/bin/generate-ssl-cert
によって、デフォルトの自己署名秘密鍵および証明書が生成されます。独自の証明書(従来型またはワイルドカード)を使用するには、
/etc/ssl/certs/hawk.pem
で生成された証明書を独自の証明書に置き換えます。
接続先にするノードで、シェルを開き、
root
としてログインします。次のように入力して、サービスのステータスをチェックします。
#
systemctl status hawk
サービスが実行されていない場合は、次のコマンドでサービスを開始します。
#
systemctl start hawk
ブート時にHawk2を自動的に起動したい場合は、次のコマンドを実行します。
#
systemctl enable hawk
5.4.2 ログイン #
Hawk2 Webインタフェースは、HTTPSプロトコルとポート7630
を使用します。
Hawkを使用して個々のクラスタノードにログインする代わりに、浮動、仮想IPアドレス(IPaddr
またはIPaddr2
2)をクラスタリソースとして設定できます。そのための特別な設定は不要です。サービスがどの物理ノードで実行されていても、クライアントはHawkサービスに接続できます。
クラスタをcrmシェルで提供されているブートストラップスクリプトを使用して設定する際には、クラスタ管理用に仮想IPを設定するかどうかを尋ねられます。
いずれかのマシンでWebブラウザを起動し、次のURLを入力します。
https://HAWKSERVER:7630/
HAWKSERVERの部分は、Hawk Webサービスを実行するクラスタノードのIPアドレスまたはホスト名で置き換えます。Hawk2でクラスタ管理用に仮想IPアドレスを設定した場合、その仮想IPアドレスでHAWKSERVERを置き換えます。
注記: 証明書の警告初めてURLにアクセスしようとするときに証明書の警告が表示される場合は、自己署名証明書が使用されています。自己署名証明書は、デフォルトでは信頼されません。
証明書を検証するには、クラスタオペレータに証明書の詳細を求めます。
続行するには、ブラウザに例外を追加して警告をバイパスします。
自己署名証明書を公式認証局によって署名された証明書で置き換える方法の詳細については、自己署名証明書の置き換えを参照してください。
Hawk2ログイン画面で、
hacluster
ユーザ(または、haclient
グループのメンバーである他の任意のユーザ)の と を入力します。
5.4.3 Hawk2の概要: 主な構成要素 #
Hawk2にログインすると、左側にはナビゲーションバー、右側には複数のリンクが含まれる最上位の行が表示されます。
デフォルトでは、root
またはhacluster
としてログインしたユーザは、すべてのクラスタ設定作業への、完全な読み込み/書き込みのアクセス権を持ちます。ただし、アクセス制御リスト(ACL)を使用すれば、より詳細なアクセス権限を定義することができます。
CRMでACLが有効になっている場合、Hawk2で利用できる機能は、ユーザ役割と割り当てられたアクセスパーミッションごとに異なります。Hawk2のhacluster
のみが実行できます。
5.4.3.2 最上位の行 #
Hawk2の最上位の行には、次のエントリが表示されます。
5.4.7項 「バッチモードの使用」を参照してください。
: クリックすると、バッチモードに切り替わります。これにより、変更をシミュレートしてステージングし、それらの変更を単一のトランザクションとして適用できます。詳細については、
5.4.4 グローバルクラスタオプションの設定 #
グローバルクラスタオプションは、一定の状況下でのクラスタの動作を制御します。これらは、セットにグループ化され、Hawk2、crmshなどのクラスタ管理ツールで表示し、変更することができます。事前に定義されている値は、通常は、そのまま保持できます。ただし、クラスタの主要機能を正しく機能させるには、クラスタの基本的なセットアップ後に、次のパラメータを調整する必要があります。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› を選択します。画面の右側にパラメータの簡単な説明を表示するには、マウスポインタをパラメータに合わせます。
図 5.1: Hawk2 - クラスタの設定 #5.3.1項 「グローバルオプション
を適切な値に設定します。詳しくは「no-quorum-policy
」」を参照してください。何らかの理由でフェンシングを無効にする必要がある場合は、
をno
に設定します。通常のクラスタ操作にはSTONITHデバイスの使用が必要なため、デフォルトでは、true
に設定されています。デフォルト値では、クラスタは、STONITHリソースが設定されていない場合にはリソースの開始を拒否します。重要: STONITHがない場合はサポートなしクラスタにはノードフェンシングメカニズムが必要です。
グローバルクラスタオプション
stonith-enabled
およびstartup-fencing
はtrue
に設定する必要があります。これらを変更するとサポートされなくなります。
クラスタ設定からパラメータを削除するには、パラメータの横の
アイコンをクリックします。パラメータを削除すると、クラスタはそのパラメータがデフォルト値に設定されている場合と同様に動作します。クラスタ設定に新たなパラメータを追加するには、ドロップダウンボックスから選択します。
値を調整するには、ドロップダウンボックスから別の値を選択するか、値を直接編集します。
新しいリソースのデフォルトまたは操作のデフォルトを追加するには、空のドロップダウンボックスから1つ選択し、値を入力します。デフォルト値が存在する場合は、Hawk2から自動的に提示されます。
パラメータを削除するには、その横の6.12項 「リソースオプション(メタ属性)」および6.14項 「リソース操作」にドキュメントされているデフォルト値を使用します。
アイコンをクリックします。 と に値が指定されていない場合、クラスタは
変更内容を確認します。
5.4.5 現在のクラスタ設定の表示(CIB) #
クラスタ管理者はクラスタ設定を知る必要がある場合があります。Hawk2は、現在の設定をcrmシェル構文で、XMLとして、およびグラフとして表示できます。クラスタ設定をcrmシェル構文で表示するには、左ナビゲーションバーから、
› を選択し、 をクリックします。代わりに設定をraw XMLで表示するには、 をクリックします。CIBで設定されたノードとリソースのグラフィカルな表現を示すには、 をクリックします。リソース間の関係も表示されます。5.4.6 ウィザードを使用したリソースの追加 #
Hawk2ウィザードは、仮想IPアドレスやSDB STONITHリソースなどの単純なリソースを設定する場合に便利です。また、DRBDブロックデバイスやApache Webサーバのリソース設定などの、複数リソースを含む複雑な設定においても役立ちます。設定手順をウィザードに従って進めることができ、入力が必要なパラメータについては情報が提供されます。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。ウィザードの横にある下矢印アイコンをクリックして個々のカテゴリを展開し、目的のウィザードを選択します。
画面の指示に従います。最後の設定手順が完了したら、
を選択して、入力した値を検証します。Hawk2が実行するアクションと、設定の内容が表示されます。設定によっては、
を選択して設定を適用する前に、root
パスワードの入力を求めるプロンプトが表示されることがあります。
詳細については、第6章 「クラスタリソースの設定」を参照してください。
5.4.7 バッチモードの使用 #
Hawk2は、「クラスタシミュレータ」を含む。これは次の操作に使用できます。
を提供します各変更を直ちに反映させるのではなく、クラスタに変更をステージングして、それらの変更を単一トランザクションとして適用する。
たとえば、潜在的な障害シナリオを調べるため、変更やクラスタイベントをシミュレートする。
たとえば、互いに依存するリソースのグループを作成する場合にバッチモードを使用できます。バッチモードを使用すると、クラスタに中間的なまたは不完全な設定を適用することを回避できます。
バッチモードが有効な間は、リソースや制約を追加したり編集したり、クラスタ設定を変更できます。ノードのオンラインまたはオフライン化、リソース操作およびチケットの許可または取り消しなど、クラスタのイベントをシミュレートすることもできます。詳細については手順5.6「ノード、リソース、またはチケットイベントの挿入」を参照してください。
「クラスタシミュレータ」は、すべての変更後に自動的に実行され、ユーザインタフェースに予想される結果を表示します。たとえば、次のような場合もあります。バッチモードの最中にリソースを止めると、実際リソースはまだ実行中であるにも関わらず、ユーザインタフェースにはリソースが停止したと表示されます。
一部のウィザードには単なるクラスタ設定を超えるアクションが含まれます。これらのウィザードをバッチモードで使用する場合、クラスタ設定を超えるすべての変更がライブシステムに直ちに適用されます。
したがって、root
許可が必要なウィザードはバッチモードでは実行できません。
Hawk2にログインします。
https://HAWKSERVER:7630/
バッチモードを有効にするには、最上位の行から
を選択します。最上位の行の下に追加のバーが表示されます。これは、バッチモードがアクティブであることを示し、バッチモードで実行可能なアクションへのリンクが含まれます。
図 5.3: Hawk2バッチモードが有効 #バッチモードがアクティブなときに、リソースや制約の追加または編集、あるいはクラスタ設定の編集など、クラスタに対する変更を実行します。
変更はシミュレートされ、すべての画面に表示されます。
行った変更の詳細を表示するには、バッチモードバーから
を選択します。 ウィンドウが開きます。設定の変更について、ライブ状態とシミュレートされた変更間の相違がcrmsh構文で表示されます。
-
文字で開始される行は、現在の状態を表し、+
で開始される行は、提案される状態を示します。イベントを注入したり、さらに詳細を表示する場合は、手順 5.6を参照してください。または、 をクリックしてウィンドウを閉じます。
シミュレートした変更を
または するかのいずれかを選択し、選択内容を確認します。これによりバッチモードが無効になり、通常のモードに戻ります。
バッチモードで実行中に、Hawk2では
と を注入することもできます。ノードの状態を変更できます。使用可能な状態は、
、 、および ですリソースの一部のプロパティを変更できます。たとえば、操作(
start
、stop
、monitor
など)、その操作を適用するノード、およびシミュレートされる予想される結果を設定できます。(Geoクラスタにおける)チケットの許可と取り消しの影響をテストできます。
Hawk2にログインします。
https://HAWKSERVER:7630/
バッチモードがまだアクティブでない場合、最上位の行で
をクリックして、バッチモードに切り替えます。バッチモードバーで、
をクリックして、 ウィンドウを開きます。ノードのステータスの変更をシミュレートするには
操作する
を選択し、そのターゲット を選択します。変更内容を確認します。イベントは
ダイアログに一覧表示されるイベントのキューに追加されます。
リソースの操作をシミュレートするには
操作する
を選択し、シミュレートする を選択します。必要に応じて、
を定義します。操作を実行する
を選択し、ターゲットとする を選択します。イベントは ダイアログに一覧表示されるイベントのキューに追加されます。変更内容を確認します。
チケットアクションをシミュレートするには
操作する
を選択し、シミュレートする を選択します。変更内容を確認します。イベントは
ダイアログに一覧表示されるイベントのキューに追加されます。
図 5.4)で、注入されたイベントごとに新しい行が表示されます。ここに一覧表示されるイベントは、直ちにシミュレートされ、 画面に反映されます。
ダイアログ(設定の変更も行った場合は、ライブ状態とシミュレートされた変更の間の相違が注入されたイベントの下に表示されます。
図 5.4: Hawk2のバッチモード—注入されたイベントと設定の変更 #注入されたイベントを削除するには、その隣の
アイコンをクリックします。Hawk2では、それに従って 画面が更新されます。実行されたシミュレーションに関する詳細を表示するには、
をクリックして、次のいずれかを選択します。詳細な概要を表示します。
- /
遷移のグラフィカルな表現を示します。
遷移のXML表示を示します。
シミュレートされた変更を確認したら、
ウィンドウを閉じます。バッチモードを終了するには、シミュレートされた変更を
するか、 するかのいずれかを選択します。
5.5 crmshの概要 #
クラスタリソースを設定および管理するには、コマンドラインユーティリティであるcrmシェル(crmsh)またはWebベースのユーザインタフェースであるHawk2のいずれかを使用します。
このセクションでは、コマンドラインツールcrm
を紹介します。crm
コマンドには、リソース、CIB、ノード、リソースエージェントなどを管理するサブコマンドがあります。このコマンドには、例を組み込んだ詳細なヘルプシステムが用意されています。すべての例は、付録Bで説明される命名規則に従います。
イベントは/var/log/crmsh/crmsh.log
にログを記録します。
crmを引数なしで(または1つのサブレベルのみを引数として)使用することにより、crmシェルは対話モードになります。このモードは、次のプロンプトで示されます。
crm(live/HOSTNAME)
読みやすくするために、このマニュアルでは対話型crmのプロンプトでホスト名を省略します。次の例のように、aliceなどの特定のノードで対話型シェルを実行する必要がある場合にのみホスト名を含めます。
crm(live/alice)
5.5.1 ログイン #
クラスタを管理するには、十分な権限が必要です。次のユーザは、crm
コマンドおよびそのサブコマンドを実行できます。
root
ユーザまたはsudo
特権を持つユーザ。これらのユーザは、SSHを使用してcrm cluster init
、crm cluster join
、crm report
などのcrmsh操作を行うことにより、すべてのクラスタノードに対して完全な権限を持っています。リソースや制約の追加など、CIBの変更も実行できます。CRM所有者ユーザ(通常、ユーザ
hacluster
、クラスタインストール時にデフォルトで作成される)。このユーザは、CIBを変更できますが、SSHを使用する操作(crm report
など)については限定的な権限しかありません。ヒント: 権限のないユーザuser
オプションを使用することで、crm
とそのサブコマンドを一般(権限のない)ユーザとして実行し、必要な場合はsudo
を使用してIDを変更できます。たとえば、次のコマンドは、権限のあるユーザIDとしてhacluster
を設定します。#
crm options user hacluster
sudo
がパスワードを要求しないように/etc/sudoers
を設定する必要があります。
SSHを使用する操作の場合、クラスタは、ノード間の通信にパスワード不要のSSHアクセスを使用します。crm cluster init
を使用してクラスタを設定した場合、スクリプトは、SSHキーがあるかどうかを確認し、ない場合には生成します。YaSTクラスタモジュールを使用してクラスタを設定した場合、SSHキーを自分自身で設定する必要があります。
ほとんどの場合、root
ユーザのSSHキーまたはsudo
ユーザのSSHキーがノードに存在している(または生成されている)はずです。または、sudo
ユーザのSSHキーがローカルマシンにあり、SSHエージェントの転送によってノードに渡すことができます。これは、ノードにSSHキーを保存しないようにする必要がある場合に便利ですが、追加の設定が必要です。
ローカルマシンでSSHエージェントを起動し、そこにキーを追加します。SUSE Linux Enterprise Serverの詳細については、『Security and Hardening Guide』で「 Automated public key logins with ssh-agent」を参照してください。
sudo
特権を持つユーザとして最初のクラスタノードにログインし、-A
オプションを使用してSSHエージェントの転送を有効にします。user@local >
ssh -A USER@NODE1
crm cluster init
スクリプトを使用してクラスタを初期化します。user@node1 >
sudo --preserve-env=SSH_AUTH_SOCK \
1crm cluster init --use-ssh-agent
2初期設定が完了したら、最初のノードを終了し、
-A
オプションを使用して2つ目のノードにログインします。crm cluster join
スクリプトを使用して、クラスタに2つ目のノードを追加します。-c
オプションを使用して、クラスタを初期化したユーザおよびノードを指定します。user@node2 >
sudo --preserve-env=SSH_AUTH_SOCK \ crm cluster join --use-ssh-agent -c USER@NODE1
ブートストラップスクリプトを使用する代わりにYaSTを使用してクラスタを設定した場合、SSHキーは、自動生成されません。SSHキーを設定してSSHエージェントの転送を有効にするために、ブートストラップスクリプトのssh
ステージを単独で使用できます。YaSTでクラスタを設定した後、クラスタをオンラインにする前にこれらのコマンドを実行します。
最初のノード上で次のコマンドを実行します。
user@node1 >
sudo --preserve-env=SSH_AUTH_SOCK \ crm cluster init ssh --use-ssh-agent
他のすべてのノード上で次のコマンドを実行します。
user@node2 >
sudo --preserve-env=SSH_AUTH_SOCK \ crm cluster join ssh --use-ssh-agent -c USER@NODE1
5.5.2 ヘルプの表示 #
ヘルプには複数の方法でアクセスできます。
crm
とそのコマンドラインオプションの使用方法を出力するには:#
crm --help
使用可能なすべてのコマンドの一覧を表示するには:
#
crm help
コマンドの参照情報だけでなく、他のヘルプセクションにアクセスするには:
#
crm help topics
configure
サブコマンドの詳細なヘルプテキストを表示するには:#
crm configure help
configure
のgroup
サブコマンドの構文、使用方法、例を出力するには:#
crm configure help group
これも同様です:
#
crm help configure group
help
サブコマンド(--help
オプションと混同しないこと)のほとんどすべての出力によって、テキストビューアが開きます。このテキストビューアは上下にスクロール可能で、ヘルプテキストが読みやすくなっています。テキストビューアを閉じるには、Qキーを押します。
crmshは、対話型シェルに対してだけではなく、バッシュでの直接的で完全なタブ補完機能をサポートしています。たとえば、crm help
config
<Tab>を入力すると、対話型シェルのように単語が補完されます。
5.5.3 crmshのサブコマンドの実行 #
crm
コマンドそのものは、次のように使用できます。
直接: すべてのサブコマンドを
crm
に続け、Enterを押すと、直ちにその出力が表示されます。たとえば、crm help ra
を入力すると、ra
サブコマンド(リソースエージェント)に関する情報を取得できます。サブコマンドは、その短縮形が固有である限り短縮できます。たとえば、
status
をst
に短縮しても、crmshはこれを認識できます。パラメータを短縮する機能もあります。通常、パラメータは
params
キーワードを使用して追加します。params
セクションが最初のセクションでほかにセクションがない場合、このセクションを省略できます。たとえば、次のような行があるとします。#
crm primitive ipaddr IPaddr2 params ip=192.168.0.55
これは次の行と同等です。
#
crm primitive ipaddr IPaddr2 ip=192.168.0.55
crmシェルスクリプトとして使用: シェルスクリプトには
crm
crmのサブコマンドが含まれます。詳細については、5.5.5項 「crmshのシェルスクリプトの使用」を参照してください。crmshクラスタスクリプトとして使用:これらは、メタデータ、RPMパッケージへの参照、設定ファイル、およびcrmshサブコマンドを1つのわかりやすい名前でバンドルしてまとめたものです。
crm script
コマンドを使用して管理します。これらをcrmshシェルスクリプトと混同しないでください。両方に共通する目的はいくつかありますが、crmシェルスクリプトにはサブコマンドのみが含まれるのに対し、クラスタスクリプトにはコマンドの単純なエミュレーション以上の処理が組み込まれています。詳細については、5.5.6項 「crmshのクラスタスクリプトの使用」を参照してください。
内部シェルとして対話式に使用: 「
crm
」とタイプして、内部シェルに入ります。プロンプトがcrm(live)
に変化します。help
を使用すると、利用可能なサブコマンドの概要を取得できます。内部シェルにはさまざまなサブコマンドレベルがあり、1つのサブコマンドをタイプしてEnterを押すことで、そのサブコマンドのレベルに「入る」ことができます。たとえば、「
resource
」とタイプすると、リソース管理レベルに入ります。プロンプトはcrm(live)resource#
#に変わります。内部シェルを終了するには、コマンドquit
を使用します。1レベル戻る場合は、back
、up
、end
、またはcd
を使用します。crm
、そしてオプションを付けずにサブコマンドを入力してEnterを押すと、そのレベルに直接入ることができます。内部シェルは、サブコマンドとリソースのタブによる完了もサポートします。コマンドの冒頭をタイプして<Tab>を押すと、
crm
がそのオブジェクトを表示します。
crmshは、同期のコマンドの実行もサポートしています。これを有効にするには、-w
オプションを使用します。crm
を-w
なしで起動した場合でも、後ほどユーザ初期設定のwait
をyes
(options
wait yes
)に設定すれば、有効にすることができます。このオプションが有効化される場合、crm
は遷移が終了するまで待機します。処理が開始すると毎回、進行状況を示すための点が印刷されます。同期コマンドの実行はresource
start
などのコマンドにのみ適用できます。
crm
ツールには、管理機能(サブコマンドresource
およびnode
)があり、設定(cib
、configure
)に使用できます。
以降のサブセクションでは、crm
ツールの重要な側面について、その概要を示します。
5.5.4 OCFリソースエージェントに関する情報の表示 #
リソースエージェントはクラスタ設定で常に操作する必要があるため、crm
ツールには、ra
コマンドが含まれています。このコマンドを使用して、リソースエージェントの情報を表示し、リソースエージェントを管理します(詳細は6.2項 「サポートされるリソースエージェントクラス」も参照)。
#
crm ra
crm(live)ra#
コマンドclasses
は、すべてのクラスとプロバイダを一覧表示します。
crm(live)ra#
classes
lsb ocf / heartbeat linbit lvm2 ocfs2 pacemaker service stonith systemd
クラス(およびプロバイダ)に使用できるすべてのリソースエージェントの概要を取得するには、list
コマンドを使用します。
crm(live)ra#
list ocf
AoEtarget AudibleAlarm CTDB ClusterMon Delay Dummy EvmsSCC Evmsd Filesystem HealthCPU HealthSMART ICP IPaddr IPaddr2 IPsrcaddr IPv6addr LVM LinuxSCSI MailTo ManageRAID ManageVE Pure-FTPd Raid1 Route SAPDatabase SAPInstance SendArp ServeRAID ...
リソースエージェントの概要は、info
で表示できます。
crm(live)ra#
info ocf:linbit:drbd
This resource agent manages a DRBD* resource as a master/slave resource. DRBD is a shared-nothing replicated storage device. (ocf:linbit:drbd) Master/Slave OCF Resource Agent for DRBD Parameters (* denotes required, [] the default): drbd_resource* (string): drbd resource name The name of the drbd resource from the drbd.conf file. drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf Full path to the drbd.conf file. Operations' defaults (advisory minimum): start timeout=240 promote timeout=90 demote timeout=90 notify timeout=90 stop timeout=100 monitor_Slave_0 interval=20 timeout=20 start-delay=1m monitor_Master_0 interval=10 timeout=20 start-delay=1m
ビューアは、「Q」を押すと終了できます。
crm
を直接使用する
前の例では、crm
コマンドの内部シェルを使用しました。ただし、必ずしも、それを使用する必要はありません。該当するサブコマンドをcrm
に追加すれば、同じ結果が得られます。たとえば、すべてのOCFリソースエージェントを一覧するには、シェルに「crm ra list ocf
」を入力すれば済みます。
5.5.5 crmshのシェルスクリプトの使用 #
crmshシェルスクリプトは、crmshサブコマンドをファイル内に列挙する便利な方法を提供します。これにより、特定の行をコメントしたり、これらのコメントを後で再生したりするのが簡単になります。crmshシェルスクリプトには「crmshサブコマンドのみ」を含めることができることに注意してください。他のコマンドは許可されていません。
crmshシェルスクリプトを使用するには、その前に特定のコマンドを使用してファイルを作成してください。たとえば、次のファイルにはクラスタのステータスが出力され、すべてのノードのリストが提供されます。
# A small example file with some crm subcommandsstatus
node list
ハッシュ記号(#
)で始まる行はコメントなので、無視されます。行が長すぎる場合は、行末にバックスラッシュ(\
)を挿入し、次の行に続けます。読みやすさを向上させるために、特定のサブコマンドに属する行をインデントすることをお勧めします。
このスクリプトを使用するには、次の方法のいずれかを使用します。
#
crm -f example.cli
#
crm < example.cli
5.5.6 crmshのクラスタスクリプトの使用 #
すべてのクラスタノードから情報を収集して変更をすべて展開することは、鍵となるクラスタ管理タスクです。複数のノードで同じ手順を手動で実行するのはミスを起こしがちであるため、代わりにcrmshクラスタスクリプトを使用できます。
これらを「crmshシェルスクリプト」と混同しないでください(5.5.5項 「crmshのシェルスクリプトの使用」で説明)。
crmshシェルスクリプトとは対照的に、クラスタスクリプトでは次のような追加のタスクを実行します。
特定のタスクに必要なソフトウェアをインストールする。
設定ファイルを作成または変更する。
情報を収集し、クラスタの潜在的な問題をレポートする。
変更をすべてのノードに展開する。
crmshクラスタスクリプトは、他のクラスタ管理ツールを置き換えるものではなく、クラスタ全体に対して統合化された方法でこれらのタスクを実行できるようにします。詳細については、https://crmsh.github.io/scripts/を参照してください。
5.5.6.1 使用方法 #
利用可能なすべてのクラスタのリストを取得するには、次のコマンドを実行します。
#
crm script list
スクリプトのコンポーネントを表示するには、show
コマンドと、クラスタスクリプトの名前を使用します。次に例を示します。
#
crm script show mailto
mailto (Basic) MailTo This is a resource agent for MailTo. It sends email to a sysadmin whenever a takeover occurs. 1. Notifies recipients by email in the event of resource takeover id (required) (unique) Identifier for the cluster resource email (required) Email address subject Subject
show
の出力には、タイトル、短い説明、および手順が含まれます。各手順は一連のステップに分かれており、これらのステップを指定された順序で実行します。
各ステップには、必須パラメータとオプションパラメータのリスト、および短い説明とそのデフォルト値が含まれます。
各クラスタスクリプトは、一連の共通パラメータを認識します。これらのパラメータは任意のスクリプトに渡すことができます。
パラメータ | 引数 | 説明 |
---|---|---|
action | INDEX | 設定した場合、1つのアクションのみを実行します(verifyによって返されたインデックス)。 |
dry_run | BOOL | 設定した場合、実行のシミュレートのみを行います(デフォルト: no)。 |
nodes | LIST | スクリプト実行対象のノードのリスト。 |
port | NUMBER | 接続先のポート。 |
statefile | FILE | シングルステップ実行の場合に、指定したファイルに状態を保存します。 |
sudo | BOOL | 設定した場合、sudoパスワードを入力するようcrmによってプロンプトが表示され、必要に応じてsudoが使用されます(デフォルト: no)。 |
timeout | NUMBER | 秒単位での実行タイムアウト(デフォルト: 600)。 |
user | USER | 指定したユーザとしてスクリプトを実行します。 |
5.5.6.2 クラスタスクリプトの検証と実行 #
問題を避けるため、クラスタスクリプトを実行する前に、実行するアクションを確認してパラメータを検証します。クラスタスクリプトは一連のアクションを実行でき、さまざまな理由で失敗する可能性があります。そのため、実行前にパラメータを検証すると、問題の回避に役立ちます。
たとえば、mailto
リソースエージェントでは、固有の識別子と電子メールアドレスが必要です。これらのパラメータを検証するには、以下を実行します。
#
crm script verify mailto id=sysadmin email=tux@example.org
1. Ensure mail package is installed mailx 2. Configure cluster resources primitive sysadmin MailTo email="tux@example.org" op start timeout="10" op stop timeout="10" op monitor interval="10" timeout="10" clone c-sysadmin sysadmin
verify
コマンドは各ステップを出力し、指定したパラメータでプレースホルダを置き換えます。verify
で問題が見つかった場合は報告します。問題がなければ、verify
コマンドをrun
に置き換えます。
#
crm script run mailto id=sysadmin email=tux@example.org
INFO: MailTo INFO: Nodes: alice, bob OK: Ensure mail package is installed OK: Configure cluster resources
crm status
を使用して、リソースがクラスタに統合されているかどうかを確認します。
#
crm status
[...] Clone Set: c-sysadmin [sysadmin] Started: [ alice bob ]
5.5.7 設定テンプレートの使用 #
設定テンプレートの使用は非推奨で、今後削除される予定です。設定テンプレートはクラスタスクリプトに置き換えられます。5.5.6項 「crmshのクラスタスクリプトの使用」を参照してください。
設定テンプレートは、crmsh用の既成のクラスタ設定です。リソーステンプレート(6.8.2項 「crmshを使用したリソーステンプレートの作成」の説明を参照)と混同しないでください。これらはクラスタ用のテンプレートで、crmシェル用ではありません。
設定テンプレートは、最小限の操作で、特定ユーザのニーズに合わせて調整できます。テンプレートで設定を作成する際には、警告メッセージでヒントが与えられます。これは、後から編集することができ、さらにカスタマイズできます。
次の手順は、簡単ですが機能的なApache設定を作成する方法を示しています。
root
としてログインし、crm
対話型シェルを開始します。#
crm configure
設定テンプレートから新しい設定を作成します。
template
サブコマンドに切り替えます。crm(live)configure#
template
使用可能な設定テンプレートを一覧します。
crm(live)configure template#
list templates
gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2必要な設定テンプレートを決めます。Apache設定が必要なので、
apache
テンプレートを選択し、g-intranet
と名付けます。crm(live)configure template#
new g-intranet apache
INFO: pulling in template apache INFO: pulling in template virtual-ip
パラメータを定義します。
作成した設定を一覧表示します。
crm(live)configure template#
list
g-intranet入力を必要とする最小限の変更項目を表示します。
crm(live)configure template#
show
ERROR: 23: required parameter ip not set ERROR: 61: required parameter id not set ERROR: 65: required parameter configfile not set好みのテキストエディタを起動し、ステップ 3.bでエラーとして表示されたすべての行に入力します。
crm(live)configure template#
edit
設定を表示し、設定が有効かどうか確認します(太字のテキストは、ステップ 3.cで入力した設定によって異なります)。
crm(live)configure template#
show
primitive virtual-ip ocf:heartbeat:IPaddr \ params ip="192.168.1.101" primitive apache apache \ params configfile="/etc/apache2/httpd.conf" monitor apache 120s:60s group g-intranet \ apache virtual-ip設定を適用します。
crm(live)configure template#
apply
crm(live)configure#
cd ..
crm(live)configure#
show
変更内容をCIBに送信します。
crm(live)configure#
commit
詳細がわかっていれば、コマンドをさらに簡素化できます。次のコマンドをシェルで使用して、上記の手順を要約できます。
#
crm configure template \ new g-intranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
内部crm
シェルに入っている場合は、次のコマンドを使用します。
crm(live)configure template#
new intranet apache params \ configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
ただし、このコマンドは、設定テンプレートから設定を作成するだけです。設定をCIBに適用したり、コミットすることはありません。
5.5.8 シャドウ設定のテスト #
シャドウ設定は、異なる構成シナリオのテストに使用されます。複数のシャドウ設定を作成した場合は、1つ1つテストして変更を加えた影響を確認できます。
通常の処理は次のようになります。
root
としてログインし、crm
対話型シェルを開始します。#
crm configure
新しいシャドウ設定を作成します。
crm(live)configure#
cib new myNewConfig
INFO: myNewConfig shadow CIB createdシャドウCIBの名前を省略する場合は、一時名の
@tmp@
が作成されます。現在のライブ設定をシャドウ設定にコピーするには、次のコマンドを使用します。コピーしない場合は、このステップをスキップします。
crm(myNewConfig)#
cib reset myNewConfig
このコマンドを使用すると、既存のリソースを後から編集する場合に、簡単に編集できます。
通常どおり変更を行います。シャドウ設定の作成後は、すべての変更がシャドウ設定に適用されます。すべての変更を保存するには、次のコマンドを使用します。
crm(myNewConfig)#
commit
ライブクラスタ設定が再び必要な場合は、次のコマンドでライブ設定に戻ります。
crm(myNewConfig)configure#
cib use live
crm(live)#
5.5.9 設定の変更のデバッグ #
設定の変更をクラスタにロードする前に、変更内容をptest
でレビューすることを推奨します。ptest
コマンドを指定すると、変更のコミットによって生じるアクションのダイアグラムを表示できます。ダイアグラムを表示するには、graphvizパッケージが必要です。次の例は監視操作を追加するスクリプトです。
#
crm configure
crm(live)configure#
show fence-bob
primitive fence-bob stonith:apcsmart \ params hostlist="bob"crm(live)configure#
monitor fence-bob 120m:60s
crm(live)configure#
show changed
primitive fence-bob stonith:apcsmart \ params hostlist="bob" \ op monitor interval="120m" timeout="60s"crm(live)configure#
ptest
crm(live)configure#
commit
5.5.10 クラスタダイアグラム #
クラスタダイアグラムを出力するには、コマンドcrm configure graph
を使用します。これにより現在の設定が現在のウィンドウに表示されるので、X11が必要になります。
SVG (Scalable Vector Graphics)を使用する場合は、次のコマンドを使用します。
#
crm configure graph dot config.svg svg
5.5.11 Corosync設定の管理 #
Corosyncは、ほとんどのHAクラスタの下層にあるメッセージング層です。corosync
サブコマンドは、Corosync設定を編集および管理するためのコマンドを提供します。
たとえば、クラスタのステータスを一覧表示するには、status
を使用します。
#
crm corosync status
Printing ring status. Local node ID 175704363 RING ID 0 id = 10.121.9.43 status = ring 0 active with no faults Quorum information ------------------ Date: Thu May 8 16:41:56 2014 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 175704363 Ring ID: 4032 Quorate: Yes Votequorum information ---------------------- Expected votes: 2 Highest expected: 2 Total votes: 2 Quorum: 2 Flags: Quorate Membership information ---------------------- Nodeid Votes Name 175704363 1 alice.example.com (local) 175704619 1 bob.example.com
diff
コマンドは、(特に指示がない限り)すべてのノード上のCorosync設定を比較し、相違点を出力します。
#
crm corosync diff
--- bob +++ alice @@ -46,2 +46,2 @@ - expected_votes: 2 - two_node: 1 + expected_votes: 1 + two_node: 0
詳細については、https://crmsh.nongnu.org/crm.8.html#cmdhelp_corosyncを参照してください。
5.5.12 cib.xml
から独立したパスワードの設定 #
クラスタ設定にパスワードなどの機密の情報が含まれている場合、それらをローカルファイルに保存する必要があります。こうしておけば、これらのパラメータがログに記録されたり、サポートレポートに漏洩することはありません。
secret
を使用する前に、すべてのリソースの概要を確認するため、show
コマンドを実行します。
#
crm configure show
primitive mydb mysql \ params replication_user=admin ...
上記のmydb
リソースに対してパスワードを設定するには、次のコマンドを使用します。
#
crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]
次のように、保存されたパスワードが返されます。
#
crm resource secret mydb show passwd
linux
パラメータはノード間で同期する必要があります。crm resource secret
コマンドがそれを処理します。秘密のパラメータを管理する場合には、このコマンドのみを使用することを強く推奨します。
5.6 詳細の参照先 #
- https://crmsh.github.io/
crmシェル(crmsh)、High Availabilityクラスタ管理用の高度なコマンドラインインタフェースのホームページ。
- https://crmsh.github.io/documentation
crmshを使用した基本的なクラスタ設定の『Getting Started』チュートリアルとcrmシェルの包括的なManualを含む、crmシェルに関するいくつかのドキュメントが含まれています。マニュアルはhttps://crmsh.github.io/man-2.0/で入手できます。チュートリアルはhttps://crmsh.github.io/start-guide/に用意されています。
- https://clusterlabs.org/
Pacemakerのホームページ、SUSE Linux Enterprise High Availabilityに付属のクラスタリソースマネージャ。
- https://www.clusterlabs.org/pacemaker/doc/
いくつかの包括的なマニュアルと一般的な概念を説明するより簡潔なドキュメントが含まれています。例:
Pacemaker Explained: 参照用に包括的で詳細な情報が含まれています。
Colocation Explained
Ordering Explained