適用先 SUSE Linux Enterprise High Availability Extension 12

6 クラスタリソースの設定と管理(コマンドライン)

クラスタリソースを設定および管理するには、crmシェル(crmsh)コマンドラインユーティリティ、HA Web Konsole (Hawk)、Webベースユーザインタフェースのいずれかを使用します。

この章では、crmコマンドラインツールを紹介し、このツールの概要、テンプレートの使用方法、そして、主にクラスタリソースの設定と管理(基本的なリソースと高度なリソース(グループとクローン)の作成、制約の設定、フェールオーバーノードとフェールバックノードの指定、リソース監視の設定、リソースの開始、クリーンアップ、または削除、および手動によるリソースの移行について説明します。

注記
注記: ユーザの権限

クラスタを管理するには十分な権限が必要です。crmコマンドおよびそのサブコマンドは、rootユーザとして、またはCRM所有者ユーザとして実行される必要があります(通常はhaclusterユーザ)。

ただし、userオプションを使用することで、crmとそのサブコマンドを一般(権限のない)ユーザとして実行し、必要な場合はいつでもsudoを使用してIDを変更できます。 たとえば、次のcrmコマンドは、権限のあるユーザIDとしてhaclusterを使用します。

root # crm options user hacluster

/etc/sudoersを設定しておいて、sudoがパスワードを要求しないようにしておく必要があることに注意してください。

6.1 crmsh - 概要

crmコマンドには、リソース、CIB、ノード、リソースエージェントなどを管理するサブコマンドがあります。このコマンドには、例を組み込んだ詳細なヘルプシステムが用意されています。すべての例は、付録Bで説明される命名規則に従います。

ヒント
ヒント: シェルプロンプトと対話型crmプロンプトの違い

すべてのコードと例を読みやすくするために、この章では、シェルプロンプトと対話型crmプロンプト間で次の表記を使用します。

  • ユーザrootのシェルプロンプト:

    root # 
  • 対話型crmshプロンプト(ターミナルがカラーに対応している場合は、緑色で表示):

    crm(live)# 

6.1.1 ヘルプの表示

ヘルプには複数の方法でアクセスできます。

  • crmとそのコマンドラインオプションの使用方法を出力するには:

    root # crm --help
  • 使用可能なすべてのコマンドの一覧を表示するには:

    root # crm help
  • コマンドの参照情報だけでなく、他のヘルプセクションにアクセスするには:

    root # crm help topics
  • configureサブコマンドの詳細なヘルプテキストを表示するには:

    root # crm configure help
  • configureのサブコマンドの構文、使用方法、例を印刷するには:

    root # crm configure help group

    次の入力も可能です。

    root # crm help configure group

helpサブコマンド(--helpオプションと混同しないこと)のほとんどすべての出力によって、テキストビューアが開きます。このテキストビューアは上下にスクロール可能で、ヘルプテキストが読みやすくなっています。テキストビューアを閉じるには、Qキーを押します。

ヒント
ヒント: バッシュおよび対話型シェルでタブ補完機能を使用

crmshは、対話型シェルに対してだけではなく、バッシュでの直接的で完全なタブ補完機能をサポートしています。たとえば、crm help config<Tab>と入力すると、対話型シェルと同様に単語が補完されます。

6.1.2 crmshのサブコマンドの実行

crmコマンドそのものは、次のように使用できます。

  • 直接.  すべてのサブコマンドをcrmに続け、<Enter>を押すと、ただちにその出力が表示されます。たとえば、crm help raを入力すると、raサブコマンド(リソースエージェント)に関する情報を取得できます。

  • crmシェルスクリプトとして使用.  スクリプト内でcrmとそのサブコマンドを使用します。これには、2つの方法があります。

    root # crm -f script.cli
    root # crm < script.cli

    スクリプトには、crmから任意のコマンドを含めることができます。例:

    # A small script file for crm
    status
    node list

    ハッシュ記号(#)で始まる行はコメントなので、無視されます。行が長すぎる場合は、行末にバックスラッシュ(\)を挿入し、次の行に続けます。可読性を向上させるため、特定のサブコマンドに属する行をインデントすることをお勧めします。

  • 内部シェルとして対話式に使用. crm」とタイプして、内部シェルに入ります。プロンプトがcrm(live)に変化します。helpを使用すると、利用可能なサブコマンドの概要を取得できます。内部シェルにはさまざまなサブコマンドレベルがあり、1つのサブコマンドをタイプしてEnterを押すことで、そのサブコマンドのレベルに入ることができます。

    たとえば、「resource」とタイプすると、リソース管理レベルに入ります。プロンプトはcrm(live)resource#に変わります。内部シェルを終了したい場合は、コマンドquitbye、またはexitを使用します。1レベル戻る場合は、backupend、またはcdを使用します。

    crm、そしてオプションを付けずにサブコマンドを入力してEnterを押すと、そのレベルに直接入ることができます。

    内部シェルは、サブコマンドとリソースのタブによる完了もサポートします。コマンドの冒頭をタイプして<Tab>を押すと、crmがそのオブジェクトを完了します。

すでに説明した方法に加えて、crmshは、同期コマンド実行もサポートしています。これを有効にするには、-wオプションを使用します。crm-wなしで起動した場合でも、後ほどユーザ初期設定のwaityesに設定すれば(options wait yes)、有効にすることができます。このオプションが有効化される場合、crmは遷移が終了するまで待機します。処理が開始すると毎回、進行状況を示すための点が印刷されます。同期コマンドの実行はresource startなどのコマンドにのみ適用できます。

注記
注記: 管理サブコマンドと設定サブコマンド間の相違

crmツールには管理機能(サブコマンドresourcesおよびnode)があり、設定に使用できます(cibconfigure)。

以降のサブセクションでは、crmツールの重要な側面について、その概要を示します。

6.1.3 OCFリソースエージェントに関する情報の表示

リソースエージェントはクラスタ設定で常に操作する必要があるため、crmツールには、raコマンドが含まれています。このコマンドを使用して、リソースエージェントの情報を表示し、リソースエージェントを管理します(詳細は4.2.2項 「サポートされるリソースエージェントクラス」も参照)。

root # 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:drbd:linbit
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」を入力すれば済みます。

6.1.4 設定テンプレートの使用

設定テンプレートは、crmsh用の既成のクラスタ設定です。リソーステンプレート(6.4.2項 「リソーステンプレートの作成」の説明を参照)と混同しないでください。これらはクラスタ用のテンプレートで、crmシェル用ではありません。

設定テンプレートは、最小限の操作で、特定ユーザのニーズに合わせて調整できます。テンプレートで設定を作成する際には、警告メッセージでヒントが与えられます。これは、後から編集することができ、さらにカスタマイズできます。

次の手順は、簡単ですが機能的なApache設定を作成する方法を示しています。

  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm configure
  2. 設定テンプレートから新しい設定を作成します。

    1. templateサブコマンドに切り替えます。

      crm(live)configure# template
    2. 使用可能な設定テンプレートを一覧します。

      crm(live)configure template# list templates
      gfs2-base   filesystem  virtual-ip  apache   clvm     ocfs2    gfs2
    3. 必要な設定テンプレートを決めます。Apache設定が必要なので、apacheテンプレートを選択し、g-intranetと名付けます。

      crm(live)configure template# new g-intranet apache
      INFO: pulling in template apache
      INFO: pulling in template virtual-ip
  3. パラメータを定義します。

    1. 作成した設定を一覧表示します。

      crm(live)configure template# list
      g-intranet
    2. 入力を必要とする最小限の変更項目を表示します。

      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. 好みのテキストエディタを起動し、ステップ 3.bでエラーとして表示されたすべての行に入力します。

      crm(live)configure template# edit
  4. 設定を表示し、設定が有効かどうか確認します(太字のテキストは、ステップ 3.cで入力した設定によって異なります)。

    crm(live)configure template# show
    primitive virtual-ip ocf:heartbeat:IPaddr \
        params ip="192.168.1.101"
    primitive apache ocf:heartbeat:apache \
        params configfile="/etc/apache2/httpd.conf"
        monitor apache 120s:60s
    group g-intranet \
        apache virtual-ip
  5. 設定を適用します。

    crm(live)configure template# apply
    crm(live)configure# cd ..
    crm(live)configure# show
  6. 変更内容をCIBに送信します。

    crm(live)configure# commit

詳細がわかっていれば、コマンドをさらに簡素化できます。次のコマンドをシェルで使用して、上記の手順を要約できます。

root # 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に適用したり、コミットすることはありません。

6.1.5 シャドーイング設定のテスト

シャドーイング設定は、異なる設定シナリオのテストに使用されます。複数のシャドウ設定を作成した場合は、1つ1つテストして変更を加えた影響を確認できます。

通常の処理は次のようになります。

  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm configure
  2. 新しいシャドウ設定を作成します。

    crm(live)configure# cib new myNewConfig
    INFO: myNewConfig shadow CIB created

    シャドウCIBの名前を省略する場合は、一時名の@tmp@が作成されます。

  3. 現在のライブ設定をシャドウ設定にコピーする場合は、次のコマンドを使用します。コピーしない場合は、このステップをスキップします。

    crm(myNewConfig)# cib reset myNewConfig

    このコマンドを使用すると、既存のリソースを後から編集する場合に、簡単に編集できます。

  4. 通常どおり変更を行います。シャドウ設定の作成後は、すべての変更がシャドウ設定に適用されます。すべての変更を保存するには、次のコマンドを使用します。

    crm(myNewConfig)# commit
  5. ライブクラスタ設定が再び必要な場合は、次のコマンドでライブ設定に戻ります。

    crm(myNewConfig)configure# cib use live
    crm(live)# 

6.1.6 設定の変更のデバッグ

設定の変更をクラスタにロードする前に、変更内容をptestでレビューすることを推奨します。ptestコマンドを指定すると、変更のコミットによって生じるアクションのダイアグラムを表示できます。ダイアグラムを表示するには、graphvizパッケージが必要です。次の例は監視操作を追加するスクリプトです。

root # 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

6.1.7 クラスタダイアグラム

図5.2「Hawk - クラスタダイアグラム」に示すようなクラスタダイアグラムを出力するには、コマンドcrm configure graphを使用します。これにより現在の設定が現在のウィンドウに表示されるので、X11が必要になります。

SVG (Scalable Vector Graphics)を使用する場合は、次のコマンドを使用します。

root # crm configure graph dot config.svg svg

6.2 Corosync設定の管理

Corosyncは、ほとんどのHAクラスタの下層にあるメッセージング層です。corosyncサブコマンドは、Corosync設定を編集および管理するためのコマンドを提供します。

たとえば、クラスタのステータスを一覧表示するには、statusを使用します。

root # 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設定を比較し(別途記載のない場合)、それらの差異を出力します。

root # crm corosync diff
--- bob
+++ alice
@@ -46,2 +46,2 @@
-       expected_votes: 2
-       two_node: 1
+       expected_votes: 1
+       two_node: 0

詳細については、http://crmsh.nongnu.org/crm.8.html#cmdhelp_corosyncを参照してください。

6.3 グローバルクラスタオプションの設定

グローバルクラスタオプションは、一定の状況下でのクラスタの動作を制御します。事前に定義されている値は、通常は、そのまま保持できます。ただし、クラスタの主要機能を正しく機能させるには、クラスタの基本的なセットアップ後に、次のパラメータを調整する必要があります。

手順 6.1 crmでグローバルクラスタオプションを変更する
  1. rootとしてログインし、crmツールを開始します。

    root # crm configure
  2. 次のコマンドを使用して、2ノードクラスタだけのオプションを設定します。

    crm(live)configure# property no-quorum-policy=ignore
    crm(live)configure# property stonith-enabled=true
    重要
    重要: STONITHがない場合はサポートなし

    STONITHがないクラスタはサポートされません。

  3. 変更内容を表示します。

    crm(live)configure# show
    property $id="cib-bootstrap-options" \
       dc-version="1.1.1-530add2a3721a0ecccb24660a97dbfdaa3e68f51" \
       cluster-infrastructure="corosync" \
       expected-quorum-votes="2" \
       no-quorum-policy="ignore" \
       stonith-enabled="true"
  4. 変更内容をコミットして終了します。

    crm(live)configure# commit
    crm(live)configure# exit

6.4 クラスタリソースの設定

クラスタの管理者は、クラスタ内のサーバ上の各リソースや、サーバ上で実行する各アプリケーションに対してクラスタリソースを作成する必要があります。クラスタリソースには、Webサイト、電子メールサーバ、データベース、ファイルシステム、仮想マシン、およびユーザが常時使用できるようにする他のサーバベースのアプリケーションまたはサービスなどが含まれます。

作成できるリソースタイプの概要については、4.2.3項 「リソースのタイプ」を参照してください。

6.4.1 クラスタリソースの作成

クラスタで使用できるRA(リソースエージェント)には3種類あります(背景情報については4.2.2項 「サポートされるリソースエージェントクラス」を参照)。新しいリソースをクラスタに追加するには、次の手順に従います。

  1. rootとしてログインし、crmツールを開始します。

    root # crm configure
  2. プリミティブIPアドレスを設定ます。

    crm(live)configure# primitive myIP ocf:heartbeat:IPaddr \
         params ip=127.0.0.99 op monitor interval=60s

    前のコマンドはプリミティブに名前myIPを設定します。クラス(ここではocf)、プロバイダ(heartbeat)、およびタイプ(IPaddr)を選択する必要があります。さらに、このプリミティブでは、IPアドレスなどのパラメータが必要です。自分の設定に合わせてアドレスを変更してください。

  3. 行った変更を表示して確認します。

    crm(live)configure# show
  4. 変更をコミットして反映させます。

    crm(live)configure# commit

6.4.2 リソーステンプレートの作成

類似した設定で複数のリソースを作成する場合、リソーステンプレートを使用すれば作業が簡単になります。基本的なバックグラウンド情報については、4.4.3項 「リソーステンプレートと制約」を参照してください。これらを、通常のテンプレート(6.1.4項 「設定テンプレートの使用」で説明したもの)と混同しないでください。次の構文を知るには、rsc_templateコマンドを使用してください。

root # crm configure rsc_template
usage: rsc_template <name> [<class>:[<provider>:]]<type>
        [params <param>=<value> [<param>=<value>...]]
        [meta <attribute>=<value> [<attribute>=<value>...]]
        [utilization <attribute>=<value> [<attribute>=<value>...]]
        [operations id_spec
            [op op_type [<attribute>=<value>...] ...]]

たとえば、次のコマンドは、ocf:heartbeat:Xenリソースと、デフォルト値および操作に由来するBigVMの名前を持つ新しいリソーステンプレートを作成します。

crm(live)configure# rsc_template BigVM ocf:heartbeat:Xen \
   params allow_mem_management="true" \
   op monitor timeout=60s interval=15s \
   op stop timeout=10m \
   op start timeout=10m

新しいリソーステンプレートを定義したら、それをプリミティブとして使用すること、または順序、コロケーション、またはrsc_ticketの制約で参照することができます。リソーステンプレートを参照するには、@記号を使用します。

crm(live)configure# primitive MyVM1 @BigVM \
   params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"

新しいプリミティブMy-VM1は、BigVMリソーステンプレートからすべてを継承します。たとえば、上の2つに等しいものは次のようになります。

crm(live)configure# primitive MyVM1 ocf:heartbeat:Xen \
   params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"
   params allow_mem_management="true" \
   op monitor timeout=60s interval=15s \
   op stop timeout=10m \
   op start timeout=10m

オプションや操作を上書きしたい場合は、自分の(プリミティブの)定義を追加します。たとえば、次の新しいプリミティブMy-VM2は監視操作のタイムアウトを2倍にしますが、その他はそのままに残します。

crm(live)configure# primitive MyVM2 @BigVM \
   params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \
   op monitor timeout=120s interval=30s    

リソーステンプレートは、そのテンプレートから派生するすべてのプリミティブを表すものとして、制約で参照することができます。これにより、クラスタ設定をいっそう簡潔かつクリアに行うことができます。リソーステンプレートは、場所の制約を除くすべての制約から参照することができます。コロケーション制約には、複数のテンプレート参照を含めることはできません。

6.4.3 STONITHリソースの作成

crmからは、STONITHデバイスは単なる1つのリソースと認識されます。STONITHリソースを作成するには、次の手順に従います。

  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm configure
  2. 次のコマンドで、すべてのSTONITHタイプのリストを取得します。

    crm(live)# ra list stonith
    apcmaster                  apcmastersnmp              apcsmart
    baytech                    bladehpi                   cyclades
    drac3                      external/drac5             external/dracmc-telnet
    external/hetzner           external/hmchttp           external/ibmrsa
    external/ibmrsa-telnet     external/ipmi              external/ippower9258
    external/kdumpcheck        external/libvirt           external/nut
    external/rackpdu           external/riloe             external/sbd
    external/vcenter           external/vmware            external/xen0
    external/xen0-ha           fence_legacy               ibmhmc
    ipmilan                    meatware                   nw_rpc100s
    rcd_serial                 rps10                      suicide
    wti_mpc                    wti_nps
  3. 上記のリストからSTONITHタイプを選択し、利用できるオプションのリストを表示します。次のコマンドを実行します。

    crm(live)# ra info stonith:external/ipmi
    IPMI STONITH external device (stonith:external/ipmi)
    
    ipmitool based power management. Apparently, the power off
    method of ipmitool is intercepted by ACPI which then makes
    a regular shutdown. If case of a split brain on a two-node
    it may happen that no node survives. For two-node clusters
    use only the reset method.
    
    Parameters (* denotes required, [] the default):
    
    hostname (string): Hostname
        The name of the host to be managed by this STONITH device.
    ...
  4. stonithクラス、ステップ 3で選択したタイプ、および必要に応じて該当するパラメータを使用して、STONITHリソースを作成します。たとえば、次のコマンドを使用します。

    crm(live)# configure
    crm(live)configure# primitive my-stonith stonith:external/ipmi \
        params hostname="alice"
        ipaddr="192.168.1.221" \
        userid="admin" passwd="secret" \
        op monitor interval=60m timeout=120s  

6.4.4 リソース制約の設定

すべてのリソースを設定することは、ジョブのほんの一部分です。クラスタが必要なすべてのリソースを認識しても、正しく処理できるとは限りません。たとえば、DRBDのスレーブノードにファイルシステムをマウントしないようにしてください(実際、DRBDでは失敗します)。このような情報をクラスタが利用できるように、制約を定義します。

制約の詳細については、4.4項 「リソースの制約」を参照してください。

6.4.4.1 場所の制約

locationコマンドは、リソースを実行できるノード、できないノード、または実行に適したノードを定義するものです。

この種類の制約は、各リソースに複数追加できます。すべてのlocation制約は、所定のリソースに関して評価されます。fs1というIDを持つリソースをaliceという名前のノード上で実行するプリファレンスを100にする簡単な例を次に示します。

crm(live)configure# location loc-fs1 fs1 100: alice

もう1つの例は、pingdによる場所の設定です。

crm(live)configure# primitive pingd pingd \
    params name=pingd dampen=5s multiplier=100 host_list="r1 r2"
crm(live)configure# location loc-node_pref internal_www \
    rule 50: #uname eq alice \
    rule pingd: defined pingd

場所の制約のもう1つの使用例は、「リソースセット」としてのプリミティブのグループ化です。これは、たとえば、いくつかのリソースがネットワーク接続のping属性によって異なるときに役立つ場合があります。以前は、-inf/pingルールを設定で何度も重複して指定する必要があったため、設定内容が不必要に複雑でした。

次の例では、リソースセット loc-aliceを作成し、仮想IPアドレス vip1 および vip2を参照します。

crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } inf: alice 

ある場合には、locationコマンドでリソースパターンを使用すると、より効率的で便利です。リソースパターンは、2つのスラッシュ間の正規表現です。たとえば、前に示した仮想IPアドレスは、次とすべて一致させることができます。

crm(live)configure# location  loc-alice /vip.*/ inf: alice

6.4.4.2 コロケーション制約

colocationコマンドは、同じホストまたは別のホストで実行するべきリソースを定義するために使用します。

常に同じノードで実行する必要があるリソース、または同じノードで実行してはならないリソースを定義する場合には、それぞれ+infまたは-infのスコアを設定することだけが可能です。無限大以外のスコアの使用も可能です。その場合、コロケーションはadvisoryと呼ばれ、衝突が発生したときに他のリソースが停止しないようにするため、クラスタがそれらの制約に従わないこともあります。

たとえば、IDがfilesystem_resourcenfs_groupのリソースを常に同じホストで実行するには、次の制約を使用します。

crm(live)configure# colocation nfs_on_filesystem inf: nfs_group filesystem_resource

マスタスレーブ構成では、現在のノートがマスタかどうかと、リソースをローカルに実行しているかどうかを把握することが必要です。

6.4.4.3 依存性なしのリソースセットのコロケーション

同じノード上にリソースのグループを配置できると便利な場合がありますが(コロケーション制約を定義)、リソース間で困難な依存性を持つことはありません。

同じノード上にリソースを配置するが、これらの一方に障害が発生した場合のアクションがない場合は、weak-bondコマンドを使用します。

root # crm configure assist weak-bond RES1 RES2

weak-bondの実装により、指定されたリソースを持つダミーリソースとコロケーション制約が自動的に作成されます。

6.4.4.4 順序の制約

orderコマンドは、アクションのシーケンスを定義します。

リソースのアクションや操作の順序を指定することが必要な場合があります。たとえば、デバイスがシステムで利用できるようになるまで、ファイルシステムはマウントできません。順序の制約を使用して、開始、停止、マスタへの昇格など、別のリソースが特殊な条件を満たす直前または直後に、サービスを開始または停止できます。

順序の制約を設定するには、次のようなコマンドをcrmシェルで使用します。

crm(live)configure# order nfs_after_filesystem mandatory: filesystem_resource nfs_group

6.4.4.5 サンプル設定のための制約

このセクションで使用される例は、制約を追加しないと機能しません。すべてのリソースは、必ず、マスタであるDRBDリソースと同じマシンで実行される必要があります。DRBDリソースは、他のリソースが開始する前にマスタにする必要があります。マスタでないときに、drbdデバイスをマウントしようとすると失敗します。次の制約を満たす必要があります。

  • ファイルシステムは、常に、DRDBリソースのマスタと同じノード上に存在する必要があります。

    crm(live)configure# colocation filesystem_on_master inf: \
        filesystem_resource drbd_resource:Master
  • NFSサーバとIPアドレスは、ファイルシステムと同じノードに存在する必要があります。

    crm(live)configure# colocation nfs_with_fs inf: \
       nfs_group filesystem_resource
  • NFSサーバとIPアドレスは、ファイルシステムがマウントされた後に開始されます。

    crm(live)configure# order nfs_second mandatory: \
       filesystem_resource:start nfs_group
  • ファイルシステムは、drbdリソースがこのノードのマスタに昇格した後にマウントされる必要があります。

    crm(live)configure# order drbd_first inf: \
        drbd_resource:promote filesystem_resource:start

6.4.5 リソースフェールオーバーノードの指定

リソースフェールオーバーを判定するには、メタ属性migration-thresholdを使用します。すべてのノードで失敗回数がmigration-thresholdを超えている場合には、リソースは停止したままになります。例:

crm(live)configure# location rsc1-alice rsc1 100: alice

通常、rsc1はaliceで実行されます。そこで失敗すると、migration-thresholdがチェックされ、失敗回数と比較されます。失敗回数がmigration-threshold以上の場合、次の候補のノードにマイグレートします。

開始が失敗すると、start-failure-is-fatalオプションによっては、失敗回数がinfに設定されます。stopの失敗により、フェンシングが発生します。STONITHが定義されていない場合には、リソースは移行しません。

概要については、4.4.4項 「フェールオーバーノード」を参照してください。

6.4.6 リソースフェールバックノードの指定(リソースの固着性)

ノードがオンライン状態に戻り、クラスタ内にある場合は、リソースが元のノードにフェールバックすることがあります。リソースを実行していたノードにリソースをフェールバックさせたくない場合や、リソースのフェールバック先として別のノードを指定する場合は、リソースのresource stickiness値を変更します。リソースの固着性は、リソースの作成時でも、その後でも指定できます。

概要については、4.4.5項 「フェールバックノード」を参照してください。

6.4.7 負荷インパクトに基づくリソース配置の設定

一部のリソースは、メモリの最小量など、特定の容量要件を持っています。要件が満たされていない場合、リソースは全く開始しないか、またはパフォーマンスを下げた状態で実行されます。

これを考慮に入れて、High Availability Extensionでは、次のパラメータを指定できます。

  1. 一定のノードが提供する容量

  2. 一定のリソースが要求する容量

  3. リソースの配置に関する全体的なストラテジ

パラメータと設定の詳細な背景情報については、4.4.6項 「負荷インパクトに基づくリソースの配置」を参照してください。

リソースの要件とノードが提供する容量を設定するには、使用属性を使用します。使用属性に任意の名前を付け、設定に必要なだけ名前/値のペアを定義します。いくつかのエージェントは、たとえばVirtualDomainなどの使用を更新します。

次の例では、クラスタのノードとリソースの基本設定がすでに完了していることを想定しています。さらに、特定のノードが提供する容量と特定のリソースが必要とする容量を設定します。

手順 6.2 crmで使用属性を追加または変更する
  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm configure
  2. ノードが提供する容量を指定するには、次のコマンドを使用し、プレースホルダNODE_1をノードの名前に置き換えます。

    crm(live)configure# node
    NODE_1 utilization memory=16384 cpu=8

    これらの値によって、NODE_1は16GBのメモリと8つのCPUコアをリソースに提供すると想定されます。

  3. リソースが要求する容量を指定するには、次のコマンドを使用します。

    crm(live)configure# primitive
     xen1 ocf:heartbeat:Xen ... \
         utilization memory=4096 cpu=4

    これによって、リソースはnodeAからの4096のメモリ単位と4つのCPUユニットを使用します。

  4. propertyコマンドを使用して、配置ストラテジを設定します。

    crm(live)configure# property ...

    次の値を使用できます。

    default (デフォルト値)

    使用値は考慮しません。リソースは、場所のスコアに従って割り当てられます。スコアが同じであれば、リソースはノード間で均等に分散されます。

    utilization

    リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。ただし、負荷分散は、まだ、ノードに割り当てられたリソースの数に基づいて行われます。

    minimal

    リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。できるだけ少ない数のノードにリソースを集中しようとします(残りのノードの電力節約のため)。

    balanced

    リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。リソースを均等に分散して、リソースのパフォーマンスを最適化しようとします。

    注記
    注記: リソース優先度の設定

    使用できる配置ストラテジは、最善策であり、まだ、複雑なヒューリスティックソルバで、常に最適な割り当て結果を得るには至っていません。リソースの優先度を正しく設定して、最重要なリソースが最初にスケジュールされるようにしてください。

  5. 変更をコミットしてから、crmshを終了します。

    crm(live)configure# commit

次の例は、同等のノードから成る3ノードクラスタと4つの仮想マシンを示しています。

crm(live)configure# node alice utilization memory="4000"
crm(live)configure# node bob utilization memory="4000"
crm(live)configure# node charly utilization memory="4000"
crm(live)configure# primitive xenA ocf:heartbeat:Xen \
    utilization memory="3500" meta priority="10"
crm(live)configure# primitive xenB ocf:heartbeat:Xen \
    utilization memory="2000" meta priority="1"
crm(live)configure# primitive xenC ocf:heartbeat:Xen \
    utilization memory="2000" meta priority="1"
crm(live)configure# primitive xenD ocf:heartbeat:Xen \
    utilization memory="1000" meta priority="5"
crm(live)configure# property placement-strategy="minimal"

3ノードはすべてアクティブであり、まず、xenAがノードに配置され、次に、xenDが配置されます。xenBとxenCは、一緒に割り当てられるか、またはどちらか1つがxenDとともに割り当てられます。

1つのノードに障害が発生した場合、残りのノード上で利用できるメモリ合計が少なすぎて、これらのリソースすべてはホストできません。xenAは確実に割り当てられ、xenDも同様です。ただし、xenBとxenCは、そのどちらか1つしか割り当てられません。xenBとxenCの優先度は同等なので、結果はまだ未定義です。これを解決するためにも、どちらかに高い優先度を設定する必要があります。

6.4.8 リソース監視の設定

リソースを監視するには、2つの方法(opキーワードで監視処理を定義するか、monitorコマンドを使用するか)があります。次の例では、Apacheリソースを設定し、opキーワードの使用で 60秒ごとに監視します。

crm(live)configure# primitive apache apache \
  params ... \
  op monitor interval=60s timeout=30s

同じことを次のようにしても実行できます。

crm(live)configure# primitive apache apache \
   params ...
crm(live)configure# monitor apache 60s:30s

概要については、4.3項 「リソース監視」を参照してください。

6.4.9 クラスタリソースグループの構成

クラスタの一般的な要素の1つは、一緒の場所で見つける必要のあるリソースのセットです。連続的に開始し、逆の順序で停止します。この設定を簡単にするため、グループのコンセプトをサポートしています。次の例では、2つのプリミティブ(IPアドレスと電子メールリソース)を作成します。

  1. crmコマンドをシステム管理者として実行します。プロンプトがcrm(live)に変化します。

  2. プリミティブを設定します。

    crm(live)# configure
    crm(live)configure# primitive Public-IP ocf:IPaddr:heartbeat \
       params ip=1.2.3.4 id=p.public-ip
    crm(live)configure# primitive Email lsb:exim \
       params id=p.lsb-exim
  3. 該当するIDを使用して、正しい順序で、プリミティブをグループ化します。

    crm(live)configure# group g-shortcut Public-IP Email

グループメンバーの順序を変更するには、configureサブコマンドからmodgroupコマンドを使用します。プリミティブのEmailPublic-IPの前に移動するには、次のコマンドを使用します(このコマンドは機能のデモのみを目的としています)。

crm(live)configure# modgroup g-shortcut add p.lsb-exim before p.public-ip

グループ(Emailなど)からリソースを削除する場合には、次のコマンドを使用します。

crm(live)configure# modgroup g-shortcut remove p.lsb-exim

概要については、4.2.5.1項 「グループ」を参照してください。

6.4.10 クローンリソースの設定

クローンは当初、IPアドレスのN個のインスタンスを開始し、負荷分散のためにクラスタ上に分散させる便利な方法と考えられていました。それらは、DLMとの統合、サブシステムおよびOCFS2のフェンシングなど、他の目的にも有効であることがわかってきました。どのようなリソースでも、リソースエージェントがサポートしていれば、クローン化できます。

クローンリソースの詳細については、4.2.5.2項 「クローン」を参照してください。

6.4.10.1 匿名クローンリソースの作成

匿名クローンリソースを作成するには、まずプリミティブリソースを作成して、それをcloneコマンドで指定することです。次の操作を実行してください:

  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm configure
  2. 次のように、プリミティブを設定します。

    crm(live)configure# primitive Apache lsb:apache
  3. プリミティブをクローンします。

    crm(live)configure# clone cl-apache Apache 

6.4.10.2 ステートフル/マルチステートクローンリソースの作成

ステートフルクローンリソースを作成するには、まずプリミティブリソースを作成してから、マルチステートリソースを作成します。マルチステートリソースは少なくとも、昇格および降格操作をサポートしている必要があります。

  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm configure
  2. プリミティブを作成します。必要に応じて間隔を変更します。

    crm(live)configure# primitive my-rsc ocf:myCorp:myAppl \
        op monitor interval=60 \
        op monitor interval=61 role=Master
  3. マルチステートリソースを作成します。

    crm(live)configure# ms ms-rsc my-rsc

6.5 クラスタリソースの管理

crmツールでは、クラスタリソースの設定が可能なだけでなく、既存リソースを管理することもできます。移行のサブセクションで概要を示します。

6.5.1 新しいクラスタリソースの開始

新しいクラスタリソースを開始するには、そのIDが必要です。次の手順に従います。

  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm
  2. リソースレベルに切り替えます。

    crm(live)# resource
  3. startでリソースを開始し、<Tab>キーを押してすべての既知のリソースを表示します。

    crm(live)resource# start start ID

6.5.2 リソースのクリーンアップ

リソースは、失敗した場合は自動的に再起動しますが、失敗のたびにリソースの失敗回数が増加します。migration-thresholdがそのリソースに設定されている場合は、失敗の数が移行しきい値に達するとただちに、そのリソースはノードで実行できなくなります。

  1. シェルを開いて、rootユーザとしてログインします。

  2. すべてのリソースのリストを取得します。

    root # crm resource list
      ...
    Resource Group: dlm-clvm:1
             dlm:1  (ocf::pacemaker:controld) Started 
             clvm:1 (ocf::lvm2:clvmd) Started
             cmirrord:1     (ocf::lvm2:cmirrord) Started
  3. リソースを削除します。

    root # crm resource cleanup dlm-clvm

    たとえば、dlm-clvmリソースグループからのDLMリソースを停止したい場合は、RSCdlmで置き換えます。

6.5.3 クラスタリソースの削除

次の手順に従って、クラスタリソースを削除します。

  1. rootとしてログインし、crm対話型シェルを開始します。

    root # crm configure
  2. 次のコマンドを実行して、リソースのリストを取得します。

    crm(live)# resource status

    たとえば、出力はこのようになります(ここで、myIPはリソースの該当するID)。

    myIP    (ocf::IPaddr:heartbeat) ...
  3. 該当するIDを持つリソースを削除します(これは、commitも含意します)。

    crm(live)# configure delete YOUR_ID
  4. 変更をコミットします。

    crm(live)# configure commit

6.5.4 クラスタリソースのマイグレーション

リソースは、ハードウェアまたはソフトウェアに障害が発生した場合、クラスタ内の他のノードに自動的にフェールオーバー(つまり移行)するよう設定されていますが、Hawkまたはコマンドラインを使用して、手動でリソースを別のノードに移動することもできます。

この作業を行うには、migrateコマンドを使用します。たとえば、リソースipaddress1bobというクラスタノードに移行するには、次のコマンドを使用します。

root # crm resource
crm(live)resource# migrate ipaddress1 bob

6.5.5 リソースのグループ化/タグ付け

タグは、コロケーションの作成や関係の順序付けを行わずに、複数のリソースをただちに参照する方法です。これは、概念的に関連するリソースをグループ化するのに役立つ場合があります。たとえば、データベースに関連するいくつかのリソースがある場合は、tag-dbと呼ばれるタグを作成し、このタグにデータベースに関連するすべてのリソースを追加します。

root # crm configure tag-db db1 db2 db3

これにより、1つのコマンドですべてを起動できます。

root # crm resource start tag-db

同様に、すべてを停止することもできます。

root # crm resource stop tag-db

6.5.6 保守モードの使用

クラスタ設定の変更時、個々のノードに対するソフトウェアパッケージの更新時、または上位製品バージョンへのクラスタのアップグレード時であっても、個々のクラスタコンポーネント上、またはクラスタ全体でテストや保守タスクを実行する必要がある場合があります。

それに関して、High Availability Extensionは、次のレベルでmaintenanceオプションを提供しています。

クラスタへの保守モードの適用

クラスタ全体を保守モードにする場合は、次のコマンドを使用します。

root # crm configure property maintenance-mode=true
ノードへの保守モードの適用

たとえば、ノードaliceを保守モードにするには:

root # crm node maintenance alice

crm statusコマンドは、aliceの保守モードを表示し、そのノードに他のリソースが割り当てられないことを示します。ノードから保守フラグを削除するには、次を使用します。

root # crm node ready alice
リソースへの保守モードの適用

特定のリソースを保守モードに設定する必要がある場合は、metaコマンドを使用します。たとえば、リソースipaddressを保守モードにするには、次のコマンドを入力します。

root # crm meta ipaddress set maintenance true
警告
警告: データ損失の危険

クラスタ制御下でサービスを実行しているときにテストまたは保守タスクを実行する必要がある場合は、次のアウトラインに従ってください。

  1. 手順を開始する前に、個々のリソース、ノード、またはクラスタ全体を保守モードに設定します。これにより、順序正しくリソースを起動できないなどの望ましくない影響、クラスタノード間でCIBが同期されないリスク、またはデータ損失を避けることができます。

  2. 保守タスクまたはテストを実行します。

  3. 完了したら、保守モードを解除して、通常のクラスタ操作を開始します。

保守モード中にリソースおよびクラスタで何が発生するかの詳細については、4.7項 「メンテナンスモード」を参照してください。

6.5.7 ヘルスステータスの取得

クラスタまたはノードのヘルスステータスは、「スクリプト」というもので表示できます。スクリプトは、ヘルスだけに限らず各タスクを実行できます。ただし、このサブセクションでは、ヘルスステータスを取得する方法に焦点を当てます。

healthコマンドに関するすべての詳細を取得するには、describeを使用します。

root # crm script describe health

このコマンドは、すべてのパラメータの説明とリスト、およびそのデフォルト値を示します。スクリプトを実行するには、runを使用します。

root # crm script run health verbose=true

スイートから1つのステップのみを実行したい場合は、describeコマンドのStepsカテゴリで、使用可能なすべてのステップを一覧表示できます。

たとえば、次のコマンドは、healthコマンドの最初のステップを実行します。さらなる調査のために、出力がhealth.jsonに保存されます。

root # crm script run health \
    step='Collect cluster information' \
    statefile='health.json'

スクリプトに関する追加情報を表示するには、http://crmsh.github.io/scripts/を参照してください。

6.6 cib.xmlから独立したパスワードの設定

クラスタ設定にパスワードなどの機密の情報が含まれている場合、それらをローカルファイルに保存する必要があります。こうしておけば、これらのパラメータがログに記録されたり、サポートレポートに漏洩することはありません。

secretを使用する前に、リソースの概要を確認するため、showコマンドを実行しておくとよいでしょう。

root # crm configure show
primitive mydb ocf:heartbeat:mysql \
   params replication_user=admin ...

上記のmydbリソースに対してパスワードを設定するには、次のコマンドを使用します。

root # crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]

次のように、保存されたパスワードが返されます。

root # crm resource secret mydb show passwd
linux

パラメータは、ノード間で同期する必要があることに注意してください。crm resource secretコマンドを使用すれば、この処理が実行されます。秘密のパラメータを管理する場合には、このコマンドを使用することを強く推奨します。

6.7 履歴情報の取得

クラスタの履歴の調査は複雑な作業です。この作業を簡素化するために、crmshにはhistoryコマンドとそのサブコマンドが含まれています。これは、SSHが正しく設定されていることが前提となります。

それぞれのクラスタは、状態を移動し、リソースを移行し、または重要なプロセスを開始します。これらすべてのアクションは、historyのサブコマンドによって取得できます。または、手順5.27「履歴エクスプローラで遷移を表示する 」で説明するように、Hawkを使用します。

デフォルトでは、すべてのhistoryコマンドは過去1時間のイベントを確認します。このタイムフレームを変更するには、limitサブコマンドを使用します。構文は次のとおりです。

root # crm history
crm(live)history# limit FROM_TIME [TO_TIME]

有効な例として、次のようなものが挙げられます。

limit4:00pm, limit16:00

どちらのコマンドも同じ意味で、今日の午後4時を表しています。

limit2012/01/12 6pm

2012年1月12日の午後6時。

limit"Sun 5 20:46"

今年の今月の5日日曜日の午後8時46分。

その他の例とタイムフレームの作成方法については、http://labix.org/python-dateutilを参照してください。

infoサブコマンドでは、crm_reportによって使用されているすべてのパラメータが表示されます。

crm(live)history# info
Source: live
Period: 2012-01-12 14:10:56 - end
Nodes: alice
Groups: 
Resources:

crm_reportを特定のパラメータに制限するには、サブコマンドhelpで使用可能なオプションを表示します。

詳細レベルに絞り込んでいくには、サブコマンドdetailとレベル数を使用します。

crm(live)history# detail 2

数値が大きいほど、レポートが詳細になっていきます。デフォルト値は0 (ゼロ)です。

ここまでのパラメータを設定したら、logを使用してログメッセージを表示します。

最後の遷移を表示するには、次のコマンドを使用します。

crm(live)history# transition -1
INFO: fetching new logs, please wait ...

このコマンドはログを取得し、dotty (graphvizパッケージから)を実行して、遷移グラフを表示します。 シェルはログファイルを開きます。ログ内は、カーソルキーでブラウズできます。

遷移グラフを表示する必要がない場合には、nographオプションを使用します。

crm(live)history# transition -1 nograph

6.8 詳細

  • crm マニュアルページ。

  • アップストリームプロジェクトマニュアルにアクセスします(http://crmsh.github.io/documentation)。

  • 詳しい例については、Highly Available NFS Storage with DRBD and Pacemakerを参照してください。

このページを印刷