このガイドは、SUSE® Linux Enterprise High Availability Extensionを使用してクラスタを設定、構成、および管理する必要がある管理者を対象にしています。構成と管理をすばやく効率的に行うため、High Availability Extensionにはグラフィカルユーザインタフェース(GUI)とコマンドラインインタフェース(CLI)の両方が備わっています。主要なタスクである、両方のアプローチ(GUIおよびCLI)の実行については、このガイドで詳細に説明されています。これにより、管理者は、ニーズを満たす適切なツールを選択できるようになります。
conntrackd
amsterdam
)Copyright © 2006–2024 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。
SUSEの商標については、http://www.suse.com/company/legal/を参照してください。その他の製品名および会社名は、各社の商標または登録商標です。商標記号(®、 ™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは絶対に正確であることを保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。
このガイドは、SUSE® Linux Enterprise High Availability Extensionを使用してクラスタを設定、構成、および管理する必要がある管理者を対象にしています。構成と管理をすばやく効率的に行うため、High Availability Extensionにはグラフィカルユーザインタフェース(GUI)とコマンドラインインタフェース(CLI)の両方が備わっています。主要なタスクである、両方のアプローチ(GUIおよびCLI)の実行については、このガイドで詳細に説明されています。これにより、管理者は、ニーズを満たす適切なツールを選択できるようになります。
このガイドは、次のパートで構成されています。
このパートでは、クラスタのインストールと設定を開始する前に、クラスタの基本とアーキテクチャをよく把握し、主要な機能と利点の概要を理解します。必要なハードウェア/ソフトウェア要件と、以降の手順を実行する前に必要な準備作業について学習します。YaSTを使用してHAクラスタのインストールおよび基本セットアップを実行します。クラスタを最新リリースバージョンにアップグレードする方法、または個々のパッケージを更新する方法について学習します。
Webインタフェース(Hawk2)またはコマンドラインインタフェース(crmsh)を使用して、リソースを追加、設定、および管理します。クラスタ設定への不正アクセスを防止するには、役割を定義して、それらを特定のユーザに割り当てることで細かく制御を行います。負荷分散およびフェンシングの使用方法を学習します。独自のリソースエージェントの作成、または既存のエージェントの変更を検討している場合、別の種類のリソースエージェントを作成する方法について背景情報を取得できます。
SUSE Linux Enterprise High Availability Extensionには、クラスタ対応のファイルシステム(OCFS2とGFS2)、およびcLVM (clustered Logical Volume Manager)が標準装備されています。データのレプリケーションでは、DRBD*を使用します。これにより、High Availabilityサービスのデータをクラスタのアクティブノードからスタンバイノードへミラーリングできます。さらに、クラスタ化したSambaサーバにより、異種混合環境にもHigh Availabilityソリューションが提供されます。
一般的な問題とその解決策の概要が記載されています。クラスタ、リソース、および制約に関して、このマニュアルで使用されている命名規則を示します。HA固有の用語を収録した用語集もあります。
このマニュアルの多くの章に、システム上またはインターネットで利用可能な追加のドキュメントリソースへのリンクが含まれています。
製品に関するマニュアルは、https://documentation.suse.comからご利用いただけます。最新のアップデートもご利用いただけるほか、マニュアルをさまざまな形式でブラウズおよびダウンロードすることができます。最新のマニュアルアップデートは通常、英語版で検索できます。
この製品の次のマニュアルを入手できます。
このマニュアルでは、ha-cluster-bootstrap
パッケージで提供されているブートストラップスクリプトを使用して、非常に基本的な2ノードクラスタをセットアップする手順を説明します。仮想IPアドレスをクラスタリソースとして設定する手順や、共有ストレージ上でSBDをフェンシングメカニズムとして使用する手順も記載されています。
このガイドは、SUSE® Linux Enterprise High Availability Extensionを使用してクラスタを設定、構成、および管理する必要がある管理者を対象にしています。構成と管理をすばやく効率的に行うため、High Availability Extensionにはグラフィカルユーザインタフェース(GUI)とコマンドラインインタフェース(CLI)の両方が備わっています。主要なタスクである、両方のアプローチ(GUIおよびCLI)の実行については、このガイドで詳細に説明されています。これにより、管理者は、ニーズを満たす適切なツールを選択できるようになります。
Geoクラスタリングを使用すると、それぞれ1つのローカルクラスタを備えた地理的に分散された複数のサイトを運用できます。これらのクラスタ間のフェールオーバーは、より高いレベルのエンティティであるブースクラスタチケットマネージャによって管理されます。
Geoクラスタリングを使用すると、それぞれ1つのローカルクラスタを備えた地理的に分散された複数のサイトを運用できます。これらのクラスタ間のフェールオーバーは、より高いレベルのエンティティであるブースクラスタチケットマネージャによって調整されます。このドキュメントでは、ブースのセットアップオプションおよびパラメータ、Geoクラスタ用のCsync2のセットアップ、クラスタリソースを設定する方法、および変更時に他のクラスタサイトに転送する方法について詳しく説明します。また、コマンドラインから、およびHawkを使用してGeoクラスタを管理する方法、および最新の製品バージョンにアップグレードする方法についても説明します。
このドキュメントでは、SUSE Linux Enterprise High Availability Extension 12 SP5の次のコンポーネント: DRBD* (Distributed Replicated Block Device)、LVM (Logical Volume Manager)、およびクラスタリソース管理フレームワークであるPacemakerkを使用して、2ノードクラスタの高可用性NFSストレージを設定する方法について説明します。
このマニュアルでは、Pacemakerとpacemaker_remote
によって管理される、リモートノードまたはゲストノードを含むHigh Availabilityクラスタをセットアップする手順を説明します。pacemaker_remote
の「リモート」という用語は、物理的な距離を意味するのではなく、クラスタの「非メンバーシップ」を意味しています。
次のフィードバックチャネルがあります。
ご使用の製品に利用できるサービスとサポートのオプションについては、http://www.suse.com/support/を参照してください。
製品コンポーネントのバグを報告するには、https://scc.suse.com/support/requestsにアクセスしてログインし、 をクリックします。
SUSE Bugzillaアカウントをお持ちの場合は、このドキュメントのHTMLバージョンの見出し横にある
リンクをクリックしてください。バグレポートを開くことができるBugzillaに移動します。
この製品のドキュメントについてのフィードバックは、doc-team@suse.com
宛のメールでも送信できます。ドキュメントのタイトル、製品のバージョン、およびドキュメントの発行日を明記してください。エラーの報告または機能拡張の提案では、問題について簡潔に説明し、対応するセクション番号とページ(またはURL)をお知らせください。
このマニュアルでは、次の通知と表記規則が使用されています。
tux >
command
root
ユーザを含む、任意のユーザが実行可能なコマンド。
root #
command
root
特権で実行する必要のあるコマンド。多くの場合、これらのコマンドの頭にsudo
コマンドを置いて実行することもできます。
crm(live)
対話型crmシェルで実行されるコマンド。詳細については、第8章 「クラスタリソースの設定と管理(コマンドライン)」を参照してください。
/etc/passwd
:ディレクトリ名とファイル名
PLACEHOLDER:PLACEHOLDERは、実際の値で置き換えられます
PATH
:環境変数PATH
ls
、--help
:コマンド、オプション、およびパラメータ
user
:ユーザまたはグループ
packagename:パッケージの名前
Alt, Alt–F1 :使用するキーまたはキーの組み合わせ、キーはキーボード上と同様、大文字で表示される
、 › : メニュー項目、ボタン
amd64, em64t, ipf
この説明は、amd64
、em64t
、およびipf
の各アーキテクチャにのみ当てはまります。矢印は、テキストブロックの先頭と終わりを示します。
Dancing Penguins (「Penguins」の章、↑他のマニュアル):他のマニュアルの章への参照です。
通知
続行する前に知っておくべき、無視できない情報。セキュリティ上の問題、データ損失の可能性、ハードウェアの損傷、または物理的な危険について警告します。
続行する前に知っておくべき重要な情報。
追加情報。たとえば、ソフトウェアバージョンの違いに関する情報です。
ガイドラインや実際的なアドバイスなどの役に立つ情報。
クラスタノードと名前、リソース、およびに制約に関する命名規則の概要については、付録B 命名規則を参照してください。
このマニュアルは、DocBook 5のサブセットであるSUSEDocで作成されています。XMLソースファイルはjing
(https://code.google.com/p/jing-trang/を参照)によって検証され、xsltproc
によって処理され、Norman Walshによるスタイルシートのカスタマイズ版を使用してXSL-FOに変換されました。最終的なPDFは、Apache Software FoundationのFOPを使用して書式設定されています。このマニュアルの作成に使用したオープンソースツールと環境は、DocBook Authoring and Publishing Suite (DAPS)によって提供されたものです。プロジェクトのホームページはhttps://github.com/openSUSE/dapsにあります。
このマニュアルのXMLソースコードについては、https://github.com/SUSE/doc-slehaを参照してください。
SUSE® Linux Enterprise High Availability Extensionは、オープンソースクラスタ化技術の統合スイートで、可用性の高い物理Linuxクラスタと仮想Linuxクラスタを実装し、SPOF (シングルポイント障害)をなくします。データ、アプリケーション、サービスなどの重要なリソースの高度な可用性と管理のしやすさを実現します。その結果、ミッションクリティカルなLinuxワークロードに対してビジネスの継続性維持、データ整合性の保護、予期せぬダウンタイムの削減を行います。
基本的な監視、メッセージング、およびクラスタリソース管理の機能を標準装備し、個々の管理対象クラスタリソースのフェールオーバー、フェールバック、およびマイグレーション(負荷分散)をサポートします。
この章では、High Availability Extensionの主な製品機能と利点を紹介します。ここには、いくつかのクラスタ例が記載されており、クラスタを設定するコンポーネントについて学ぶことができます。最後のセクションでは、アーキテクチャの概要を示し、クラスタ内の個々のアーキテクチャ層とプロセスについて説明します。
High Availabilityクラスタのコンテキストでよく使用される用語については、用語集を参照してください。
次のセクションでは、SUSE® Linux Enterprise High Availability Extensionのシステム要件と前提条件について説明します。また、クラスタセットアップの推奨事項についても説明します。
初めてSUSE® Linux Enterprise High Availability Extensionを使用してHigh Availabilityクラスタを設定する場合、最も簡単な方法は、基本的な2ノードクラスタで開始することです。2ノードクラスタを使用して、一部のテストを実行することもできます。後で、AutoYaSTを使用して既存のクラスタノードのクローンを作成することにより、さらにノードを追加できます。クローンを作成したノードには、元のノードと同じパッケージがインストールされ、クローンノードは同じシステム設定を持つことになります。
前のバージョンのSUSE Linux Enterprise High Availability Extensionを実行する既存のクラスタをアップグレードする場合は、第5章 「クラスタアップグレードとソフトウェアパッケージの更新」の章を参照してください。
YaSTクラスタモジュールでは、クラスタを手動で(最初から)設定するか、既存のクラスタのオプションを変更することができます。
ただし、クラスタの設定に自動化された方法を選ぶ場合は、Article “インストールおよびセットアップクイックスタート”を参照してください。このマニュアルでは、必要なパッケージのインストール方法と、ha-cluster-bootstrap
スクリプトを使用して基本的な2ノードクラスタを設定する手順を説明しています。
たとえば、1つのノードをYaSTクラスタで設定してから、ブートストラップスクリプトの1つを使用して他のノードを統合させる(またはその逆も可能)など、両方のセットアップ方法を組み合わせることもできます。
この章では、次の2つの異なるシナリオ(SUSE Linux Enterprise High Availability Extensionの別バージョン(メジャーリリースまたはサービスパック)へのクラスタアップグレード、およびクラスタノード上の各パッケージの更新)について説明します。5.2項 「最新の製品バージョンへのクラスタアップグレード」および5.3項 「クラスタノード上のソフトウェアパッケージの更新」を参照してください。
クラスタをアップグレードする場合、アップグレードを開始する前に、5.2.1項 「SLE HAおよびSLE HA Geoでサポートされるアップグレードパス」および5.2.2項 「アップグレード前に必要な準備」を確認してください。
SUSE® Linux Enterprise High Availability Extensionは、オープンソースクラスタ化技術の統合スイートで、可用性の高い物理Linuxクラスタと仮想Linuxクラスタを実装し、SPOF (シングルポイント障害)をなくします。データ、アプリケーション、サービスなどの重要なリソースの高度な可用性と管理のしやすさを実現します。その結果、ミッションクリティカルなLinuxワークロードに対してビジネスの継続性維持、データ整合性の保護、予期せぬダウンタイムの削減を行います。
基本的な監視、メッセージング、およびクラスタリソース管理の機能を標準装備し、個々の管理対象クラスタリソースのフェールオーバー、フェールバック、およびマイグレーション(負荷分散)をサポートします。
この章では、High Availability Extensionの主な製品機能と利点を紹介します。ここには、いくつかのクラスタ例が記載されており、クラスタを設定するコンポーネントについて学ぶことができます。最後のセクションでは、アーキテクチャの概要を示し、クラスタ内の個々のアーキテクチャ層とプロセスについて説明します。
High Availabilityクラスタのコンテキストでよく使用される用語については、用語集を参照してください。
High Availability Extensionは、SUSE Linux Enterprise Server 12 SP5の拡張として入手できます。Geo Clustering for SUSE Linux Enterprise High Availability Extensionという、High Availability Extensionの個別の拡張として、地理的に離れたクラスタ(Geoクラスタ)に対するサポートが提供されています。
SUSE® Linux Enterprise High Availability Extensionでは、ネットワークリソースの可用性を確保し、管理することができます。以降のセクションでは、いくつかの主要機能に焦点を合わせて説明します。
High Availability Extensionは次のシナリオをサポートしています。
アクティブ/アクティブ設定
アクティブ/パッシブ設定: N+1、N+M、Nから1、NからM
ハイブリッド物理仮想クラスタ。仮想サーバを物理サーバとともにクラスタ化できます。これによって、サービスの可用性とリソースの使用状況が向上します。
ローカルクラスタ
メトロクラスタ(「ストレッチされた」ローカルクラスタ)
Geoクラスタ(地理的に離れたクラスタ)は、追加のGeo拡張がサポートされます。1.2.5項 「ローカル、メトロ、およびGeoクラスタのサポート」を参照してください。
クラスタには、最大32のLinuxサーバを含めることができます。pacemaker_remote
を使用すると、この制限を超えて追加のLinuxサーバを含めるようにクラスタを拡張できます。クラスタ内のどのサーバも、クラスタ内の障害が発生したサーバのリソース(アプリケーション、サービス、IPアドレス、およびファイルシステム)を再起動することができます。
High Availability Extensionには、Corosyncメッセージングおよびメンバーシップ層のほか、Pacemakerクラスタリソースマネージャが標準装備されています。Pacemakerの使用によって、管理者は継続的にリソースのヘルスとステータスを監視し、依存関係を管理し、柔軟に設定できるルールとポリシーに基づいてサービスを自動的に開始および停止できます。High Availability Extensionでは、ユーザの組織に適した特定のアプリケーションおよびハードウェアインフラストラクチャに合わせて、クラスタのカスタマイズが可能です。時間依存設定を使用して、サービスを特定の時刻に修復済みのノードに自動的にフェールバック(マイグレート)させることができます。
High Availability Extensionでは必要に応じてサーバストレージを自動的に割り当て、再割り当てすることができます。ファイバチャネルストレージエリアネットワーク(SAN)とネットワーク上のiSCSIストレージをサポートします。共有ディスクシステムもサポートされていますが、必要要件ではありません。SUSE Linux Enterprise High Availability Extensionには、クラスタ対応のファイルシステムとボリュームマネージャ(OCFS2)、cLVM (clustered Logical Volume Manager)も含まれています。データのレプリケーションでは、DRBD*を使用して、High Availabilityサービスのデータをクラスタのアクティブノードからスタンバイノードへミラーリングできます。さらに、SUSE Linux Enterprise High Availability Extensionでは、Sambaクラスタリング技術であるCTDB (Clustered Trivial Database)もサポートしています。
SUSE Linux Enterprise High Availability Extensionは、物理Linuxサーバと仮想Linuxサーバ両方のクラスタリングをサポートしています。両タイプのサーバの混合もサポートしています。SUSE Linux Enterprise Server 12 SP5には、XenおよびKVM (カーネルベースの仮想マシン)が付属しています。両方がオープンソース仮想ハイパーバイザーです。仮想ゲストシステム(VMとも呼ばれる)はクラスタによるサービスとして管理できます。
SUSE Linux Enterprise High Availability Extensionは、様々な地理的なシナリオをサポートするように拡張されています。Geo Clustering for SUSE Linux Enterprise High Availability Extensionという、High Availability Extensionの個別の拡張として、地理的に離れたクラスタ(Geoクラスタ)に対するサポートが提供されています。
1つのロケーション内の単一のクラスタ(たとえば、すべてのノードが1つのデータセンターにある)。クラスタはノード間の通信にマルチキャストまたはユニキャストを使用し、フェールオーバーを内部で管理します。ネットワークの遅延時間は無視できます。ストレージは通常、すべてのノードに同時にアクセスされます。
複数の建物またはデータセンターにわたってストレッチできる単一のクラスタ。クラスタはノード間の通信に通常ユニキャストを使用し、フェールオーバーを内部で管理します。ネットワークの遅延時間は通常は短くなります(約20マイルの距離で<5ms)。 ストレージは可能な場合はファイバチャネルで接続されます。データレプリケーションは内部でストレージごとに、またはクラスタの管理下でホストベースのミラーリングごとに実行されます。
それぞれにローカルクラスタを持つ、複数の地理的に離れたサイト。サイトはIPによって交信します。サイト全体のフェールオーバーはより高いレベルのエンティティによって調整されます。Geoクラスタは限られたネットワーク帯域幅および高レイテンシに対応する必要があります。ストレージは同期的にレプリケートされます。
個々のクラスタノード間の地理的距離が大きいほど、クラスタが提供するサービスの高可用性を妨げる可能性のある要因が多くなります。ネットワークの遅延時間、限られた帯域幅およびストレージへのアクセス が長距離クラスタの課題として残ります。
SUSE Linux Enterprise High Availability Extensionには、Apache、IPv4、IPv6、その他多数のリソースを管理するための膨大な数のリソースエージェントが含まれています。またIBM WebSphere Application Serverなどの一般的なサードパーティアプリケーション用のリソースエージェントも含まれています。ご利用の製品に含まれているOpen Cluster Framework (OCF)リソースエージェントの概要は、8.1.3項 「OCFリソースエージェントに関する情報の表示」で説明されるcrm ra
コマンドを使用してください。
High Availability Extensionは、クラスタの基本的なインストールとセットアップのほか、効果的な設定および管理に使用できる強力なツールセットを標準装備しています。
一般的なシステムインストールおよび管理用グラフィカルユーザインタフェース。『インストールおよびセットアップクイックスタート』で説明されているように、YaSTを使用して、High Availability ExtensionをSUSE Linux Enterprise Server上にインストールします。YaSTでは、クラスタまたは個々のコンポーネントの設定に役立つように、High Availabilityカテゴリ内の次のモジュールも提供しています。
クラスタ: 基本的なクラスタセットアップ。詳細については、第4章 「YaSTクラスタモジュールの使用」を参照してください。
DRBD: Distributed Replicated Block Deviceの設定。
IP負荷分散: Linux仮想サーバまたはHAProxyによる負荷分散の設定。詳細については、第14章 「負荷バランス」を参照してください。
Linux以外のマシンから、Linuxクラスタを管理できるWebベースのユーザインタフェース。このインタフェースは、システムにグラフィカルユーザインタフェースがない場合も理想的なソリューションです。リソースの作成と設定の手順を順を追って支援し、リソースの起動、中止、移行などの管理作業を容易にします。詳細については、第7章 「Hawk2を使用したクラスタリソースの設定と管理」を参照してください。
crm
シェル
リソースを設定し、すべての監視または管理作業を実行する、統合されたパワフルなコマンドラインインタフェースです。詳細については、第8章 「クラスタリソースの設定と管理(コマンドライン)」を参照してください。
High Availability Extensionでは最大 32台のLinuxサーバを可用性の高いクラスタ(HAクラスタ)に設定し、クラスタ内の任意のサーバにリソースをダイナミックに切り替えたり、移動することができます。サーバ障害発生時のリソースの自動マイグレーションの設定ができます。また、ハードウェアのトラブルシューティングやワークロードのバランスをとるために、リソースを手動で移動することもできます。
High Availability Extensionは、コモディティコンポーネントによる高可用性を提供しています。アプリケーションと操作をクラスタに統合することによって、運用コストを削減できます。さらにHigh Availability Extensionでは、クラスタ全体を一元管理し、変化するワークロード要件に応じてリソースを調整することもできます(手動でのクラスタの「負荷分散」)。3ノード以上でクラスタを設定すると、複数のノードが「ホットスペア」を共用できて無駄がありません。
その他にも重要な利点として、予測できないサービス停止を削減したり、ソフトウェアおよびハードウェアの保守やアップグレードのための計画的なサービス停止を削減できる点が挙げられます。
次に、クラスタによるメリットについて説明します。
可用性の向上
パフォーマンスの改善
運用コストの低減
スケーラビリティ
障害回復
データの保護
サーバの集約
ストレージの集約
共有ディスクサブシステムにRAID を導入することによって、共有ディスクの耐障害性を強化できます。
次のシナリオは、High Availability Extensionの利点を紹介するものです。
サーバ3台でクラスタが設定され、それぞれのサーバにWebサーバをインストールしたと仮定します。クラスタ内の各サーバが、2つのWebサイトをホストしています。各Webサイトのすべてのデータ、グラフィックス、Webページコンテンツは、クラスタ内の各サーバに接続された、共有ディスクサブシステムに保存されています。次の図は、このクラスタのセットアップを示しています。
通常のクラスタ操作では、クラスタ内の各サーバが他のサーバと常に交信し、すべての登録済みリソースを定期的にポーリングして、障害を検出します。
Webサーバ1でハードウェアまたはソフトウェアの障害が発生したため、このサーバを利用してインターネットアクセス、電子メール、および情報収集を行っているユーザの接続が切断されたとします。次の図は、Webサーバ1で障害が発生した場合のリソースの移動を表したものです。
WebサイトAがWebサーバ2に、WebサイトBがWebサーバ3に移動します。IPアドレスと証明書もWebサーバ2とWebサーバ3に移動します。
クラスタを設定するときに、それぞれのWebサーバがホストしているWebサイトについて、障害発生時の移動先を指定します。先に説明した例では、WebサイトAの移動先としてWebサーバ2が、WebサイトBの移動先としてWebサーバ3が指定されています。このようにして、Webサーバ1によって処理されていたワークロードが、残りのクラスタメンバーに均等に分散され、可用性を維持できます。
Webサーバ1で障害が発生すると、High Availability Extensionソフトウェアは次の処理を実行します。
障害を検出し、Webサーバ 1が本当に機能しなくなっていることをSTONITHを使用して検証。STONITHは、「Shoot The Other Node In The Head」(他のノードの頭を撃て)の頭字語であり、誤動作しているノードをダウンさせて、それらがクラスタ内に問題を発生させることを防ぎます。
Webサーバ1にマウントされていた共有データディレクトリを、Webサーバ2およびWebサーバ3に再マウント。
Webサーバ1で動作していたアプリケーションを、Webサーバ2およびWebサーバ3で再起動。
IPアドレスをWebサーバ2およびWebサーバ3に移動。
この例では、フェールオーバープロセスが迅速に実行され、ユーザはWebサイトの情報へのアクセスを数秒程度で回復できます。通常、再度ログインする必要はありません。
ここで、Webサーバ1で発生した問題が解決し、通常に操作できる状態に戻ったと仮定します。WebサイトAおよびWebサイトBは、Webサーバ1に自動的にフェールバック(復帰)することも、そのままの状態を維持することもできます。これは、リソースの設定方法によって決まります。Webサーバ1へのマイグレーションは多少のダウンタイムを伴うため、High Availability Extensionではサービス中断がほとんど、またはまったく発生しないタイミングまでマイグレーションを延期することもできます。いずれの場合でも利点と欠点があります。
High Availability Extensionは、リソースマイグレーション機能も提供します。アプリケーション、Webサイトなどをシステム管理の必要性に応じて、クラスタ内の他のサーバに移動することができます。
たとえば、WebサイトAまたはWebサイトBをWebサーバ1からクラスタ内の他のサーバに手動で移動することができます。これは、Webサーバ1のアップグレードや定期メンテナンスを実施する場合、また、Webサイトのパフォーマンスやアクセスを向上させる場合に有効な機能です。
High Availability Extensionでのクラスタ構成には、共有ディスクサブシステムが含まれる場合と含まれない場合があります。共有ディスクサブシステムの接続には、高速ファイバチャネルカード、ケーブル、およびスイッチを使用でき、また設定にはiSCSIを使用することができます。サーバの障害時には、クラスタ内の別の指定されたサーバが、障害の発生したサーバにマウントされていた共有ディスクディレクトリを自動的にマウントします。この機能によって、ネットワークユーザは、共有ディスクサブシステム上のディレクトリに対するアクセスを中断することなく実行できます。
一般的なリソースの例としては、データ、アプリケーション、およびサービスなどがあります。次の図は、一般的なファイバチャネルクラスタの設定を表したものです。
ファイバチャネルは最も高いパフォーマンスを提供しますが、iSCSIを利用するようにクラスタを設定することもできます。iSCSIは低コストなストレージエリアネットワーク(SAN)を作成するための方法として、ファイバチャネルの代わりに使用できます。次の図は、一般的なiSCSIクラスタの設定を表したものです。
ほとんどのクラスタには共有ディスクサブシステムが含まれていますが、共有ディスクサブシステムなしのクラスタを作成することもできます。次の図は、共有ディスクサブシステムなしのクラスタを表したものです。
このセクションでは、High Availability Extensionアーキテクチャの概要を説明します。アーキテクチャコンポーネントと、その相互運用方法について説明します。
High Availability Extensionのアーキテクチャは層化されています。図1.6「アーキテクチャ」に異なる層と関連するコンポーネントを示します。
プライマリまたは最初の層は、メッセージングおよびインフラストラクチャの層で、Corosync層とも呼ばれます。この層には、「I am alive」信号やその他の情報を含むメッセージを送信するコポーネントが含まれます。
次の層はリソース割り当て層です。この層は最も複雑で、次のコンポーネントから設定されていいます。
リソース割り当て層のすべてのアクションは、クラスターリソースマネージャを通過します。リソース割り当て層の他のコンポーネント(または上位層のコンポーネント)による通信の必要性が発生した場合は、ローカルCRM経由で行います。すべてのノードで、CRMはCIB (クラスタ情報ベース)を維持しています。
クラスタ情報ベースは、メモリ内でクラスタ全体の設定や現在のステータスをXML形式で表すものです。すべてのクラスタオプション、ノード、リソース、制約、相互関係の定義が含まれます。CIBはすべてのクラスタノードへの更新の同期化も行います。指定コーディネータ(DC)が維持するマスタCIBがクラスタ内に1つあります。他のすべてのノードにはCIBのレプリカが含まれます。
クラスタ内のCRMはDCとして選択されます。DCは、ノードのフェンシングやリソースの移動など、クラスタ全体におよぶ変更が必要かどうかを判断できる、クラスタ内で唯一のエンティティです。DCは、CIBのマスターコピーが保持されるノードでもあります。その他すべてのノードは、現在のDCから設定とリソース割り当て情報を取得します。DCは、メンバーシップの変更後、クラスタ内のすべてのノードから選抜されます。
指定コーディネータがクラスタ全体におよぶ変更を行う(新しいCIBに対応する)ことが必要になるたびに、ポリシーエンジンは現在の状態と設定に基づき、クラスタの次の状態を計算します。PEは(リソース)アクションのリストと、次のクラスタ状態に移るために必要な依存性を含む遷移グラフも作成します。PEは常にDC上で実行されます。
LRMはCRMに代わってローカルリソースエージェントを呼び出します(1.5.1.3項 「リソース層」を参照)。そのため、操作の開始、停止、監視を行い、結果をCRMに報告します。LRMはそのローカルノード上のすべてのリソース関連情報の信頼できるソースです。
最も上位の層はリソース層です。リソース層には1つ以上のリソースエージェント(RA)が含まれます。リソースエージェントは、一定の種類のサービス(リソース)を開始、停止、監視するために作成されたプログラム(通常はシェルスクリプト)です。リソースエージェントの呼び出しはLRMだけが行います。サードパーティはファイルシステム内の定義された場所に独自のエージェントを配置して、自社ソフトウェア用に、すぐに使えるクラスタ統合機能を提供することができます。
SUSE Linux Enterprise High Availability Extensionでは、PacemakerをCRMとして使用します。CRMは各クラスタノード上にインスタンスを持つデーモン(crmd
)として実装されます。Pacemakerは、マスタとして動作するcrmdインスタンスを1つ選択することにより、クラスタのすべての意思決定を一元化します。選択したcrmdプロセス(またはその下のノード)で障害が発生したら、新しいcrmdプロセスが確立されます。
クラスタの設定とクラスタ内のすべてのリソースの現在の状態を反映したCIBが、各ノードに保存されます。CIBのコンテンツはクラスタ全体で自動的に同期化されます。
クラスタ内で実行するアクションの多くは、クラスタ全体におよぶ変更を伴います。これらのアクションにはクラスタリソースの追加や削除、リソース制約の変更などがあります。このようなアクションを実行する場合は、クラスタ内でどのような変化が発生するのかを理解することが重要です。
たとえば、クラスタIPアドレスリソースを追加するとします。そのためには、コマンドラインツールかWebインタフェースを使用してCIBを変更できます。DC上でアクションを実行する必要はなく、クラスタ内の任意のノードでいずれかのツールを使用すれば、DCに反映されます。そして、DCがすべてのクラスタノードにCIBの変更を複製します。
CIBの情報に基づき、PEがクラスタの理想的な状態と実行方法を計算し、指示リストをDCに送ります。DCはメッセージング/インフラストラクチャ層を介してコマンドを送信し、他のノードのcrmdピアがこれらのコマンドを受信します。各crmdはLRM(lrmdとして実装)を使用してリソースを変更します。lrmdはクラスタに対応しておらず、リソースエージェント(スクリプト)と直接通信します。
すべてのピアノードは操作結果をDCに返送します。DCが、すべての必要な操作がクラスタ内で成功したことを確認すると、クラスタはアイドル状態に戻り、次のイベントを待機します。予定通り実行されなかった操作があれば、CIBに記録された新しい情報を元に、PEを再度呼び出します。
場合によっては、共有データの保護や完全なリソース復旧のためにノードの電源を切らなければならないことがあります。このPacemakerにはフェンシングサブシステムとしてstonithdが内蔵されています。STONITHは「Shoot The Other Node In The Head」の略です。通常は、STONITH共有ブロックデバイス、リモート管理ボード、またはリモートパワースイッチを使用して実装されます。Pacemakerで、STONITHデバイスはリソースとしてモデル化されており(そしてCIBで設定されており)、簡単に使用することができます。ただし、stonithdがSTONITHトポロジの把握を担うため、そのクライアントはノードのフェンシングを要求し、残りをstonithdが行います。
次のリストは、SUSE® Linux Enterprise High Availability Extensionに基づくクラスタのハードウェア要件を指定しています。これらの要件は、最低のハードウェア設定を表しています。クラスタの使用方法によっては、ハードウェアを追加しなければならないこともあります。
2.2項 「ソフトウェアの必要条件」に指定されたソフトウェアを搭載した1~32台のLinuxサーバ。
サーバはベアメタルでも仮想マシンでも構いません。各サーバが同一のハードウェア設定(メモリ、ディスクスペースなど)になっている必要はありませんが、アーキテクチャは同じである必要があります。クロスプラットフォームのクラスタはサポートされていません。
pacemaker_remote
を使用すると、32ノード制限を超えて追加のLinuxサーバを含めるようにクラスタを拡張できます。
クラスタノードあたり、少なくとも2つのTCP/IP通信メディア。ネットワーク機器は、クラスタ通信に使用する通信手段(マルチキャストまたはユニキャスト)をサポートする必要があります。通信メディアは100Mbit/s以上のデータレートをサポートする必要があります。サポートされるクラスタセットアップでは、2つ以上の冗長通信パスが必要です。これは次のように実行できます。
ネットワークデバイスボンディング(推奨)。
Corosync内の2つ目の通信チャネル。
インフラストラクチャ層のネットワークの耐障害性(ハイパーバイザーなど)。
詳細については、第13章 「ネットワークデバイスボンディング」と手順4.3「冗長通信チャネルの定義」をそれぞれ参照してください。
「スプリットブレイン」シナリオを回避するため、クラスタにはノードフェンシングメカニズムが必要です。スプリットブレインシナリオでは、クラスタノードは、お互いを認識していない2つ以上のグループに分割されます(ハードウェアまたはソフトウェアの障害か、ネットワーク接続の切断による)。フェンシングメカニズムにより、問題のあるノードを分離します(通常はノードをリセットするか、ノードの電源をオフにすることによって分離します)。これをSTONITH (「Shoot the other node in the head」)と呼びます。ノードフェンシングメカニズムは、物理デバイス(電源スイッチ)でも、SBD (ディスクによるSTONITH)のようなメカニズムとウォッチドッグを組み合わせたものでも構いません。SBDを使用するには共有ストレージが必要です。
SBDが使用される場合を除き、High Availabilityクラスタの各ノードには少なくとも1つのSTONITHデバイスが必要です。ノードごとに複数のSTONITHデバイスを使用することを強くお勧めします。
クラスタにはノードフェンシングメカニズムが必要です。
グローバルクラスタオプションstonith-enabled
およびstartup-fencing
をtrue
に設定する必要があります。これらを変更するとサポートされなくなります。
クラスタに参加するすべてのノードに次のソフトウェアがインストールされている必要があります。
SUSE® Linux Enterprise Server 12 SP5 (利用可能なすべてのオンラインアップデートが適用されていること)
SUSE Linux Enterprise High Availability Extension 12 SP5 (利用可能なすべてのオンラインアップデートが適用されていること)
(オプション)Geoクラスタの場合: Geo Clustering for SUSE Linux Enterprise High Availability Extension 12 SP5 (利用可能なすべてのオンラインアップデートが適用されていること)
一部のサービスでは、共有ストレージが必要です。外部NFS共有を使用する場合は、冗長通信パスを介してすべてのクラスタノードから確実にアクセスできる必要があります。
クラスタでデータの可用性を高めたい場合は、共有ディスクシステム(SAN: Storage Area Network)の利用をお勧めします。共有ディスクシステムを使用する場合は、次の要件を満たしていることを確認してください。
メーカーの指示のに従い、共有ディスクシステムが適切に設定され、正しく動作していることを確認します。
共有ディスクシステム中のディスクを、ミラーリングまたはRAIDを使用して耐障害性が高められるように設定してください。
共有ディスクシステムのアクセスにiSCSIを使用している場合、iSCSIイニシエータとターゲットを正しく設定していることを確認します。
2台のマシンにデータを配分するミラーリングRAIDシステムを実装するためにDRBD*を使用する際、DRBDに提供されるデバイスにのみアクセスし、決してバッキングデバイスにはアクセスしないようにします。ボンディングNICを使用します。冗長性を確保するために、クラスタの残りの部分と同一のNICを利用できます。
SBDをSTONITHメカニズムとして使用する場合は、共有ストレージに対して追加の要件が適用されます。詳細については、11.3項 「要件」を参照してください。
サポートされていて、役に立つHigh Availabilityセットアップについては、次の推奨事項を検討してください。
3つ以上のノードを持つクラスタに対して、奇数のクラスタノードを使用してクォーラムを持つようにすることを強くお勧めします。クォーラムの詳細については、6.2項 「クォーラムの判断」を参照してください。
クラスタノードはクラスタ外のNTPサーバに同期する必要があります。詳細については、https://documentation.suse.com/sles-12/html/SLES-all/cha-netz-xntp.htmlを参照してください。
ノードが同期されていない場合、クラスタが正常に動作しないことがあります。また、同期が行われていないと、ログファイルとクラスタレポートの分析が非常に困難になります。ブートストラップスクリプトを使用するときにNTPがまだ設定されていない場合、警告が表示されます。
すべてのノード上で同一である必要があります。
静的IPアドレスを使用します。
/etc/hosts
ファイルにあるすべてのクラスタノードを、完全修飾ホスト名およびショートホスト名で一覧表示します。クラスタのメンバーが名前で互いを見つけられることが重要です。名前を使用できない場合、内部クラスタ通信は失敗します。
Pacemakerがノード名を取得する方法の詳細については、http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-node-name.htmlも参照してください。
すべてのクラスタノードはSSHによって互いにアクセスできる必要があります。crm report
(トラブルシューティング用)などのツールおよびHawk2の は、ノード間でパスワード不要のSSHアクセスを必要とします。それがない場合、現在のノードからしかデータを収集できません。
パスワード不要のSSHアクセスが規定要件に適合しない場合は、付録D root
アクセスなしでのクラスタレポートの実行で説明されている次善策を使用してcrm report
を実行できます。
については、現在のところ、パスワード不要のログインに代わる方法はありません。
初めてSUSE® Linux Enterprise High Availability Extensionを使用してHigh Availabilityクラスタを設定する場合、最も簡単な方法は、基本的な2ノードクラスタで開始することです。2ノードクラスタを使用して、一部のテストを実行することもできます。後で、AutoYaSTを使用して既存のクラスタノードのクローンを作成することにより、さらにノードを追加できます。クローンを作成したノードには、元のノードと同じパッケージがインストールされ、クローンノードは同じシステム設定を持つことになります。
前のバージョンのSUSE Linux Enterprise High Availability Extensionを実行する既存のクラスタをアップグレードする場合は、第5章 「クラスタアップグレードとソフトウェアパッケージの更新」の章を参照してください。
High Availability Extension用のパッケージの手動インストールについては、Article “インストールおよびセットアップクイックスタート”を参照してください。
2ノードクラスタをインストールしてセットアップした後で、AutoYaSTを使用して既存のノードのクローンを作成し、クラスタにそのクローンを追加することによりクラスタを拡張できます。
AutoYaSTでは、インストールおよび設定データを含むプロファイルを使用します。このプロファイルによって、インストールする対象と、インストールしたシステムが最終的に使用準備が整ったシステムになるように設定する方法がAutoYaSTに指示されます。そこでこのプロファイルはさまざまな方法による大量配備に使用できます(たとえば、既存のクラスタノードのクローンなど)。
手順3.1「AutoYaSTによるクラスタノードのクローン作成」では、同じハードウェア構成を持つ一群のマシンにSUSE Linux Enterprise High Availability Extension 12 SP5を展開していることを前提としています。
同じではないハードウェア上にクラスタノードを展開する必要がある場合は、『SUSE Linux Enterprise 12 SP5導入ガイド』、「Automated Installation」の章の「Rule-Based Autoinstallation」セクションを参照してください。
クローンを作成するノードが正しくインストールされ、設定されていることを確認します。詳細については、SUSE Linux Enterprise High Availability Extension用の『インストールおよびセットアップクイックスタート』または第4章 「YaSTクラスタモジュールの使用」を参照してください。
単純な大量インストールについては、『SUSE Linux Enterprise 12 SP5 導入ガイド』の説明に従ってください。これには、次の基本ステップがあります。
AutoYaSTプロファイルの作成AutoYaST GUIを使用して、既存のシステム設定をもとにプロファイルを作成し、変更します。AutoYaSTでは、
モジュールを選択し、 ボタンをクリックします。必要な場合は、他のモジュールの設定を調整し、その結果のコントロールファイルをXMLとして保存します。DRBDを設定した場合、AutoYaST GUIでこのモジュールを選択してクローンを作成することもできます。
AutoYaSTプロファイルのソースと、他のノードのインストールルーチンに渡すパラメータを決定します。
SUSE Linux Enterprise ServerのソースとSUSE Linux Enterprise High Availability Extensionインストールデータを決定します。
自動インストールのブートシナリオを決定し、設定します。
パラメータを手動で追加するか、またはinfo
ファイルを作成することにより、インストールルーチンにコマンド行を渡します。
自動インストールプロセスを開始および監視します。
クローンのインストールに成功したら、次の手順を実行して、クローンノードをクラスタに加えます。
4.5項 「すべてのノードへの設定の転送」の説明に従って、Csync2を使用して、設定済みのノードからクローンノードへ重要な設定ファイルを転送します。
ノードをオンラインにするには、4.8項 「クラスタをオンラインにする」の説明のとおり、クローンノード上でPacemakerサービスを開始します。
これで、/etc/corosync/corosync.conf
ファイルがCsync2を介してクローンノードに適用されたので、クローンノードがクラスタに加わります。CIBは、クラスタノード間で自動的に同期されます。
YaSTクラスタモジュールでは、クラスタを手動で(最初から)設定するか、既存のクラスタのオプションを変更することができます。
ただし、クラスタの設定に自動化された方法を選ぶ場合は、Article “インストールおよびセットアップクイックスタート”を参照してください。このマニュアルでは、必要なパッケージのインストール方法と、ha-cluster-bootstrap
スクリプトを使用して基本的な2ノードクラスタを設定する手順を説明しています。
たとえば、1つのノードをYaSTクラスタで設定してから、ブートストラップスクリプトの1つを使用して他のノードを統合させる(またはその逆も可能)など、両方のセットアップ方法を組み合わせることもできます。
YaSTクラスタモジュールおよびこの章で使用されているいくつかの主要な用語を以下に定義します。
bindnetaddr
)
Corosyncエグゼクティブのバインド先のネットワークアドレス。クラスタ間の設定ファイルの共有を簡素化するため、Corosyncはネットワークインタフェースネットマスクを使用して、ネットワークのルーティングに使用されるアドレスビットのみをマスクします。たとえば、ローカルインタフェースが192.168.5.92
でネットマスクが255.255.255.0
の場合、bindnetaddr
は192.168.5.0
に設定します。ローカルインタフェースが192.168.5.92
でネットマスクが255.255.255.192
の場合は、bindnetaddr
を192.168.5.64
に設定します。
すべてのノード上で同じCorosync設定が使用されるため、ネットワークアドレスは、特定のネットワークインタフェースのアドレスではなく、bindnetaddr
として使用します。
conntrackツール
カーネル内の接続トラッキングシステムとやり取りできるようにして、iptablesでのステートフルなパケット検査を可能にします。High Availability Extensionによって、クラスタノード間の接続ステータスを同期化するために使用されます。詳細については、http://conntrack-tools.netfilter.org/を参照してください。
クラスタ内のすべてのノード、およびGeoクラスタ全体に設定ファイルを複製するために使用できる同期ツールです。Csync2は、同期グループ別にソートされた任意の数のホストを操作できます。各同期グループは、メンバーホストの独自のリストとその包含/除外パターン(同期グループ内でどのファイルを同期するか定義するパターン)を持っています。グループ、各グループに属するホスト名、および各グループの包含/除外ルールは、Csync2設定ファイル/etc/csync2/csync2.cfg
で指定されます。
Csync2は、認証には、同期グループ内でIPアドレスと事前共有キーを使用します。管理者は、同期グループごとに1つのキーファイルを生成し、そのファイルをすべてのグループメンバにコピーする必要があります。
Csync2の詳細については、http://oss.linbit.com/csync2/paper.pdfを参照してください。
「既存のクラスタ」という用語は、1つ以上のノードで構成されるクラスタを指すものとして使用されます。既存のクラスタは、通信チャネルを定義する基本的なCorosync設定を持ちますが、必ずしもリソース設定を持つとは限りません。
ネットワーク内で一対多数の通信に使用される技術で、クラスタ通信に使用できます。Corosyncはマルチキャストとユニキャストの両方をサポートしています。マルチキャストが会社のITポリシーに準拠しない場合、代わりにユニキャストを使用します。
クラスタ通信にマルチキャストを使用するには、ご使用のスイッチがマルチキャストをサポートしていることを確認します。
mcastaddr
)
Corosyncエグゼクティブによるマルチキャストに使用されるIPアドレス。このIPアドレスはIPv4またはIPv6のいずれかに設定できます。IPv6ネットワークを使用する場合は、ノードのIDを指定する必要があります。プライベートネットワークでは、どのようなマルチキャストアドレスでも使用できます。
mcastport
)
クラスタ通信に使用されるポート。Corosyncでは、マルチキャストの受信用に指定するmcastport
と、マルチキャストの送信用のmcastport -1
の、2つのポートを使用します。
ネットワーク障害の一部または全体に対する災害耐性のために、複数の冗長ローカルエリアネットワークが使用できるようになります。この方法では、ひとつのネットワークが作動中である限り、クラスタ通信を維持できます。Corosyncはトーテム冗長リングプロトコルをサポートします。信頼できるソートされた方式でメッセージを配信するために、論理トークンパスリングがすべての参加ノードに課せられます。ノードがメッセージをブロードキャストできるのは、トークンを保持している場合のみです。
Corosyncに定義済みの冗長通信チャネルを持つ場合、RRPを使用してこれらのインタフェースの使用方法をクラスタに伝えます。RRPでは次の3つのモードを使用できます(rrp_mode
)。
active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。
passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。
none
に設定した場合、RRPは無効になります。
ひとつのあて先ネットワークにメッセージを送信する技術Corosyncはマルチキャストとユニキャストの両方をサポートしています。Corosyncでは、ユニキャストはUDP-unicast (UDPU)として実装されます。
YaSTを起動して、
› を選択します。または、コマンドラインでモジュールを開始します。sudo yast2 cluster
次のリストは、YaSTクラスタモジュールで使用可能な画面の概要を示しています。この画面には、クラスタセットアップの成功に必要なパラメータが含まれているかどうか、またはそのパラメータがオプションであるかどうかも説明されています。
クラスタノード間の通信に1つまたは2つの通信チャネルを定義できます。転送プロトコルとして、マルチキャスト(UDP)またはユニキャスト(UDPU)のいずれかを使用します。詳細については、4.3項 「通信チャネルの定義」を参照してください。
サポートされるクラスタセットアップでは、2つ以上の冗長通信パスが必要です。推奨される方法は、第13章 「ネットワークデバイスボンディング」で説明されるように、ネットワークデバイスボンディングを使用することです。
使用できない場合は、Corosync内にの2つ目の通信チャネルを定義する必要があります。
クラスタの認証設定を定義できます。共有シークレットが必要なHMAC/SHA1認証を使用して、メッセージを保護し、認証することができます。詳細については、4.4項 「認証設定の定義」を参照してください。
Csync2では、設定変更を追跡して、クラスタノード間でファイルの同期を取ることができます。詳細については、4.5項 「すべてのノードへの設定の転送」を参照してください。
ユーザスペースconntrackd
を設定できます。iptablesでの「ステートフルな」パケット検査のためにconntrackツールを使用します。詳細については、4.6項 「クラスタノード間の接続ステータスの同期」を参照してください。
クラスタノードをオンラインにするためにサービスを設定できます。ブート時にPacemakerサービスを開始するかどうか、およびノード間の通信に必要なポートをファイアウォールで開くかどうかを定義します。詳細については、4.7項 「サービスの設定」を参照してください。
初めてクラスタモジュールを起動した場合は、モジュールが、ウィザードのように、基本設定に必要なすべてのステップをガイドします。そうでない場合は、左パネルのカテゴリをクリックして、ステップごとに設定オプションにアクセスします。
YaSTクラスタモジュール内のいくつかの設定は、現在のノードにのみ適用されます。他の設定はCsync2を使用してすべてのノードに自動的に転送できます。これについての詳しい情報は次のセクションを参照してください。
クラスタノード間で正常な通信を行うには、少なくとも1つの通信チャネルを定義します。手順 4.1または手順 4.2のそれぞれで説明されるように、転送プロトコルとしてマルチキャスト(UDP)またはユニキャスト(UDPU)のいずれかを使用します。2番目の冗長チャネル(手順 4.3)を定義する場合は、両方の通信チャネルで「同じ」プロトコルを使用する必要があります。
YaST/etc/corosync/corosync.conf
に書き込まれます。マルチキャストおよびユニキャストセットアップのサンプルファイルは、/usr/share/doc/packages/corosync
にあります。
IPv4アドレスを使用する場合、ノードIDはオプションです。IPv6アドレスを使用する場合、ノードIDは必須です。各ノードにIDを手動で指定する代わりに、YaSTクラスタモジュールには、クラスタノードごとに固有のIDを自動的に生成するオプションが含まれています。
マルチキャストを使用する場合、すべてのクラスタノードに対して同じbindnetaddr
、mcastaddr
、mcastport
が使用されます。クラスタ内のすべてのノードは同じマルチキャストアドレスを使用することで互いを認識します。別のクラスタは、別のマルチキャストアドレスを使用します。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。
Multicast
に設定します。
を定義します。クラスタマルチキャストに使用するサブネットに値を設定します。
を定義します。
を定義します。
クラスタノードごとに一意のIDを自動的に生成するには、
を有効にしたままにします。を定義します。
クォーラムを計算する場合に重要です。デフォルトでは、各ノードには1
票が割り当てられています。 の数は、クラスタ内のノード数と一致する必要があります。
変更内容を確認します。
必要な場合は、手順4.3「冗長通信チャネルの定義」で説明するように、Corosyncで冗長な通信チャネルを定義します。
クラスタ通信にマルチキャストではなくユニキャストを使用する場合は、次の手順に従います。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。
Unicast
に設定します。
を定義します。
ユニキャスト通信では、Corosyncはクラスタ内のすべてのノードのIPアドレスを認識する必要があります。クラスタの一部になる各ノードで、
をクリックし、次の詳細を入力します。
(Corosyncで2つ目の通信チャネルを使用する場合にのみ必要)
( オプションが無効になっている場合にのみ必要)
クラスタメンバーのアドレスを変更または削除するには、
または ボタンを使用します。クラスタノードごとに一意のIDを自動的に生成するには、
を有効にしたままにします。を定義します。
クォーラムを計算する場合に重要です。デフォルトでは、各ノードには1
票が割り当てられています。 の数は、クラスタ内のノード数と一致する必要があります。
変更内容を確認します。
必要な場合は、手順4.3「冗長通信チャネルの定義」で説明するように、Corosyncで冗長な通信チャネルを定義します。
ネットワークデバイスボンディングが何らかの理由で使用できない場合、第2の選択は、Corosyncに冗長通信チャネル(2つ目のリング)を定義することです。この方法では、2つの物理的に分かれたネットワークが通信に使用できます。1つのネットワークが失敗しても、クラスタノードは、もう一方のネットワークを介して通信できます。
Corosync内の追加の通信チャネルは2つ目のトークンパスリングを形成します。/etc/corosync/corosync.conf
では、設定した最初のチャネルはプライマリリングで、ringnumber 0
を取得します。2つ目のリング(冗長チャネル)はringnumber 1
を取得します。
Corosyncに定義済みの冗長通信チャネルを持つ場合、RRPを使用してこれらのインタフェースの使用方法をクラスタに伝えます。RRPでは、2つの物理的に別個のネットワークが通信に使用されます。1つのネットワークが失敗しても、クラスタノードは、もう一方のネットワークを介して通信できます。
RRPでは次の3つのモードを使用できます。
active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。
passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。
none
に設定した場合、RRPは無効になります。
/etc/hosts
Corosync内で複数のリングが設定されている場合、各ノードが複数のIPアドレスを持つことができます。これはすべてのノードの/etc/hosts
に反映する必要があります。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。を有効にします。冗長チャネルは、定義した最初の通信チャネルと同じプロトコルを使用する必要があります。
マルチキャストを使用する場合は冗長チャネル用に次のパラメータを入力します: 使用する
、 、および 。ユニキャストを使用する場合は次のパラメータを定義します: 使用する
、および 。クラスタに参加するすべてのノードのIPアドレスを入力します。Corosyncに、異なるチャネルを使用する方法とタイミングを伝えるには、使用する
を選択します。 通信チャネルが1つだけ定義されている場合、なし
)。
active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。
passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。
RRPの使用時に、High Availability Extensionは現在のリングの状態を監視し、障害発生後に冗長リングを自動的に再度有効化します。
または、corosync-cfgtool
を使用してリングの状態を手動で確認します。使用可能なオプションは-h
で参照できます。
変更内容を確認します。
クラスタの認証設定を定義するには、HMAC/SHA1認証を使用できます。共有シークレットが必要なHMAC/SHA認証を使用して、メッセージを保護し、認証する必要があります。指定した認証キー(パスワード)が、クラスタ中のすべてのノードで使用されます。
YaSTクラスタモジュールを起動し、
カテゴリに切り替えます。をオンにします。
新しく作成したクラスタの場合は、/etc/corosync/authkey
に書き込まれます。
ご使用のマシンを既存のクラスタに参加させたい場合、新しいキーファイルは生成しないでください。代わりに、いずれかのノードから/etc/corosync/authkey
を(手動またはCsync2によって)ご使用のマシンにコピーします。
変更内容を確認します。YaSTが設定を/etc/corosync/corosync.conf
に書き込みます。
結果として生成された設定ファイルをすべてのノードに手動でコピーする代わりに、csync2
ツールを使用して、クラスタ内のすべてのノードにレプリケートします。
これには、次の基本手順を必要とします。
Csync2では、設定変更を追跡して、クラスタノード間でファイルの同期を取ることができます。
操作に対して重要なファイルのリストを定義できます。
(他のクラスタノードに対して)これらのファイルの変更を表示できます。
1つのコマンドで複数の設定済みファイルの同期を取ることができます。
~/.bash_logout
の単純なシェルスクリプトを使用して、システムからログアウトする前に、同期化されていない変更について通知できます。
Csync2の詳細については、http://oss.linbit.com/csync2/とhttp://oss.linbit.com/csync2/paper.pdfにアクセスしてください。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。 同期グループを指定するには、hostname
コマンドから返された文字列を正確に使用する必要があります。
ホスト名解決がネットワークで正しく機能しない場合は、各クラスタノードのホスト名とIPアドレスの組み合わせを指定することもできます。この指定には、HOSTNAME@IP文字列(たとえば、alice@192.168.2.100
)を使用します。Csync2は、接続時にIPアドレスを使用します。
/etc/csync2/key_hagroup
に書き込まれます。このファイルは、作成後に、クラスタのすべてのメンバーに手動でコピーする必要があります。
すべてのノード間で、通常、同期される必要のあるファイルを
リストに入れるには、 をクリックします。同期するファイルのリストからファイルを
、 、または する場合は、該当する各ボタンを使用します。ファイルごとに絶対パス名を入力する必要があります。をクリックして、Csync2をアクティブにします。これによって次のコマンドが実行され、ブート時にCsync2が自動的に起動します。
root #
systemctl
enable csync2.socket
変更内容を確認します。YaSTがCsync2の設定内容を/etc/csync2/csync2.cfg
に書き込みます。
ここで同期プロセスを開始するには、4.5.2項 「Csync2を使用した変更内容の同期」で続行します。
Csync2を使用してファイルを正常に同期するには、以下の前提条件が満たされている必要があります。
同じCsync2設定をすべてのクラスタノードで使用できる必要があります。
同じCsync2認証キーをすべてのクラスタノードで使用できる必要があります。
Csync2はすべてのクラスタノード上で実行されている必要があります。
したがって、Csync2を初めて実行する前に、以下の準備を行う必要があります。
ファイル/etc/csync2/csync2.cfg
を、4.5.1項 「YaSTによるCsync2の設定」で説明されるとおりに設定した後、すべてのノードに手動でコピーします。
4.5.1項のステップ 3の1つのノードで作成した/etc/csync2/key_hagroup
ファイルを、クラスタ内のすべてのノードにコピーしてください。このファイルは、Csync2による認証で必要になります。ただし、すべてのノードで同じファイルでなければならないので、他のノードではファイルを再生成しないでください。
すべてのノード上で次のコマンドを実行して、Csync2サービスを今すぐ開始します。
root #
systemctl
start csync2.socket
最初にすべてのファイルを一度同期させるには、設定の「コピー元」であるマシン上で次のコマンドを実行します。
root #
csync2
-xv
これによって、すべてのファイルをその他のノードにプッシュすることで、一度に同期を行います。すべてのファイルが正常に同期されると、Csync2がエラーなしで終了します。
同期対象の1つ以上のファイルが(現在のノードだけでなく)他のノード上で変更されている場合は、Csync2から衝突が報告されます。次の出力とよく似た出力が表示されます。
While syncing file /etc/corosync/corosync.conf: ERROR from peer hex-14: File is also marked dirty here! Finished with 1 errors.
現在のノードのファイルバージョンが「最良」だと確信する場合は、そのファイルを強制して再同期を行い、競合を解決できます。
root #
csync2
-f
/etc/corosync/corosync.confroot #
csync2
-x
Csync2オプションの詳細については、次のコマンドを実行してください
csync2 -help
Csync2は変更のみをプッシュします。Csync2はマシン間でファイルを絶えず同期しているわけではありません。
同期が必要なファイルを更新する際はいつも、変更を加えたマシン上でcsync2
-xv
を実行することで、変更をその他のマシンにプッシュする必要があります。変更されていないファイルが配置された他のマシン上でこのコマンドを実行しても、何も起こりません。
iptablesに対してステートフルなパケット検査ができるようにするには、conntrackツールを設定して使用します。これには、次の基本手順を必要とします。
conntrackd
(クラス: ocf
、プロバイダ: heartbeat
)のリソースの設定。Hawk2を使用する場合、Hawk2によって提案されるデフォルト値を使用します。
conntrackツールを設定したら、これをLinux Virtual Serverで使用できます。負荷バランスを参照してください。
conntrackd
の設定 #
YaSTクラスタモジュールを使用して、ユーザスペースconntrackd
を設定します。これには、その他の通信チャネルに使用されていない専用のネットワークインタフェースが必要です。デーモンは後でリソースエージェントによって起動できます。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。を選択して、接続ステータスを同期します。選択したインタフェースのIPv4アドレスが自動的に検出され、YaSTに表示されます。これはすでに設定済みで、マルチキャストをサポートしている必要があります。
接続ステータスの同期に使用する
を定義します。で、接続ステータスを同期させるグループのID番号を定義します。
conntrackd
の設定ファイルを作成します。
既存のクラスタでオプションを変更した場合、変更を確認して、クラスタモジュールを終了します。
クラスタ設定を先に進めるには、4.7項 「サービスの設定」で続行します。
をクリックして、conntrackd
#YaSTクラスタモジュールは、ブート時にノード上で一定のサービスを開始するかどうか定義します。サービスを手動で開始または停止するためにモジュールを使用することもできます。クラスタノードをオンラインにし、クラスタリソースマネージャを起動するには、Pacemakerをサービスとして実行する必要があります。
YaSTクラスタモジュール内で、
カテゴリに切り替えます。このクラスタノードがブートするたびにPacemakerを起動するには、
グループで該当するオプションを選択します。 グループで、 を選択する場合は、このノードがブートするたびに手動でPacemakerを起動する必要があります。Pacemakerを手動で起動するには、次のコマンドを使用します。root #
systemctl
start pacemaker
Pacemakerをただちに起動または停止するには、それぞれのボタンをクリックします。
現在のマシン上でのクラスタ通信に必要なポートをファイアウォールで開くには、/etc/sysconfig/SuSEfirewall2.d/services/cluster
に書き込まれます。
変更内容を確認します。この設定は、すべてのクラスタノードではなく、ご使用のマシンにのみ適用されることにご注意ください。
最初のクラスタ設定が完了した後、各クラスタノード上でPacemakerサービスを開始し、スタックをオンラインにします。
既存のノードにログインします。
サービスがすでに実行していることを確認します。
root #
systemctl
status pacemaker
実行されていない場合、Pacemakerをすぐに開始します。
root #
systemctl
start pacemaker
それぞれのクラスタノードに対してこの手順を繰り返します。
ノードの1つで、crm status
コマンドを使用してクラスタの状態を確認します。すべてのノードがオンラインの場合、出力は次のようになります。
root #
crm status
Last updated: Thu Jul 3 11:07:10 2014
Last change: Thu Jul 3 10:58:43 2014
Current DC: alice (175704363) - partition with quorum
2 Nodes configured
0 Resources configured
Online: [ alice bob ]
この出力は、クラスタリソースマネージャが起動し、リソースを管理できる状態にあることを示しています。
基本設定を完了し、ノードがオンラインになったら、クラスタリソースの設定を開始できます。crmシェル(crmsh)やHA Web Konsoleなどのクラスタ管理ツールのいずれかを使用します。詳細については、第8章 「クラスタリソースの設定と管理(コマンドライン)」または第7章 「Hawk2を使用したクラスタリソースの設定と管理」を参照してください。
この章では、次の2つの異なるシナリオ(SUSE Linux Enterprise High Availability Extensionの別バージョン(メジャーリリースまたはサービスパック)へのクラスタアップグレード、およびクラスタノード上の各パッケージの更新)について説明します。5.2項 「最新の製品バージョンへのクラスタアップグレード」および5.3項 「クラスタノード上のソフトウェアパッケージの更新」を参照してください。
クラスタをアップグレードする場合、アップグレードを開始する前に、5.2.1項 「SLE HAおよびSLE HA Geoでサポートされるアップグレードパス」および5.2.2項 「アップグレード前に必要な準備」を確認してください。
次に、この章で使用される最も重要な用語の定義を示します。
SUSE Linux Enterprise (または任意のソフトウェア製品)のメジャーリリースとは、新しい機能やツールを導入する、非推奨になっていたコンポーネントを削除する、後方互換性のない変更が存在する、などの特徴を持った新バージョンです。
新しい製品バージョンに後方互換性のない大幅な変更が含まれる場合、クラスタをオフラインマイグレーションでアップグレードする必要があります。つまり、すべてのノードをオフラインにしてクラスタ全体をアップグレードしてから、すべてのノードをオンラインに戻す必要があります。
ローリングアップグレードでは、一度に1つずつクラスタノードをアップグレードし、残りのクラスタは実行中のままにします。つまり、最初のノードをオフラインにしてアップグレードし、オンラインに戻してクラスタに参加させます。その後、すべてのクラスタノードがメジャーバージョンにアップグレードされるまで、1つずつアップグレードを続けます。
複数のパッチを組み合わせて、インストールまたは展開しやすい形式にします。サービスパックには番号が付けられ、通常、プログラムのセキュリティ修正、更新、アップグレード、または拡張機能が含まれます。
パッケージの新しいマイナーバージョンのインストール。
パッケージまたは配布の新しい主要バージョンのインストール。これにより新機能がもたらされます。オフラインマイグレーションおよびローリングアップグレードも参照してください。
サポートされるアップグレードパスおよびアップグレードの実行方法は、現在の製品バージョンおよび移行したいターゲットバージョンの両方によって異なります。
ローリングアップグレードは、製品バージョンのGAから次のサービスパックまで、および1つのサービスパックから次のサービスパックまでの間でのみサポートされます。
あるメジャーバージョンから次のメジャーバージョン(たとえば、SLE HA11からSLE HA 12など)、または特定のメジャーバージョンに属するサービスパックから次のメジャーバージョン(たとえば、SLE HA 11SP3からSLE HA 12)へアップグレードするには、オフラインマイグレーションが必要です。
基本システム(SUSE Linux Enterprise Server)のアップグレードの詳細については、アップグレードするターゲットバージョンの『SUSE Linux Enterprise Server導入ガイド』を参照してください。このガイドはhttps://documentation.suse.com/#sles/で入手できます。
5.2.1項は、SLE HA (Geo)でサポートされているアップグレードパスの概要、および参照する追加のマニュアルを示しています。
SUSE Linux Enterprise High Availability Extension 11/SUSE Linux Enterprise High Availability Extension 12で実行する混合クラスタはサポートされていません。
製品バージョン12へのアップグレードプロセス後に、製品バージョン11に戻す処理は、サポートされていません。
アップグレード元とアップグレード先 |
アップグレードパス |
詳細情報の参照先 |
---|---|---|
SLE HA 11 SP3からSLE HA (Geo) 12 |
オフラインマイグレーション |
|
SLE HA (Geo) 11 SP4からSLE HA (Geo) 12 SP1 |
オフラインマイグレーション |
|
SLE HA (Geo) 12からSLE HA (Geo) 12 SP1 |
ローリングアップグレード |
|
SLE HA (Geo) 12 SP1からSLE HA (Geo) 12 SP2 |
ローリングアップグレード |
|
SLE HA (Geo) 12 SP2からSLE HA (Geo) 12 SP3 |
ローリングアップグレード |
|
SLE HA (Geo) 12 SP3からSLE HA (Geo) 12 SP4 |
ローリングアップグレード |
|
SLE HA (Geo) 12 SP4からSLE HA (Geo) 12 SP5 |
ローリングアップグレード |
|
「詳細情報の参照先」の列に示すマニュアルはすべてhttps://documentation.suse.comで入手できます。
システムバックアップが最新で、復元可能かどうかを確認します。
運用環境で実行する前に、まず、クラスタセットアップのステージングインスタンスでアップグレード手順をテストします。
これにより、メンテナンス期間に要するタイムフレームを予測できます。発生する可能性のある予期しない問題を検出し、解決するのにも役立ちます。
この項は次のシナリオに適用されます。
SLE HA 11 SP3からSLE HA 12へのアップグレード
SLE HA 12 SP4からSLE HA 11 SP1へのアップグレード
クラスタがまだこれらより古い製品バージョンに基づいている場合は、まず、必要なターゲットバージョンにアップグレードするためのソースとして使用できるバージョンのSUSE Linux Enterprise ServerおよびSUSE Linux Enterprise High Availability Extensionにクラスタをアップグレードします。
High Availability Extension 12クラスタスタックでは、さまざまなコンポーネントに大幅な変更が導入されています(たとえば、/etc/corosync/corosync.conf
、OCFS2のディスクフォーマットなど)。したがって、SUSE Linux Enterprise High Availability Extension
11バージョンからのローリングアップグレードはサポートされません。代わりに、手順5.1「クラスタ全体のオフラインマイグレーション」で説明されているように、すべてのクラスタノードをオフラインにしてから、クラスタ全体を移行する必要があります。
各クラスタノードにログインし、次のコマンドを使用してクラスタスタックを停止します。
root #
rcopenais
stop
クラスタノードごとに、目的のターゲットバージョンのSUSE Linux Enterprise ServerおよびSUSE Linux Enterprise High Availability Extensionへのアップグレードを実行します。すでにGeoクラスタがセットアップされている場合、そのGeoクラスタをアップグレードするには、『Geo Clustering for SUSE Linux Enterprise High Availability Extension Geo Clustering Quick Start』に記載されている追加の指示を参照してください。個々のアップグレードプロセスの詳細を確認するには、5.2.1項 「SLE HAおよびSLE HA Geoでサポートされるアップグレードパス」を参照してください。
アップグレードプロセスが完了した後で、SUSE Linux Enterprise ServerおよびSUSE Linux Enterprise High Availability Extensionのアップグレード済みバージョンがインストールされた各ノードを再起動します。
クラスタセットアップでOCFS2を使用する場合は、次のコマンドを実行して、オンデバイス構造をアップデートします。
root #
o2cluster
--update PATH_TO_DEVICE
SUSE Linux Enterprise High Availability Extension 12および12 SPxに付属しているアップデートされたOCFS12バージョンで必要とされるディスクに、パラメータが追加されます。
Corosyncバージョン2の/etc/corosync/corosync.conf
をアップデートするには:
1つのノードにログインして、YaSTクラスタモジュールを起動します。
手順4.1「最初の通信チャネルの定義(マルチキャスト)」または手順4.2「最初の通信チャネルの定義(ユニキャスト)」をそれぞれ参照してください。
カテゴリに切り替えて、新しいパラメータ( および )の値を入力します。詳細については、Corosyncバージョン2で無効になっていたり、見つからない他のオプションをYaSTが検出する場合、変更を求めるプロンプトが表示されます。
YaSTで変更内容を確認します。YaSTが変更を/etc/corosync/corosync.conf
に書き込みます。
クラスタに対してCsync2が設定されている場合は、次のコマンドを使用して、アップデートされたCorosync設定を他のクラスタノードにプッシュします。
root #
csync2
-xv
Csync2の詳細については、4.5項 「すべてのノードへの設定の転送」を参照してください。
または、/etc/corosync/corosync.conf
をすべてのクラスタノードに手動でコピーして、更新されたCorosync設定の同期を取ります。
各ノードにログインして、次のコマンドを使用してクラスタスタックを起動します。
root #
systemctl
start pacemaker
crm status
またはHawk2を使用してクラスタの状態を確認します。
ブート時に起動するように以下のサービスを設定します。
root #
systemctl enable pacemakerroot #
systemctl enable hawkroot #
systemctl enable sbd
リソースをグループ化するタグと一部のACLの機能は、pacemaker-2.0
以上のCIB構文バージョンでのみ動作します(現在のバージョンを確認するには、cibadmin -Q |grep validate-with
コマンドを使用します)。SUSE Linux Enterprise High Availability Extension 11 SPxからアップグレードした場合、デフォルトではCIBバージョンがアップグレード「されません」。最新のCIBバージョンに手動でアップグレードするには、以下のコマンドのいずれかを使用します:
root #
cibadmin
--upgrade --force
または
root #
crm
configure upgrade force
この項は次のシナリオに適用されます。
SLE HA 12からSLE HA 12 SP1へのアップグレード
SLE HA 12 SP1からSLE HA 12 SP2へのアップグレード
SLE HA (Geo) 12 SP2からSLE HA (Geo) 12 SP3へのアップグレード
SLE HA (Geo) 12 SP3からSLE HA (Geo) 12 SP4へのアップグレード
SLE HA (Geo) 12 SP4からSLE HA (Geo) 12 SP5へのアップグレード
ノードのアップグレードを開始する前に、「そのノード上の」クラスタスタックを「停止」します。
ソフトウェアの更新中にノード上のクラスタリソースマネージャがアクティブな場合、アクティブノードのフェンシングのような予期しない結果を招く場合があります。
アップグレードするノードでroot
としてログインし、クラスタスタックを停止します。
root #
systemctl
stop pacemaker
目的のターゲットバージョンのSUSE Linux Enterprise ServerおよびSUSE Linux Enterprise High Availability Extensionへのアップグレードを実行します。個々のアップグレードプロセスの詳細を確認するには、5.2.1項 「SLE HAおよびSLE HA Geoでサポートされるアップグレードパス」を参照してください。
アップグレードしたノードでクラスタスタックを再起動して、ノードをクラスタに再加入させます。
root #
systemctl
start pacemaker
次のノードをオフラインにし、そのノードに関して手順を繰り返します。
crm status
またはHawk2を使用してクラスタの状態を確認します。
最新の製品バージョンに装備されている新機能は、「すべての」クラスタノードが最新の製品バージョンにアップグレードされた後でないと使用できません。混合バージョンのクラスタは、ローリングアップグレード中の短いタイムフレームでのみサポートされます。ローリングアップグレードは1週間以内に完了してください。
クラスタノードに異なるCRMバージョンが検出される場合、Hawk2の
画面に警告も表示されます。ノードの更新を開始する前に、クラスタスタックが影響を受けるか否かによって、「そのノード上の」クラスタスタックを「停止」するか、「ノードを保守モード」にします。詳細については、ステップ 1を参照してください。
ソフトウェアの更新中にノード上のクラスタリソースマネージャがアクティブな場合、アクティブノードのフェンシングのような予期しない結果を招く場合があります。
ノード上にパッケージ更新をインストールする前に、次の内容を確認してください。
その更新は、SUSE Linux Enterprise High Availability ExtensionまたはGeo Clustering Extensionに属するパッケージに影響しますか。影響する
場合は、ソフトウェアの更新を開始する前に、ノード上でクラスタスタックを停止します。
root #
systemctl
stop pacemaker
パッケージ更新には再起動が必要ですか。必要な場合は、ソフトウェアの更新を開始する前に、ノード上でクラスタスタックを停止します。
root #
systemctl
stop pacemaker
これらの状況のいずれにも該当しない場合は、クラスタスタックを停止する必要はありません。その場合は、ソフトウェアの更新を開始する前に、ノードを保守モードにします。
root #
crm
node maintenance NODE_NAME
保守モードの詳細については、16.2項 「保守タスクのためのさまざまなオプション」を参照してください。
YaSTまたはZypperを使用してパッケージ更新をインストールします。
更新が正常にインストールされたら、次のいずれかを行います。
それぞれのノードでクラスタスタックを起動します(ステップ 1で停止した場合)。
root #
systemctl
start pacemaker
または、ノードの保守フラグを削除して、ノードを通常モードに戻します。
root #
crm
node ready NODE_NAME
crm status
またはHawk2を使用してクラスタの状態を確認します。
アップグレード先の製品の変更点と新機能の詳細については、それぞれのリリースノートを参照してください。リリースノートは、https://www.suse.com/releasenotes/で入手できます。
HAクラスタの主な目的はユーザサービスの管理です。ユーザサービスの典型的な例は、Apache Webサーバまたはデータベースです。サービスとは、ユーザの観点からすると、指示に基づいて特別な何かを行うことを意味していますが、クラスタにとっては開始や停止できるリソースにすぎません。サービスの性質はクラスタには無関係なのです。
この章では、リソースを設定しクラスタを管理する場合に知っておく必要のある基本概念を紹介します。後続の章では、High Availability Extensionが提供する各管理ツールを使用して、主要な設定および管理タスクを行う方法を説明します。
クラスタリソースを設定および管理する場合、HA Web Konsole (Hawk2)、またはcrmシェル(crmsh)コマンドラインユーティリティのいずれかを使用します。Hawkがインストールされている前のバージョンのSUSE® Linux Enterprise High Availability Extensionからアップグレードする場合は、パッケージが現在のバージョン、Hawk2で置き換えられます。
HawkのWebベースのユーザインタフェースを使用すれば、Linux以外のマシンから、Linuxクラスタを監視し、管理することができます。さらにこれは、ご使用のシステムが最小限のグラフィカルユーザインタフェースしか提供していない場合に最適なソリューションです。
クラスタリソースを設定および管理するには、crmシェル(crmsh)コマンドラインユーティリティ、HA Web Konsole (Hawk2)、Webベースユーザインタフェースのいずれかを使用します。
この章では、crm
コマンドラインツールを紹介し、このツールの概要、テンプレートの使用方法、そして、主にクラスタリソースの設定と管理(基本的なリソースと高度なリソース(グループとクローン)の作成、制約の設定、フェールオーバーノードとフェールバックノードの指定、リソース監視の設定、リソースの開始、クリーンアップ、または削除、および手動によるリソースの移行について説明します。
クラスタによる管理が必要なすべての作業は、リソースとして使用できなければなりません。主要なグループとして、リソースエージェントとSTONITHエージェントの2つがあります。両方のカテゴリで、エージェントの追加や所有が可能で、クラスタ機能を各自のニーズに合わせて拡張することができます。
フェンシングはHA(High Availability)向けコンピュータクラスタにおいて、非常に重要なコンセプトです。クラスタがノードの1つの誤動作を検出し、そのノードの削除が必要となることがあります。これをフェンシングと呼び、一般にSTONITHリソースで実行されます。フェンシングは、HAクラスタを既知の状態にするための方法として定義できます。
クラスタのすべてのリソースには、それぞれ状態が関連付けられています。たとえば、「リソースr1はaliceで起動されている」などです。HAクラスタでは、このような状態は「リソースr1はalice以外のすべてのノードで停止している」ことを示します。クラスタは各リソースが1つのノードでのみ起動されるようにするためです。各ノードはリソースに生じた変更を報告する必要があります。つまり、クラスタの状態は、リソースの状態とノードの状態の集まりです。
ノードまたはリソースの状態を十分に確定することができない場合には、フェンシングが発生します。クラスタが所定のノードで起こっていることを認識しない場合でも、フェンシングによって、そのノードが重要なリソースを実行しないようにできます。
SBD (STONITH Block Device)は、共有ブロックストレージ(SAN、iSCSI、FCoEなど)を介したメッセージの交換を通じて、Pacemakerベースのクラスタのノードフェンシングメカニズムを提供します。これにより、フェンシングメカニズムが、ファームウェアバージョンの変更や特定のファームウェアコントローラへの依存から切り離されます。動作異常のノードが本当に停止したかどうかを確認するために、各ノードではウォッチドッグが必要です。特定の条件下では、ディスクレスモードで実行することにより、共有ストレージなしでSBDを使用することもできます。
ha-cluster-bootstrap スクリプトは、フェンシングメカニズムとしてSBDを使用するオプションを用いて、クラスタを設定する自動化された方法を提供します。詳細については、『インストールおよびセットアップクイックスタート』を参照してください。ただし、SBDを手動で設定する場合、個々の設定に関するオプションが増えます。
この章では、SBDの背後にある概念について説明します。スプリットブレインシナリオの場合に潜在的なデータ破損からクラスタを保護するために、SBDが必要とするコンポーネントを設定する手順を説明します。
ノードレベルのフェンシングに加えて、LVM2排他アクティブ化やOCFS2ファイルロックのサポート(リソースレベルのフェンシング)など、ストレージ保護のための追加のメカニズムを使用することができます。これにより、管理上またはアプリケーション上の障害からシステムが保護されます。
crmシェル(crmsh)またはHawk2などのクラスタ管理ツールは、root
ユーザまたはhaclient
グループ内のユーザが使用できます。デフォルトで、これらのユーザは完全な読み込み/書き込みのアクセス権を持ちます。アクセスを制限するか、または詳細なアクセス権を割り当てるには、「アクセス制御リスト」(ACL)を使用できます。
アクセス制御リストは、順序付けされたアクセスルールセットで構成されています。各ルールにより、クラスタ設定の一部への読み込みまたは書き込みアクセスの許可、またはアクセスの拒否が行われます。ルールは通常、組み合わせて特定の役割を生成し、ユーザを自分のタスクに一致する役割に割り当てることができます。
多くのシステムで、通常のEthernetデバイスの標準のデータセキュリティ/可用性の要件を超えるネットワーク接続の実装が望ましいことがあります。その場合、数台のEthernetデバイスを集めて1つのボンディングデバイスを設定できます。
「負荷分散」によって、外部のクライアントからは、サーバのクラスタが1つの大きな高速サーバであるかのようにみえます。この単一サーバのように見えるサーバは、 仮想サーバと呼ばれます。このサーバは、着信要求をディスパッチする1つ以上のロードバランサと実際のサービスを実行しているいくつかの実際のサーバで構成されます。High Availability Extensionの負荷分散設定によって、高度にスケーラブルで可用性の高いネットワークサービス(Web、キャッシュ、メール、FTP、メディア、VoIPなど)を構築できます。
SUSE® Linux Enterprise High Availability Extension
12 SP5は、ローカルクラスタとメトロエリアクラスタのほかに、地理的に離れたクラスタ(Geoクラスタ。マルチサイトクラスタとも呼ばれます)もサポートしています。これは、それぞれひとつのローカルクラスタで持った複数の地理的に離れたサイトを持てることを意味します。これらクラスタ間のフェールオーバーは、より高いレベルのエンティティであるbooth
によって管理されます。Geo Clustering for SUSE Linux Enterprise High Availability Extensionの個別の拡張として、Geoクラスタに対するサポートが提供されています。Geoクラスタの使用方法と設定方法の詳細については、Article “Geo Clusteringのクイックスタート”またはBook “Geo Clustering Guide”を参照してください。
クラスタノードで保守タスクを実行するには、そのノードで実行中のリソースを停止し、それらを移動するか、あるいはそのノードをシャットダウンするか再起動する必要がある場合があります。また、クラスタからリソースの制御を一時的に引き継ぐか、またはリソースを実行中のままにしてクラスタサービスを停止することも必要な場合があります。
この章では、負の影響を及ぼすことなくクラスタノードを手動で切断する方法について説明します。また、クラスタスタックが保守タスクを実行するために提供するさまざまなオプションの概要についても説明します。
HAクラスタの主な目的はユーザサービスの管理です。ユーザサービスの典型的な例は、Apache Webサーバまたはデータベースです。サービスとは、ユーザの観点からすると、指示に基づいて特別な何かを行うことを意味していますが、クラスタにとっては開始や停止できるリソースにすぎません。サービスの性質はクラスタには無関係なのです。
この章では、リソースを設定しクラスタを管理する場合に知っておく必要のある基本概念を紹介します。後続の章では、High Availability Extensionが提供する各管理ツールを使用して、主要な設定および管理タスクを行う方法を説明します。
一般的に、クラスタは次の2つのカテゴリのいずれかに分類されます。
2ノードクラスタ
2ノードより多いクラスタ。これは通常、奇数のノード数を意味します。
異なるトポロジを追加して、異なるユースケースを生成することもできます。次のユースケースは最も一般的です。
設定: FC SANまたは同様の共有ストレージ、レイヤ2ネットワーク。
使用シナリオ: サービスの高可用性、およびデータレプリケーションのデータ冗長性なしに焦点を当てた埋め込みクラスタ。このようなセットアップは無線ステーションや組立てラインコントローラなどに使用されます。
設定: 対称的なストレッチクラスタ、FC SAN、およびレイヤ2ネットワークのすべてが2つの場所に及ぶ。
使用シナリオ: サービスの高可用性、およびローカルデータの冗長性に焦点を当てた従来のストレッチクラスタ。データベースおよびエンタープライズリソース計画に適しており、ここ数年間で最も人気のあるセットアップの1つです。
設定: 2×N+1ノード、FC SANが2つの主な場所に及ぶ。FC SANを使用しない補助的な3番目のサイト、過半数メーカーとして機能する。レイヤ2ネットワーク、少なくとも2つの主な場所に及ぶ。
使用シナリオ: サービスの高可用性、およびデータの冗長性に焦点を当てた従来のストレッチクラスタ。たとえば、データベース、エンタープライズリソースプランニング。
1つ以上のノードとその他のクラスタ間で通信が失敗した場合は、常にクラスタパーティションが発生します。ノードは同じパーティション内の他のノードのみと通信可能で、切り離されたノードは認識しません。クラスタパーティションは、ノード(投票)の過半数を保有する場合、クォーラムを持つ(「定足数に達している」)と定義されます。これを実現する方法は「クォーラム計算」によって実行されます。クォーラムはフェンシングの要件です。
クォーラム計算はSUSE Linux Enterprise High Availability Extension 11とSUSE Linux Enterprise High Availability Extension 12の間で変更されました。SUSE Linux Enterprise High Availability Extension 11では、クォーラムはPacemakerによって計算されました。SUSE Linux Enterprise High Availability Extension 12以降では、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はメッセージングおよびメンバーシップ層です。6.2.4項 「2ノードクラスタのCorosync設定」および6.2.5項 「NノードクラスタのCorosync設定」を参照してください。
グローバルクラスタオプションは、一定の状況下でのクラスタの動作を制御します。それらは、セットにグループ化され、Hawk2やcrm
シェルなどのクラスタ管理ツールで表示したり、変更することができます。
事前に定義されている値は、通常は、そのまま保持できます。ただし、クラスタの主要機能を正しく機能させるには、クラスタの基本的なセットアップ後に、次のパラメータを調整する必要があります。
no-quorum-policy
#このグローバルオプションは、クラスタパーティションにクォーラムがない(ノードの過半数がパーティションに含まれない)場合どうするかを定義します。
許容値は、次のとおりです。
ignore
no-quorum-policy
をignore
に設定するとクラスタがクォーラムを持つように動作します。リソース管理は続行されます。
SLES 11では、この値が2ノードのクラスタ用の推奨設定でした。SLES 12以降、このオプションは廃止されました。設定と条件に基づいて、Corosyncはクラスタノードまたは単一ノードに「クォーラム」を与えます。または与えません。
2ノードのクラスタの場合、クォーラムが失われた場合の唯一の意味のある動作は、常に反応することです。最初のステップとして、クォーラムを失ったノードのフェンシングを試行してください。
freeze
クォーラムが失われた場合は、クラスタパーティションがフリーズします。リソース管理は続行されます。実行中のリソースは停止されません(ただし、イベントの監視に対応して再起動される可能性があります)。ただし、影響を受けたパーティション内では、以後のリソースが開始されません。
一定のリソースが他のノードとの通信に依存しているクラスタの場合(たとえば、OCFS2マウントなど)は、この設定が推奨されます。この場合、デフォルト設定no-quorum-policy=stop
は、次のようなシナリオになるので有効でありません。つまり、ピアノードが到達不能な間はそれらのリソースを停止できなくなります。その代わり、停止の試行は最終的にタイムアウトし、stop failure
になり、エスカレートされた復元とフェンシングを引き起こします。
stop
(デフォルト値)クォーラムが失われると、影響を受けるクラスタパーティション内のすべてのリソースが整然と停止します。
suicide
クォーラムが失われると、影響を受けるクラスタパーティション内のすべてのノードがフェンシングされます。このオプションは、SBDと組み合わせる場合にのみ機能します。第11章 「ストレージ保護とSBD」を参照してください。
stonith-enabled
#
このグローバルオプションは、フェンシングを適用して、STONITHデバイスによる、障害ノードや停止できないリソースを持つノードのダウンを許可するかどうか定義します。通常のクラスタ操作には、STONITHデバイスの使用が必要なので、このグローバルオプションは、デフォルトでtrue
に設定されています。デフォルト値では、クラスタは、STONITHリソースが定義されていない場合にはリソースの開始を拒否します。
何らかの理由でフェンシングを無効にする必要がある場合は、stonith-enabled
をfalse
に設定しますが、これはご使用の製品のサポートステータスに影響を及ぼすことに注意してください。また、stonith-enabled="false"
を指定すると、Distributed Lock Manager (DLM)のようなリソースやDLMによるすべてのサービス(cLVM、GFS2、OCFS2など)は開始できません。
STONITHがないクラスタはサポートされません。
ブートストラップスクリプトを使用する場合、Corosyn設定には次のオプションを持つ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 }
SUSE Linux Enterprise 11とは反対に、SUSE Linux Enterprise 12のvotequorumサブシステムは、Corosyncバージョン2.xで機能します。つまり、no-quorum-policy=ignore
オプションは使用してはならないことを意味します。
デフォルトで、two_node: 1
が設定されている場合、wait_for_all
オプションが自動的に有効になります。wait_for_all
が有効でない場合、クラスタは両方のノードでパラレルに開始される必要があります。または、最初のノードが、見つからない2番目のノードで起動フェンシングを実行します。
2ノードクラスタを使用しない場合、Nノードクラスタに奇数のノードを使用することを強くお勧めします。クォーラム設定に関して、次のオプションがあります。
ha-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が有効な場合、クラスタはすべてのノードが認識可能になった後でのみ定足数に達します。一部の起動時の競合状態を回避するために、 |
クラスタの管理者は、クラスタ内のサーバ上の各リソースや、サーバ上で実行する各アプリケーションに対してクラスタリソースを作成する必要があります。クラスタリソースには、Webサイト、電子メールサーバ、データベース、ファイルシステム、仮想マシン、およびユーザが常時使用できるようにする他のサーバベースのアプリケーションまたはサービスなどが含まれます。
リソースは、クラスタで使用する前にセットアップする必要があります。たとえば、Apacheサーバをクラスタリソースとして使用するには、まず、Apacheサーバをセットアップし、Apacheの環境設定を完了してから、クラスタで個々のリソースを起動します。
リソースに特定の環境要件がある場合は、それらの要件がすべてのクラスタノードに存在し、同一であることを確認してください。この種の設定は、High Availability Extensionでは管理されません。これは、管理者自身が行う必要があります。
High Availability Extensionでリソースを管理しているときに、同じリソースを他の方法(クラスタ外で、たとえば、手動、ブート、再起動など)で開始したり、停止してはなりません。High Availability Extensionソフトウェアが、すべてのサービスの開始または停止アクションを実行します。
サービスがクラスタ制御下ですでに実行された後にテストまたは保守タスクを実行する必要がある場合は、リソース、ノード、またはクラスタ全体を保守モードに設定してから、これらのいずれかに手動でタッチしてください。詳細については、16.2項 「保守タスクのためのさまざまなオプション」を参照してください。
クラスタ内でリソースを設定したら、クラスタ管理ツールを使用して、すべてのリソースを手動で起動、停止、クリーンアップ、削除、または移行します。これらの操作の詳細については、使用しているクラスタ管理ツールに応じて次のいずれかを参照してください。
追加するクラスタリソースごとに、リソースエージェントが準拠する基準を定義する必要があります。リソースエージェントは、提供するサービスを抽象化して正確なステータスをクラスタに渡すので、クラスタは管理するリソースについてコミットする必要がありません。クラスタは、リソースエージェントに依存して、start、stop、またはmonitorのコマンドの発行に適宜対応します。
通常、リソースエージェントはシェルスクリプトの形式で配布されます。High Availability Extensionは、次のクラスのリソースエージェントをサポートしています。
OCF RAエージェントは、High Availabilityでの使用に最適であり、特に、マルチステートリソースまたは特殊なモニタリング機能を必要とする場合に適しています。それらのエージェントは、通常、/usr/lib/ocf/resource.d/provider
にあります。この機能はLSBスクリプトの機能と同様です。ただし、環境設定では、常に、パラメータの受け入れと処理を容易にする環境変数が使用されます。OCF仕様はhttps://github.com/ClusterLabs/OCF-spec/blob/master/ra/1.0/resource-agent-api.mdで参照できます(リソースエージェントに関連するため)。OCF仕様には、アクション終了コードの厳密な定義があります。9.3項 「OCF戻りコードと障害回復」を参照してください。クラスタは、それらの仕様に正確に準拠します。
すべてのOCFリソースエージェントは少なくともstart
、stop
、status
、monitor
、meta-data
のアクションを持つ必要があります。meta-data
アクションは、エージェントの設定方法についての情報を取得します。たとえば、プロバイダheartbeat
でIPaddr
エージェントの詳細を知りたい場合は、次のコマンドを使用します。
OCF_ROOT=/usr/lib/ocf /usr/lib/ocf/resource.d/heartbeat/IPaddr meta-data
出力は、XML形式の情報であり、いくつかのセクションを含みます(一般説明、利用可能なパラメータ、エージェント用の利用可能なアクション)。
または、crmshを使用して、OCFリソースエージェントに関する情報を表示します。詳細については、8.1.3項 「OCFリソースエージェントに関する情報の表示」を参照してください。
LSBリソースエージェントは一般にオペレーティングシステム/配布パッケージによって提供され、/etc/init.d
にあります。リソースエージェントをクラスタで使用するには、それらのエージェントがLSB iniスクリプトの仕様に準拠している必要があります。たとえば、リソースエージェントには、いくつかのアクションが実装されている必要があります。それらのアクションとして、少なくともstart
、stop
、restart
、reload
、force-reload
、status
があります。詳細については、http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.htmlを参照してください。
これらのサービスの構成は標準化されていません。High AvailabilityでLSBスクリプトを使用する場合は、該当のスクリプトの設定方法を理解する必要があります。これに関する情報は、多くの場合、/usr/share/doc/packages/PACKAGENAME
内の該当パッケージのマニュアルに記載されています。
SUSE Linux Enterprise 12から、一般的なSystem V initデーモンがsystemdに置き代わりました。Pacemakerは、systemdサービスが存在する場合は、それを管理できます。initスクリプトの代わりに、systemdはユニットファイルを持ちます。一般的に、サービス(またはユニットファイル)は、オペレーティングシステムによって提供されます。既存のinitスクリプトを変換する場合は、http://0pointer.de/blog/projects/systemd-for-admins-3.htmlで詳細情報を検索してください。
現在、並列に存在する「通常」タイプのシステムサービスが多数あります: LSB
(System V initに属する)、systemd
、および(一部のディストリビューションでは) upstart
。そのため、Pacemakerは、どれが指定のクラスタノードに適用されるのかをインテリジェントに理解する特殊なエイリアスをサポートします。これは、クラスタにsystemd、upstart、およびLSBサービスが混在する場合には特に役立ちます。Pacemakerは、次の順番で指定されたサービスを検索しようとします: LSB (SYS-V) initスクリプト、systemdユニットファイル、またはUpstartジョブ。
モニタリングプラグイン(かつてはNagiosプラグインと呼ばれていた)により、リモートホスト上のサービスを監視できます。Pacemakerは、モニタリングプラグインが存在する場合は、これを使用してリモートモニタリングを実行できます。詳細については、6.6.1項 「監視プラグインを使用したリモートホストでのサービスの監視」を参照してください。
このクラスは、フェンシング関係のリソース専用に使用されます。詳細については、第10章 「フェンシングとSTONITH」を参照してください。
High Availability Extensionで提供されるエージェントは、OCF仕様に従って作成されています。
次のリソースタイプを作成できます。
プリミティブリソースは、リソースの中で最も基本的なタイプです。
選択したクラスタ管理ツールでプリミティブリソースを作成する方法については、次を参照してください。
Hawk2: 手順7.5「プリミティブリソースの追加」
crmsh: 8.4.2項 「クラスタリソースの作成」
グループには、一緒の場所で見つけ、連続して開始し、逆の順序で停止する必要のあるリソースセットが含まれます。詳細については、6.3.5.1項 「グループ」を参照してください。
クローンは、複数のホスト上でアクティブにできるリソースです。対応するリソースエージェントがサポートしていれば、どのようなリソースもクローン化できます。詳細については、6.3.5.2項 「クローン」を参照してください。
マルチステートリソースは、クローンリソースの特殊なタイプで、複数のモードを持つことができます。詳細については、6.3.5.3項 「マルチステートリソース」を参照してください。
類似した設定のリソースを多く作成する最も簡単な方法は、リソーステンプレートを定義することです。定義された後でテンプレートは、プリミティブ内で参照したり、6.5.3項 「リソーステンプレートと制約」で説明するように、特定のタイプの制約内で参照することができます。
プリミティブ内でテンプレートを参照すると、そのテンプレートで定義されている操作、インスタンス属性(パラメータ)、メタ属性、使用属性がすべてプリミティブに継承されます。さらに、プリミティブに対して特定の操作または属性を定義することもできます。これらのいずれかがテンプレートとプリミティブの両方で定義されていた場合、プリミティブで定義した値の方が、テンプレートで定義された値よりも優先されます。
選択したクラスタ管理ツールでリソーステンプレートを定義する方法については、次を参照してください。
Hawk2: 手順7.6「リソーステンプレートの追加」
crmsh: 8.4.3項 「リソーステンプレートの作成」
プリミティブは、最も単純なタイプのリソースなので、設定が容易ですが、クラスタ設定には、より高度なリソースタイプ(グループ、クローン、マルチステートリソースなど)が必要になることがあります。
クラスタリソースの中には、他のコンポーネントやリソースに依存しているものもあります。それぞれのコンポーネントやリソースが決められた順序で開始され、依存しているリソースと同じサーバ上で同時に実行していなければならない場合があります。この設定を簡素化するには、クラスタリソースグループを使用できます。
リソースグループの1例として、IPアドレスとファイルシステムを必要とするWebサーバがあります。この場合、各コンポーネントは、個々のリソースであり、それらが組み合わされてクラスタリソースグループを構成します。リソースグループは、1つ以上のサーバで実行されます。ソフトウェアまたはハードウェアが機能しない場合には、個々のクラスタリソースと同様に、グループはクラスタ内の別のサーバにフェールオーバーします。
グループには次のプロパティがあります。
リソースは認識される順序で開始し、逆の順番で停止します。
グループ内のリソースがどこかで開始できない場合は、グループ内のその後の全リソースは実行することができません。
グループにはプリミティブクラスタリソースしか含むことができません。グループには1つ以上のリソースを含む必要があります。空の場合は設定は無効になります。グループリソースの子を参照するには、グループのIDではなく子のIDを使用します。
制約でグループの子を参照することはできますが、通常はグループ名を使用することをお勧めします。
固着性はグループ内で統合可能なプロパティです。グループ内のアクティブな各メンバーは、グループの合計値に対して固着性を追加します。したがって、デフォルトのresource-stickiness
が100
で、グループに7つのメンバーがあり、そのうち5つがアクティブな場合は、グループが全体として、スコア500
で、現在の場所を優先します。
グループのリソース監視を有効にするには、グループ内で監視の必要な各リソースに対して監視を設定する必要があります。
選択したクラスタ管理ツールでグループを作成する方法については、次を参照してください。
Hawk2: 手順7.9「リソースグループを追加する」
crmsh: 8.4.10項 「クラスタリソースグループの構成」
クラスタ内の複数のノードで特定のリソースを同時に実行することができます。このためには、リソースをクローンとして設定する必要があります。クローンとして設定するリソースの一例として、OCFS2などのクラスタファイルシステムが挙げられます。提供されているどのリソースも、クローンとして設定できます。これは、リソースのリソースエージェントによってサポートされます。クローンリソースは、ホスティングされているノードによって異なる設定をすることもできます。
リソースクローンには次の3つのタイプがあります。
最も簡単なクローンタイプです。実行場所にかかわらず、同じ動作をします。このため、マシンごとにアクティブな匿名クローンのインスタンスは1つだけ存在できます。
このリソースは独自のエントリです。1つのノードで実行しているクローンのインスタンスは、別なノードの別なインスタンスとは異なり、同じノードの2つのインスタンスが同一になることもありません。
このリソースのアクティブインスタンスは、アクティブとパッシブという2つの状態に分けられます。プライマリとセカンダリ、またはマスタとスレーブと呼ばれることもあります。ステートフルなクローンが、匿名またはグローバルに固有の場合もあります。6.3.5.3項 「マルチステートリソース」も参照してください。
クローンは、グループまたは通常リソースを1つだけ含む必要があります。
リソースのモニタリングまたは制約を設定する場合、クローンには、単純なリソースとは異なる要件があります。詳細については、『Pacemaker Explained』(http://www.clusterlabs.org/doc/から入手可)を参照してください。特に、「Clones - Resources That Get Active on Multiple Hosts」のセクションを参照してください。
選択したクラスタ管理ツールでクローンを作成する方法については、次を参照してください。
Hawk2: 手順7.10「クローンリソースの追加」
crmsh: 8.4.11項 「クローンリソースの設定」。
マルチステートリソースは、クローンが得意とするところです。これにより、インスタンスを2つの動作モード(master
またはslave
と呼ばれているが、任意の名前を割り当てることができる)のいずれかに設定できます。マルチステートリソースは、グループまたは通常リソースを1つだけ含む必要があります。
リソースの監視または制約を設定する場合、マルチステートリソースには、単純なリソースとは異なる要件があります。詳細については、『Pacemaker Explained』(http://www.clusterlabs.org/doc/から入手可)を参照してください。特に、「Multi-state - Resources That Have Multiple Modes」のセクションを参照してください。
追加した各リソースについて、オプションを定義できます。クラスタはオプションを使用して、リソースの動作方法を決定します。CRMに特定のリソースの処理方法を通知します。リソースオプションは、crm_resource --meta
コマンドまたはHawk2を使用して設定できます(手順7.5「プリミティブリソースの追加」を参照)。
オプション |
説明 |
デフォルト |
---|---|---|
|
一部のリソースをアクティブにできない場合、クラスタは優先度の低いリソースを停止して、優先度の高いリソースをアクティブに維持します。 |
|
|
クラスタが維持しようとするこのリソースの状態。使用できる値: |
|
|
クラスタがリソースを開始して停止できるかどうか。使用できる値: |
|
|
リソースは手動でタッチできるかどうか。使用できる値: |
|
|
リソースが現在の状態をどの程度維持したいか。 |
計算済み |
|
ノードがこのリソースをホストできなくなるまで、このリソースについてノード上で発生する失敗の回数。 |
|
|
複数のノードでアクティブなリソースを検出した場合のクラスタの動作。使用できる値: |
|
|
失敗が発生していないように動作する(リソースを失敗したノードに戻す)前に、待機する秒数 |
|
|
|
|
|
このリソースが定義するリモートノードの名前。これにより、リモートノードのリソースが有効化されるだけでなく、リモートノードの識別に使用される固有の名前が定義されます。他のパラメータが設定されていない場合、この値はremote-portの接続先の
警告: 固有のIDの使用この値は、既存のリソースやノードIDとは重複させないでください。 |
なし(無効) |
|
pacemaker_remoteへのゲスト接続用のカスタムポート。 |
|
|
リモートノードの名前がゲストのホスト名ではない場合に接続するIPアドレスまたはホスト名。 |
|
|
中断したゲスト接続がタイムアウトするまでの時間。 |
|
すべてのリソースクラスのスクリプトでは、動作方法および管理するサービスのインスタンスを指定するパラメータを指定できます。リソースエージェントがパラメータをサポートする場合、それらのパラメータをcrm_resource
コマンドまたはHawk2を使用して追加できます(手順7.5「プリミティブリソースの追加」を参照)。インスタンス属性は、crm
コマンドラインユーティリティではparams
、Hawk2ではParameter
と呼ばれます。OCFスクリプトでサポートされているインスタンス属性のリストは、次のコマンドをroot
として実行すると参照できます。
root #
crm
ra info [class:[provider:]]resource_agent
または(オプション部分なし):
root #
crm
ra info resource_agent
出力には、サポートされているすべての属性、それらの目的、およびデフォルト値が一覧されます。
たとえば、次のコマンドを使用します。
root #
crm
ra info IPaddr
次の出力が返されます。
Manages virtual IPv4 addresses (portable version) (ocf:heartbeat:IPaddr) This script manages IP alias IP addresses It can add an IP alias, or remove one. Parameters (* denotes required, [] the default): ip* (string): IPv4 address The IPv4 address to be configured in dotted quad notation, for example "192.168.1.1". nic (string, [eth0]): Network interface The base network interface on which the IP address will be brought online. If left empty, the script will try and determine this from the routing table. Do NOT specify an alias interface in the form eth0:1 or anything here; rather, specify the base interface only. cidr_netmask (string): Netmask The netmask for the interface in CIDR format. (ie, 24), or in dotted quad notation 255.255.255.0). If unspecified, the script will also try to determine this from the routing table. broadcast (string): Broadcast address Broadcast address associated with the IP. If left empty, the script will determine this from the netmask. iflabel (string): Interface label You can specify an additional label for your IP address here. lvs_support (boolean, [false]): Enable support for LVS DR Enable support for LVS Direct Routing configurations. In case a IP address is stopped, only move it to the loopback device to allow the local node to continue to service requests, but no longer advertise it on the network. local_stop_script (string): Script called when the IP is released local_start_script (string): Script called when the IP is added ARP_INTERVAL_MS (integer, [500]): milliseconds between gratuitous ARPs milliseconds between ARPs ARP_REPEAT (integer, [10]): repeat count How many gratuitous ARPs to send out when bringing up a new address ARP_BACKGROUND (boolean, [yes]): run in background run in background (no longer any reason to do this) ARP_NETMASK (string, [ffffffffffff]): netmask for ARP netmask for ARP - in nonstandard hexadecimal format. Operations' defaults (advisory minimum): start timeout=90 stop timeout=100 monitor_0 interval=5s timeout=20s
グループ、クローン、およびマルチステートリソースには、インスタンス属性がないので注意してください。ただし、インスタンス属性のセットは、グループ、クローン、またはマルチステートリソースの子によって継承されます。
デフォルトで、クラスタはリソースが良好な状態であることを保証しません。クラスタにこれを行わせるには、リソースの定義に監視操作を追加する必要があります。監視操作は、すべてのクラスまたはリソースエージェントに追加できます。詳細については、6.4項 「リソース監視」を参照してください。
操作 |
説明 |
---|---|
|
アクションに指定する名前。一意にする必要があります。(IDは表示されません) |
|
実行するアクション。共通の値: |
|
操作を実行する頻度。単位: 秒 |
|
アクションが失敗したと宣言する前に待機する長さ。 |
|
このアクションが発生する前に満たす必要のある条件。使用できる値: |
|
このアクションが失敗した場合に実行するアクション。使用できる値:
|
|
|
|
リソースにこの役割がある場合のみ操作を実行します。 |
|
グローバルに設定したり、個々のリソースに対して設定できます。リソース上の「in-flight」操作の状態をCIBに反映させます。 |
|
操作について説明します。 |
リソースのタイムアウト値は次の3つのパラメータの影響を受けることがあります。
op_defaults
(操作用のグローバルタイムアウト)
リソーステンプレートに対して定義された特定のタイムアウト値
リソースに対して定義された特定のタイムアウト値
リソースに対して「特定の」値が定義される場合、グローバルデフォルトより優先されます。また、リソースに対して定義された特定の値は、リソーステンプレートで定義された値より優先されます。
タイムアウト値を適切に設定することは非常に重要です。これらの値を短くしすぎると、次のような理由で、多数の(不必要な)フェンシング処理が発生します。
リソースでタイムアウトが発生すると、リソースは失敗し、クラスタはリソースを停止しようとします。
リソースの停止も失敗した場合(たとえば、停止のタイムアウト設定が短すぎる場合)、クラスタはノードをフェンシングします。クラスタは、このノードが制御できなくなっていると見なすからです。
操作に対するグローバルデフォルトを調整し、crmshおよびHawk2の両方で特定のタイムアウト値を設定できます。タイムアウト値の決定および設定のベストプラクティスは次のとおりです。
負荷の下でリソースが開始および停止するためにかかる時間を確認します。
必要に応じて op_defaults
パラメータを追加し、それに応じて(デフォルト)タイムアウト値を設定します。
たとえば、op_defaults
を60
秒に設定します。
crm(live)configure#
op_defaults timeout=60
さらに長い時間を必要とするリソースについては、個別の値を定義します。
あるリソースに対して操作を設定する場合には、個別のstart
およびstop
操作を追加します。Hawk2を使用して設定する場合、これらの操作に適したタイムアウト値候補が表示されます。
リソースが実行中であるかどうか確認するには、そのリソースにリソースの監視を設定しておく必要があります。
リソースモニタが障害を検出すると、次の処理が行われます。
/etc/corosync/corosync.conf
のlogging
セクションで指定された設定に従って、ログファイルメッセージが生成されます。
障害がクラスタ管理ツール(Hawk2、crm status
)と、CIBステータスセクションに反映されます。
クラスタが明瞭な復旧アクションを開始します。これらのアクションには、リソースを停止して障害状態を修復する、ローカルまたは別のノードでリソースを再起動するなどが含まれる場合があります。設定やクラスタの状態によっては、リソースが再起動されないこともあります。
リソースの監視を設定しなかった場合、開始成功後のリソース障害は通知されず、クラスタは常にリソース状態を良好として表示してしまいます。
通常、リソースは動作している限り、クラスタのみによって監視されます。しかし、同時実行違反を検出するために、停止されるリソースの監視も設定する必要があります。次の例をご覧ください。
primitive dummy1 ocf:heartbeat:Dummy \ op monitor interval="300s" role="Stopped" timeout="10s" \ op monitor interval="30s" timeout="10s"
この設定は、300
秒ごとに、リソースdummy1
に対する監視操作をトリガします。これは、リソースがrole="Stopped"
に入ると有効になります。実行中には、リソースは30
秒ごとに監視されます。
CRMはすべてのノードの各リソースに対して、probe
と呼ばれる初期監視を実行します。probeはリソースのクリーンアップ後にも実行されます。1つのリソースに対して複数の監視操作が定義されている場合、CRMは最も時間間隔の短い監視を1つ選択し、そのタイムアウト値をプローブのデフォルトタイムアウトとして使用します。監視操作が何も設定されていない場合は、クラスタ規模のデフォルトが適用されます。デフォルトは、20
秒です( op_defaults
パラメータの設定で別途指定されない場合)。自動計算やop_defaults
の値に依存したくない場合は、このリソースの「プローブ」に対して特定の監視操作を定義します。interval
を0
に設定した監視操作を追加することで、この操作を行います。たとえば次のようになります。
crm(live)configure#
primitive
rsc1 ocf:pacemaker:Dummy \ op monitor interval="0" timeout="60"
rsc1
のプローブは60
秒でタイムアウトになります。この値は、
op_defaults
で定義されているグローバルタイムアウトや、その他の操作で設定されているタイムアウトとは無関係です。それぞれのリソースのプローブを指定するためにinterval="0"
を設定していない場合、CRMは、そのリソースに定義されている監視操作がほかにないかどうかを自動的に確認し、上で説明されているようにプローブのタイムアウト値を計算します。
選択したクラスタ管理ツールでリソースに対して監視操作を追加する方法については、次を参照してください。
Hawk2: 手順7.13「操作の追加または変更」
crmsh: 8.4.9項 「リソース監視の設定」
すべてのリソースを設定する以外にも、多くの作業が必要です。クラスタが必要なすべてのリソースを認識しても、正しく処理できるとは限りません。リソースの制約を指定して、リソースを実行可能なクラスタノード、リソースのロード順序、特定のリソースが依存している他のリソースを指定することができます。
使用可能な制約には3種類あります。
場所の制約はリソースを実行できるノード、できないノード、または実行に適したノードを定義するものです。
コロケーション制約は、ノード上で一緒に実行可能な、または一緒に実行することが禁止されているリソースをクラスタに伝えます。
アクションの順序を定義する、順序の制約です。
リソースグループの「メンバー」に対してコロケーション制約を作成しないでください。代わりに、リソースグループ全体を指すリソース制約を作成してください。その他のタイプの制約はすべて、リソースグループのメンバーに対して使用しても問題ありません。
クローンリソースまたはマルチステートリソースが適用されているリソースで制約を使用しないでください。制約はクローンまたはマルチステートリソースに適用する必要があり、その子リソースに適用することはできません。
場所、コロケーション、または順序の制約を定義するための別のフォーマットとして、resource sets
を使用することができます。リソースセットでは、プリミティブが1つのセットでグループ化されます。以前は、これはリソースグループを定義するか(デザインを正確に表現できない場合もあった)、個々の制約として各関係を定義することでこの操作が可能でした。個々の制約として定義した場合、多数のリソースとの組み合わせが増えるにつれて、制約が飛躍的に増加しました。リソースセットを介した設定で、冗長性が常に低減されるわけではありませんが、次の例が示すように、定義内容の把握と管理がより容易になります。
たとえば、crmshでリソースセット(loc-alice
)の次の設定を使用して、2つの仮想IP (vip1
および vip2
)を同じノード、 aliceに配置できます
。
crm(live)configure#
primitive
vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5crm(live)configure#
primitive
vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.6crm(live)configure#
location
loc-alice { vip1 vip2 } inf: alice
リソースセットを使用してコロケーション制約の設定を置き換える場合は、次の2つの例を検討します。
<constraints> <rsc_colocation id="coloc-1" rsc="B" with-rsc="A" score="INFINITY"/> <rsc_colocation id="coloc-2" rsc="C" with-rsc="B" score="INFINITY"/> <rsc_colocation id="coloc-3" rsc="D" with-rsc="C" score="INFINITY"/> </constraints>
リソースセットで表される同一の設定:
<constraints> <rsc_colocation id="coloc-1" score="INFINITY" > <resource_set id="colocated-set-example" sequential="true"> <resource_ref id="A"/> <resource_ref id="B"/> <resource_ref id="C"/> <resource_ref id="D"/> </resource_set> </rsc_colocation> </constraints>
リソースセットを使用して順序の制約の設定を置き換える場合は、次の2つの例を検討します。
<constraints> <rsc_order id="order-1" first="A" then="B" /> <rsc_order id="order-2" first="B" then="C" /> <rsc_order id="order-3" first="C" then="D" /> </constraints>
順序付けされたリソースを持つリソースセットを使用して、同様な目的を達成できます。
<constraints> <rsc_order id="order-1"> <resource_set id="ordered-set-example" sequential="true"> <resource_ref id="A"/> <resource_ref id="B"/> <resource_ref id="C"/> <resource_ref id="D"/> </resource_set> </rsc_order> </constraints>
これらのセットは、順序付けされている(sequential=true
)場合もあれば、順序付けされていない場合(sequential=false
)場合もあります。また、require-all
属性を使用して、AND
およびOR
ロジック間を切り替えることができます。
同じノード上にリソースのグループを配置する方が役立つ場合がありますが(コロケーション制約を定義)、リソース間に困難な依存関係を持つことはありません。たとえば、同じノード上に2つのリソースを配置したいが、それらの一方で障害が発生した場合に他方をクラスタで再起動したくない場合があります。これは、weak bond
コマンドを使用して、crmシェルで実行できます。
選択したクラスタ管理ツールでこれらの「弱い結合」を設定する方法については、次を参照してください。
様々な種類の制約を追加する方法については、選択したクラスタ管理ツールに応じて次のいずれかを参照してください。
Hawk2: 7.6項 「制約の設定」
crmsh: 8.4.5項 「リソース制約の設定」
制約の設定の詳細や、順序付けおよびコロケーションの基本的な概念についての詳しいバックグラウンド情報は次のドキュメントを参照してください。これらのドキュメントは、http://www.clusterlabs.org/doc/で入手できます。
『Pacemaker Explained』の「Resource Constraints」の章
『Colocation Explained』
『オーダーの概要』
制約を定義する際は、スコアも扱う必要があります。あらゆる種類のスコアはクラスタの動作方法と密接に関連しています。スコアの操作によって、リソースのマイグレーションから、速度が低下したクラスタで停止するリソースの決定まで、あらゆる作業を実行できます。スコアはリソースごとに計算され、リソースに対して負のスコアが付けられているノードは、そのリソースを実行できません。リソースのスコアを計算した後、クラスタはスコアが最も高いノードを選択します。
INFINITY
は現在1,000,000
と定義されています。この値の増減は、次の3つの基本ルールに従います。
任意の値+ INFINITY = INFINITY
任意の値- INFINITY = -INFINITY
INFINITY - INFINITY = -INFINITY
リソース制約を定義する際は、各制約のスコアを指定します。スコアはこのリソース制約に割り当てる値を示します。スコアの高い制約は、それよりもスコアが低い制約より先に適用されます。1つのリソースに対して場所の制約を複数作成し、それぞれに異なるスコアを指定することで、リソースがフェールオーバーするノードの順序を指定できます。
リソーステンプレートを定義したら(6.3.4項 「リソーステンプレート」を参照)、次のタイプの制約で参照できます。
順序の制約
コロケーション制約
rsc_ticket制約(Geoクラスタの場合)
ただし、コロケーション制約には、テンプレートへの参照を複数含めることはできません。リソースセットには、テンプレートへの参照を含めることはできません。
制約内で参照されたリソーステンプレートは、そのテンプレートから派生するすべてのプリミティブを表します。これは、そのリソーステンプレートを参照しているすべてのプリミティブリソースに、この制約が適用されることを意味します。制約内でリソーステンプレートを参照すれば、リソースセットの代替となり、クラスタ設定をかなりの程度単純化することができます。リソースセットの詳細については、手順7.17「制約のためにリソースセットを使用する」を参照してください。
リソースに障害が発生すると、自動的に再起動されます。現在のノードで再起動できない場合、または現在のノードでN
回失敗した場合は、別のノードへのフェールオーバーが試行されます。リソースが失敗するたびに、その失敗回数が増加します。新しいノードへのマイグレートを行う基準(migration-threshold
)となるリソースの失敗数を定義できます。クラスタ内に3つ以上ノードがある場合、特定のリソースのフェールオーバー先のノードはHigh Availabilityソフトウェアが選択します。
ただし、リソースに1つ以上の場所の制約とmigration-threshold
を設定することで、そのリソースのフェールオーバー先にするノードを指定できます。
選択したクラスタ管理ツールでフェールオーバーノードを指定する方法については、次を参照してください。
Hawk2: 7.6.6項 「リソースフェールオーバーノードの指定」
crmsh: 8.4.6項 「リソースフェールオーバーノードの指定」
たとえば、リソース「rsc1
」に場所の制約を設定し、このリソースを「alice
」で優先的に実行するように指定したと仮定します。そのノードで実行できなかった場合は、「migration-threshold
」を確認して失敗回数と比較します。失敗回数 >= マイグレーションしきい値の場合は、リソースは次の優先実行先として指定されているノードにマイグレートされます。
デフォルトでは、いったんしきい値に達すると、そのノードでは、リソースの失敗回数がリセットされるまで、失敗したリソースを実行できなくなります。これは、手動でクラスタ管理者が行うか、リソースにfailure-timeout
オプションを設定することで実行できます。
たとえば、migration-threshold=2
とfailure-timeout=60s
を設定すると、リソースは、2回の失敗の後に新しいノードに移行します。そして、1分後に復帰できます(固着性と制約のスコアによる)。
移行しきい値の概念には2つの例外があり、これらの例外は、リソースの開始失敗か、停止失敗のどちらかで発生します。
起動の失敗では、失敗回数がINFINITY
に設定されるので、常に、即時に移行が行われます。
停止時の失敗ではフェンシングが発生します([stonith-enabled
]がデフォルトである「true
」に設定されている場合)。
STONITHリソースが定義されていない場合は(またはstonith-enabled
がfalse
に設定されている場合)、リソースの移行は行われません。
選択したクラスタ管理ツールでマイグレーションしきい値を使用し、失敗回数をリセットする方法については、次を参照してください。
Hawk2: 7.6.6項 「リソースフェールオーバーノードの指定」
crmsh: 8.4.6項 「リソースフェールオーバーノードの指定」
ノードがオンライン状態に戻り、クラスタ内にある場合は、リソースが元のノードにフェールバックすることがあります。リソースを実行していたノードにリソースをフェールバックさせたくない場合や、リソースのフェールバック先として別のノードを指定する場合は、リソースの固着性の値を変更します。リソースの固着性は、リソースの作成時でも、その後でも指定できます。
リソース固着性値の指定時には、次の予想される結果について考慮してください。
0
の値:デフォルトです。リソースはシステム内で最適な場所に配置されます。現在よりも「状態のよい」、または負荷の少ないノードが使用可能になると、移動することを意味しています。このオプションは自動フェールバックとほとんど同じですが、以前アクティブだったノード以外でもリソースをフェールバックできるという点が異なります。
0
より大きい値:リソースは現在の場所に留まることを望んでいますが、状態がよいノードが使用可能になると移動される可能性があります。値が大きくなるほど、リソースが現在の場所に留まることを強く望んでいることを示します。
0
より小さい値:リソースは現在の場所から別な場所に移動することを望んでいます。絶対値が大きくなるほど、リソースが移動を強く望んでいることを示します。
INFINITY
の値:
ノードがリソースの実行権利がなくなったために強制終了される場合(ノードのシャットダウン、ノードのスタンバイ、migration-threshold
に到達、または設定変更)以外は、リソースは常に現在の場所に留まります。このオプションは自動フェールバックを完全に無効にする場合とほとんど同じです。
-INFINITY
の値:リソースは現在の場所から常に移動されます。
すべてのリソースが同等ではありません。Xenゲストなどの一部のリソースでは、そのホストであるノードがリソースの容量要件を満たす必要があります。リソースの組み合わされたニーズが提供された容量より大きくなるようにリソースが配置されると、リソースのパフォーマンスが低下します(あるいは失敗することさえあります)。
これを考慮に入れて、High Availability Extensionでは、次のパラメータを指定できます。
一定のノードが提供する容量
一定のリソースが要求する容量
リソースの配置に関する全体的なストラテジ
選択したクラスタ管理ツールでこれらの設定を設定する方法については、次を参照してください。
ノードは、リソースの要件を満たすだけの空き容量があれば、そのリソースに対して資格があるとみなされます。High Availability Extensionにとって、容量の性質は重要ではありません。High Availability Extensionは、リソースをノードに移動する前に、リソースのすべての容量要件が満たされているかどうかを確認するだけです。
リソースの要件とノードが提供する容量を手動で設定するには、使用属性を使用します。使用属性に任意の名前を付け、設定に必要なだけ名前/値のペアを定義します。ただし、属性値は、整数にする必要があります。
使用属性を持つ複数のリソースがグループ化されていたり、これらにコロケーション制約がある場合、High Availability Extensionではそのことを考慮に入れます。可能な場合、これらのリソースは、すべての容量要件を満たすことができるノードに配置されます。
リソースグループに対して使用属性を直接設定することはできません。ただし、グループの設定を簡素化するために、グループ内のすべてのリソースに必要な合計容量を含む使用属性を追加することができます。
High Availability Extensionには、ノードの容量とリソースの要件を自動的に検出し、設定する手段も用意されています。
NodeUtilization
リソースエージェントは、ノードの容量をチェックします(CPUとRAMについて)。 自動検出を設定するには、クラス、プロバイダ、タイプがocf:pacemaker:NodeUtilization
のクローンリソースを作成します。このクローンのインスタンスが各ノードに1つずつ実行している必要があります。インスタンスが開始すると、CIBでそのノードの設定にutilizationセクションが追加されます。
リソースの最小要件の自動検出(RAMとCPU)に配慮し、Xen
リソースエージェントが改良されました。Xen
リソースは、開始時点でRAMとCPUの消費状況を反映します。リソース設定には、使用属性が自動的に追加されます。
ocf:heartbeat:Xen
リソースエージェントは、libvirt
に使用するべきではありません。libvirt
ではマシン記述ファイルの変更が想定されているためです。
libvirt
には、ocf:heartbeat:VirtualDomain
リソースエージェントを使用します。
最小要件を検出することに加え、High Availability Extensionは、VirtualDomain
リソースエージェントを通して現在の利用状況を監視することができ、仮想マシンでのCPUとRAMの使用状況を検出します。この機能を使用するには、クラス、プロバイダ、およびタイプがocf:heartbeat:VirtualDomain
のリソースを設定します。次のインスタンス属性を使用できます: autoset_utilization_cpu
および
autoset_utilization_hv_memory
。両方ともデフォルトはtrue
です。これにより、監視サイクルのたびにCIBで使用値が更新されます。
容量と要件を手動と自動のどちらで設定する場合でも、placement-strategy
プロパティ(グローバルクラスタオプション内)で、配置ストラテジを指定する必要があります。次の値を使用できます。
default
(デフォルト値)使用値は考慮しません。リソースは、場所のスコアに従って割り当てられます。スコアが同じであれば、リソースはノード間で均等に分散されます。
utilization
リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。ただし、負荷分散は、まだ、ノードに割り当てられたリソースの数に基づいて行われます。
minimal
リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。できるだけ少ない数のノードにリソースを集中しようとします(残りのノードの電力節約のため)。
balanced
リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。リソースを均等に分散して、リソースのパフォーマンスを最適化しようとします。
使用できる配置ストラテジは、最善策であり、まだ、複雑なヒューリスティックソルバで、常に最適な割り当て結果を得るには至っていません。リソースの優先度を正しく設定して、最重要なリソースが最初にスケジュールされるようにしてください。
次の例は、同等のノードから成る3ノードクラスタと4つの仮想マシンを示しています。
node alice utilization memory="4000" node bob utilization memory="4000" node charlie utilization memory="4000" primitive xenA ocf:heartbeat:Xen utilization hv_memory="3500" \ params xmfile="/etc/xen/shared-vm/vm1" meta priority="10" primitive xenB ocf:heartbeat:Xen utilization hv_memory="2000" \ params xmfile="/etc/xen/shared-vm/vm2" meta priority="1" primitive xenC ocf:heartbeat:Xen utilization hv_memory="2000" \ params xmfile="/etc/xen/shared-vm/vm3" meta priority="1" primitive xenD ocf:heartbeat:Xen utilization hv_memory="1000" \ params xmfile="/etc/xen/shared-vm/vm4" meta priority="5" property placement-strategy="minimal"
3ノードはすべてアクティブであり、まず、リソースxenA
がノードに配置され、次に、xenD
が配置されます。xenB
とxenC
は、一緒に割り当てられるか、またはどちらか1つがxenD
とともに割り当てられます。
1つのノードに障害が発生した場合、残りのノード上で利用できるメモリ合計が少なすぎて、これらのリソースすべてはホストできません。xenA
は確実に割り当てられ、xenD
も同様です。ただし、残りのリソースxenB
とxenC
は、そのどちらかしか割り当てられません。xenBとxenCの優先度は同等なので、結果はまだ決められません。これを解決するためにも、どちらかに高い優先度を設定する必要があります。
タグは最近Pacemakerに追加された新機能です。タグは、コロケーションの作成や関係の順序付けを行わずに、複数のリソースをただちに参照する方法です。これは、概念的に関連するリソースをグループ化するのに役立つ場合があります。たとえば、データベースに関連するいくつかのリソースがある場合、databases
というタグを作成し、データベースに関連するすべてのリソースをこのタグに追加します。これにより、1つのコマンドでそれらすべてのリソースを停止または起動できます。
タグは制約でも使用できます。たとえば、次の場所制約loc-db-prefer
は、databases
でタグ付けしたリソースのセットに適用されます。
location loc-db-prefer databases 100: alice
選択したクラスタ管理ツールでタグを作成する方法については、次を参照してください。
Hawk2: 手順7.12「タグの追加」
crmsh: 8.5.6項 「リソースのグループ化/タグ付け」
リモートホストでサービスを監視および管理できることが、ここ数年の間にますます重要になってきています。SUSE Linux Enterprise High Availability Extension 11 SP3では、監視プラグインを介したリモートホスト上のサービスの詳細な監視機能を提供してきました。SUSE Linux Enterprise High Availability Extension
12 SP5では、最近追加された
pacemaker_remoteサービスを使用すると、リモートマシンにクラスタスタックをインストールしていなくても、実際のクラスタノードと同様にリモートホスト上のリソースを全面的に管理および監視できます。
仮想マシンの監視はVMエージェント(ハイパーバイザにゲストが出現する場合のみチェックを行う)を使用して行うか、VirtualDomainまたはXenエージェントから呼び出される外部スクリプトによって行うことができます。これまでは、精度の高い監視を行うには、仮想マシン内にHigh Availabilityスタックを完全にセットアップするしか方法がありませんでした。
今回、High Availability Extensionでは、監視プラグイン(旧称はNagiosプラグイン)に対するサポートを提供することで、リモートホスト上のサービスを監視できるようになりました。ゲストイメージを変更することなく、ゲストの外部ステータスを収集できます。たとえば、VMゲストはWebサービスまたは単純なネットワークリソースを実行している可能性があり、これらはアクセス可能である必要があります。Nagiosリソースエージェントによって、ゲスト上のWebサービスまたはネットワークリソースを監視できるようになりました。これらのサービスにアクセスできなくなった場合は、High Availability Extensionがそれぞれのゲストの再起動またはマイグレーションをトリガします。
ゲストがサービス(そのゲストによって使用されるNFSサーバなど)に依存している場合、そのサービスは、クラスタによって管理される通常のリソースか、Nagiosリソースによって監視される外部サービスのどちらかにすることができます。
Nagiosリソースを設定するには、ホスト上に次のパッケージをインストールする必要があります:
monitoring-plugins
monitoring-plugins-metadata
必要に応じて、YaSTまたはZypperが、これ以上のパッケージに対する依存性を解決します。
一般的な使用例としては、1つのリソースコンテナに属するリソースとして監視プラグインを設定します。このリソースコンテナは通常はVMです。いずれかのリソースに障害が発生したら、このコンテナが再起動されます。設定例については、例6.10「監視プラグインのリソースの設定」を参照してください。または、Nagiosリソースエージェントを使用してネットワーク経由でホストまたはサービスを監視する場合、このエージェントを通常のリソースとして設定することもできます。
primitive vm1 ocf:heartbeat:VirtualDomain \ params hypervisor="qemu:///system" config="/etc/libvirt/qemu/vm1.xml" \ op start interval="0" timeout="90" \ op stop interval="0" timeout="90" \ op monitor interval="10" timeout="30" primitive vm1-sshd nagios:check_tcp \ params hostname="vm1" port="22" \ 1 op start interval="0" timeout="120" \ 2 op monitor interval="10" group g-vm1-and-services vm1 vm1-sshd \ meta container="vm1" 3
サポートされるパラメータは、監視プラグインの長いオプションと同じです。プラグインは、パラメータ | |
ゲストオペレーティングシステムが起動してサービスが実行されるまでには少し時間がかかるので、監視リソースの起動タイムアウトは十分な長さに設定する必要があります。 | |
タイプが |
上の例には、check_tcp
プラグイン用の1つのリソースしか含まれていませんが、様々なプラグインタイプ(たとえば、check_http
やcheck_udp
など)用に複数のリソースを設定することもできます。
複数のサービスのホスト名が同じである場合、hostname
パラメータを個別のプリミティブに追加するのではなく、グループに対して指定することもできます。次に例を示します。
group g-vm1-and-services vm1 vm1-sshd vm1-httpd \ meta container="vm1" \ params hostname="vm1"
監視プラグインによって監視されているいずれかのサービスに、VM内で障害が発生した場合は、クラスタがこれを検出し、コンテナリソース(VM)を再起動します。この場合に実行される操作は、サービスの監視操作に関するon-fail
属性を指定することで設定できます。デフォルトでは、restart-container
に設定されています。
VMのマイグレーションしきい値を検討する場合は、サービスの障害発生回数が考慮されます。
pacemaker_remote
を使用したリモートノードでのサービスの管理 #
pacemaker_remote
サービスを使用すると、High Availabilityクラスタを仮想ノードまたはリモートベアメタルマシンに拡張することができます。クラスタスタックを実行して、クラスタのメンバーになる必要はありません。
High Availability Extensionでは現在、仮想環境(KVMおよびLXC)、およびこれらの仮想環境内に存在するリソースを起動できるようになりました(PacemakerまたはCorosyncの実行に仮想環境は必要としません)。
クラスタリソースとしての仮想マシンおよびVM内に存在するリソースの両方を管理する使用例では、次の設定を使用できるようになりました。
「通常」(ベアメタル)クラスタノードは、High Availability Extensionを実行します。
仮想マシンは、pacemaker_remote
サービスを実行します(VM側で必要な設定はほとんどありません)。
「通常」クラスタノード上のクラスタスタックはVMを起動し、VM上で実行されているpacemaker_remote
サービスに接続して、それらをリモートノードとしてクラスタに統合します。
リモートノードでクラスタスタックがインストールされていないときは、これには次の意味があります。
リモートノードはクォーラムに参加しません。
リモートノードはDCになることはできません。
リモートノードは、スケーラビリティの制約に制限されません(Corosyncには32ノードのメンバー制限があります)。
remote_pacemaker
サービスに関する詳細については(詳細な設定手順からなる複数の使用例を含む)、『Pacemaker Remote—Extending High Availability into Virtual Nodes』を参照してください(http://www.clusterlabs.org/doc/から入手可能)。
ノードがディスク容量が使い尽くしたために、そこに割り当てられたリソースを管理できなくなることを避けるため、High Availability Extensionでは、ocf:pacemaker:SysInfo
というリソースエージェントが提供されています。これを使用して、ディスクパーティションに関してノードのヘルスを監視します。SysInfo RAは、#health_disk
という名前のノード属性を作成します。この属性は、監視対象のディスク空き容量が指定された制限を下回るとred
に設定されます。
ノードのヘルスがクリティカルな状態に達した場合のCRMの対応方法を定義するには、グローバルなクラスタオプションであるnode-health-strategy
を使用します。
ノードがディスク容量を使い尽くした場合に、リソースを自動的にノードから移動させるには、次の手順に従います。
ocf:pacemaker:SysInfo
リソースを設定します。
primitive sysinfo ocf:pacemaker:SysInfo \ params disks="/tmp /var"1 min_disk_free="100M"2 disk_unit="M"3 \ op monitor interval="15s"
監視対象のディスクパーティション。たとえば、 注記: | |
これらのパーティションの必要最小限の空きディスク容量。オプションで、計測に使用する単位を指定できます(上記の例では、メガバイトを表す | |
ディスク容量をレポートする場合の単位。 |
リソース設定を完了するには、ocf:pacemaker:SysInfo
のクローンを作成し、各クラスタノードでそれを起動します。
node-health-strategy
をmigrate-on-red
に設定します。
property node-health-strategy="migrate-on-red"
#health_disk
属性がred
に設定されている場合、ポリシーエンジンによって、そのノードのリソースのスコアに-INF
が追加されます。これにより、このノードからすべてのリソースが移動します。この処理はSTONITHリソースのところで停止しますが、STONITHリソースが実行されていない場合でも、ノードをフェンスすることができます。フェンスでCIBに直接アクセスすることで、動作を続行できるからです。
ノードのヘルス状態がred
になったら、原因となる問題を解決します。次にred
ステータスをクリアして、ノードを再びリソースの実行に適した状態にします。クラスタノードにログインして、次のいずれかの方法を使用します。
次のコマンドを実行します:
root #
crm
node status-attr NODE delete #health_disk
該当するノードでPacemakerを再起動します。
ノードを再起動します。
ノードがサービスに復帰し、再びリソースを実行できるようになります。
crmシェル(crmsh)、High Availabilityクラスタ管理用の高度なコマンドラインインタフェースのホームページ。
crmshを使用した基本的なクラスタ設定の『Getting Started』チュートリアルとcrmシェルの包括的なマニュアルを含む、crmシェルに関するいくつかのドキュメント。マニュアルはhttp://crmsh.github.io/man-2.0/で入手できます。チュートリアルはhttp://crmsh.github.io/start-guide/に用意されています。
High Availability Extensionに含まれているクラスタリソースマネージャであるPacemakerのホームページ。
いくつかの包括的なマニュアルと一般的な概念を説明するより簡潔なドキュメント。次に例を示します。
『Pacemaker Explained』: 参考として包括的で詳細な情報が記載されています。
『Configuring Fencing with crmsh』: STONITHデバイスの設定方法および使用方法。
『Colocation Explained』
『オーダーの概要』
High Availability Linuxプロジェクトのホームページ。
クラスタリソースを設定および管理する場合、HA Web Konsole (Hawk2)、またはcrmシェル(crmsh)コマンドラインユーティリティのいずれかを使用します。Hawkがインストールされている前のバージョンのSUSE® Linux Enterprise High Availability Extensionからアップグレードする場合は、パッケージが現在のバージョン、Hawk2で置き換えられます。
HawkのWebベースのユーザインタフェースを使用すれば、Linux以外のマシンから、Linuxクラスタを監視し、管理することができます。さらにこれは、ご使用のシステムが最小限のグラフィカルユーザインタフェースしか提供していない場合に最適なソリューションです。
Hawk2にログインするには、次の要件を満たす必要があります。
Hawk2で接続するすべてのクラスタノードにhawk2
パッケージをインストールする必要があります。
Hawk2を使用してクラスタノードにアクセスするマシンに必要なものは、JavaScriptとクッキーを有効にして接続を確立できるグラフィカルなWebブラウザです。
Hawk2を使用するには、このWebインタフェースで接続するノード上で、それぞれのWebサービスが開始されている必要があります。詳細については、手順7.1「Hawk2サービスの開始」を参照してください。
ha-cluster-bootstrap
パッケージからスクリプトを使用してクラスタをセットアップした場合、Hawk2サービスはすでに有効になっています。
Hawk2ユーザはhaclient
グループのメンバーである必要があります。インストール時にhacluster
という名前のLinuxユーザが作成されますが、このユーザがhaclient
グループに追加されます。セットアップ用にha-cluster-init
スクリプトを使用している場合は、hacluster
ユーザに対してデフォルトパスワードが設定されます。
Hawk2を開始する前に、hacluster
ユーザのパスワードを設定するか変更してください。または、haclient
グループのメンバーである新しいユーザを作成してください。
Hawk2を使用して接続する各ノードでこれを実行します。
接続先にするノードで、シェルを開き、root
としてログインします。
次のように入力して、サービスのステータスをチェックします。
root #
systemctl
status hawk
サービスが実行されていない場合は、次のコマンドでサービスを開始します。
root #
systemctl
start hawk
ブート時にHawk2を自動的に起動したい場合は、次のコマンドを実行します。
root #
systemctl
enable hawk
Hawk2 Webインタフェースは、HTTPSプロトコルとポート7630
を使用します。
Hawk2を使用して個々のクラスタノードにログインする代わりに、浮動、仮想IPアドレス(IPaddr
またはIPaddr2
)をクラスタリソースとして設定できます。そのための特別な設定は不要です。サービスがどの物理ノードで実行されていても、クライアントはHawkサービスに接続できます。
クラスタをha-cluster-bootstrap
スクリプトを使用して設定する際には、クラスタ管理用に仮想IPを設定するかどうかを求められます。
いずれかのマシンでWebブラウザを起動し、次のURLを入力します。
https://HAWKSERVER:7630/
HAWKSERVERの部分は、Hawk Webサービスを実行するクラスタノードのIPアドレスまたはホスト名で置き換えます。Hawk2でクラスタ管理用に仮想IPアドレスを設定した場合、その仮想IPアドレスでHAWKSERVERを置き換えます。
初めてURLにアクセスしようとするときに証明書の警告が表示される場合は、自己署名証明書が使用されています。自己署名証明書は、デフォルトでは信頼されません。
証明書を検証するには、クラスタオペレータに証明書の詳細を求めます。
続行するには、ブラウザに例外を追加して警告をバイパスします。
自己署名証明書を公式認証局によって署名された証明書で置き換える方法の詳細については、自己署名証明書の置き換えを参照してください。
Hawk2ログイン画面で、hacluster
ユーザ(または、haclient
グループのメンバーである他の任意のユーザ)の と を入力します。
をクリックします。
Hawk2にログインすると、左側にはナビゲーションバー、右側には複数のリンクが含まれる最上位の行が表示されます。
デフォルトでは、root
またはhacluster
としてログインしたユーザは、すべてのクラスタ設定作業への、完全な読み込み/書き込みのアクセス権を持ちます。ただし、アクセス制御リスト(ACL)を使用すれば、より詳細なアクセス権限を定義することができます。
CRMでACLが有効になっている場合、Hawk2で利用できる機能は、ユーザ役割と割り当てられたアクセスパーミッションごとに異なります。Hawk2のhacluster
のみが実行できます。
Hawk2の最上位の行には、次のエントリが表示されます。
7.9項 「バッチモードの使用」を参照してください。
: クリックすると、バッチモードに切り替わります。これにより、変更をシミュレートしてステージングし、それらの変更を単一のトランザクションとして適用できます。詳細については、: Hawk2用の設定ができます(たとえば、Webインタフェースの言語の設定やSTONITHを無効にした場合に警告を表示するかなどの設定)。
SUSE Linux Enterprise High Availability Extensionドキュメントにアクセスしたり、リリースノートを参照したり、バグを報告したりします。
:: クリックするとログアウトします。
グローバルクラスタオプションは、一定の状況下でのクラスタの動作を制御します。これらは、セットにグループ化され、Hawk2、crmshなどのクラスタ管理ツールで表示し、変更することができます。事前に定義されている値は、通常は、そのまま保持できます。ただし、クラスタの主要機能を正しく機能させるには、クラスタの基本的なセットアップ後に、次のパラメータを調整する必要があります。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
を選択します。画面が開きます。グローバルクラスタオプションとその現在の値が表示されます。
画面の右側にパラメータの簡単な説明を表示するには、マウスポインタをパラメータに合わせます。
および の値を確認し、必要に応じて調整します。
6.2.2項 「グルーバルオプションno-quorum-policy
」を参照してください。
何らかの理由でフェンシングを無効にする必要がある場合は、no
に設定します。通常のクラスタ操作にはSTONITHデバイスの使用が必要なため、デフォルトでは、true
に設定されています。デフォルト値では、クラスタは、STONITHリソースが設定されていない場合にはリソースの開始を拒否します。
クラスタにはノードフェンシングメカニズムが必要です。
グローバルクラスタオプションstonith-enabled
およびstartup-fencing
をtrue
に設定する必要があります。これらを変更するとサポートされなくなります。
クラスタ設定からパラメータを削除するには、パラメータの横の
アイコンをクリックします。パラメータを削除すると、クラスタはそのパラメータがデフォルト値に設定されている場合と同様に動作します。クラスタ設定に新たなパラメータを追加するには、ドロップダウンボックスから選択します。
または を変更する必要がある場合は、次のような処理を実行します。
値を調整するには、ドロップダウンボックスから別の値を選択するか、値を直接編集します。
新しいリソースのデフォルトまたは操作のデフォルトを追加するには、空のドロップダウンボックスから1つ選択し、値を入力します。デフォルト値が存在する場合は、Hawk2から自動的に提示されます。
パラメータを削除するには、その横の6.3.6項 「リソースオプション(メタ属性)」および6.3.8項 「リソース操作」にドキュメントされているデフォルト値を使用します。
アイコンをクリックします。 と に値が指定されていない場合、クラスタは変更内容を確認します。
クラスタの管理者は、クラスタ内のサーバ上の各リソースや、サーバ上で実行する各アプリケーションに対してクラスタリソースを作成する必要があります。クラスタリソースには、Webサイト、メールサーバ、データベース、ファイルシステム、仮想マシン、およびユーザが常時使用できるその他のサーバベースのアプリケーションまたはサービスなどが含まれます。
作成できるリソースタイプの概要については、6.3.3項 「リソースのタイプ」を参照してください。リソースの基本情報(ID、クラス、プロバイダ、およびタイプ)を指定すると、Hawk2によって次のカテゴリが表示されます。
リソースが制御するサービスのインスタンスを決定します。詳細については、6.3.7項 「インスタンス属性(パラメータ)」を参照してください。
リソースを作成する際、Hawk2は必要なパラメータを自動的に表示します。これらを編集して、有効なリソースの設定を取得します。
リソース監視に必要です。詳細については、6.3.8項 「リソース操作」を参照してください。
リソースを作成する際、Hawk2は、重要なリソース操作を表示します(monitor
、start
、およびstop
)。
特定のリソースの処理方法をCRMに指示します。詳細については、6.3.6項 「リソースオプション(メタ属性)」を参照してください。
リソースを作成する際、Hawk2はそのリソースの重要なメタ属性を自動的にリストにします(たとえばリソースの初期状態を定義するtarget-role
属性です。デフォルトではStopped
に設定されているため、リソースはすぐには始動しません)。
特定のリソースがノードから要求する容量をCRMに指示します。詳細については、7.6.8項 「負荷インパクトに基づくリソース配置の設定」を参照してください。
これらのカテゴリのエントリと値は、リソースの作成中に調整することも、後から調整することもできます。
クラスタ管理者はクラスタ設定を知る必要がある場合があります。Hawk2は、現在の設定をcrmシェル構文で、XMLとして、およびグラフとして表示できます。クラスタ設定をcrmシェル構文で表示するには、左ナビゲーションバーから、
を選択し、 をクリックします。代わりに設定をraw XMLで表示するには、 をクリックします。CIBで設定されたノードとリソースのグラフィカルな表現を示すには、 をクリックします。リソース間の関係も表示されます。Hawk2ウィザードは、仮想IPアドレスやSDB STONITHリソースなどの単純なリソースを設定する場合に便利です。また、DRBDブロックデバイスやApache Webサーバのリソース設定などの、複数リソースを含む複雑な設定においても役立ちます。設定手順をウィザードに従って進めることができ、入力が必要なパラメータについては情報が提供されます。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
を選択します。ウィザードの横にある下矢印アイコンをクリックして個々のカテゴリを展開し、目的のウィザードを選択します。
画面の指示に従います。最後の設定手順が完了したら、
を選択して、入力した値を検証します。
Hawk2が実行するアクションと、設定の内容が表示されます。設定によっては、root
パスワードの入力を求めるプロンプトが表示されることがあります。
最も基本的なタイプのリソースを作成するには、次の手順に従います。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。固有の
を入力します。リソース設定の基にするリソーステンプレートが存在する場合は、手順7.6「リソーステンプレートの追加」を参照してください。
で目的のテンプレートを選択します。テンプレートの設定の詳細については、
lsb
、ocf
、service
、stonith
、またはsystemd
から選択できます。詳細については、6.3.2項 「サポートされるリソースエージェントクラス」を参照してください。
ocf
をクラスとして選択した場合、OCFリソースエージェントの を指定します。OCFの指定によって、複数のベンダが同じリソースエージェントを提供できるようになります。
リストから、使用するリソースエージェントを選択します(たとえば または )。このリソースエージェントの簡単な説明が表示されます。
これで、リソースの基本情報が指定されました。
リストに表示される選択肢は、選択した (OCFリソースの場合は、 も)によって異なります。
Hawk2によって提案された
、 、および を保持する場合は、 をクリックして設定を終了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。パラメータ、操作、またはメタ属性を調整するには、7.5.5項 「リソースの変更」を参照してください。リソースの 属性を設定するには、手順7.21「リソースが要求する容量の設定」を参照してください。
類似した設定のリソースを多く作成する最も簡単な方法は、リソーステンプレートを定義することです。リソーステンプレートを定義した後は、プリミティブの中や、特定のタイプの制約で参照できるようになります。リソーステンプレートの機能と使用方法の詳細については、6.5.3項 「リソーステンプレートと制約」を参照してください。
リソーステンプレートは、プリミティブリソースと同様の方法で設定します。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。固有の
を入力します。手順7.5「プリミティブリソースの追加」のステップ 5以降の手順に従います。
リソースの作成後、必要に応じてパラメータ、操作、またはメタ属性を調整することで、いつでもその設定を編集できます。
Hawk2にログインします。
https://HAWKSERVER:7630/
Hawk2の
画面で、 リストに移動します。列で、変更したいリソースまたはグループの横にある下矢印アイコンをクリックして を選択します。
リソース設定画面が開きます。
新たなパラメータ、操作、またはメタ属性を追加するには、空のドロップダウンボックスから項目を選択します。
カテゴリの値を編集するには、それぞれのカテゴリの アイコンをクリックして操作の別の値を入力し、 をクリックします。
完了したら、リソース設定画面で
ボタンをクリックして、パラメータ、操作、またはメタ属性の変更内容を確認します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
クラスタにはノードフェンシングメカニズムが必要です。
グローバルクラスタオプションstonith-enabled
およびstartup-fencing
をtrue
に設定する必要があります。これらを変更するとサポートされなくなります。
デフォルトでは、グローバルクラスタオプションstonith-enabled
はtrue
に設定されています。STONITHリソースが定義されていない場合、クラスタはどのリソースの開始も拒否します。1つ以上のSTONITHリソースを設定して、STONITHのセットアップを完了します。SBD、libvirt (KVM/Xen)、またはvCenter/ESX ServerのSTONITHリソースを追加する場合、Hawk2ウィザードを使用するのが最も簡単な方法です(7.5.2項 「ウィザードを使用したリソースの追加」を参照してください)。STONITHは他のリソースと同様に設定しますが、その動作はいくつかの点で異なっています。詳細については、10.3項 「STONITHのリソースと環境設定」を参照してください。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。固有の
を入力します。リストで、リソースエージェントクラスとして を選択します。
リストから、使用しているSTONITHデバイスを制御するためのSTONITHプラグインを選択します。このプラグインの簡単な説明が下に表示されます。
Hawk2は、自動的にそのリソースに必要な
を表示します。それぞれのパラメータの値を入力します。Hawk2は、重要なリソース
を表示し、デフォルト値を提案します。ここで設定を変更しない場合、確定するとすぐに、Hawk2は提案した操作およびデフォルト値を追加します。変更理由がない場合は、デフォルトの
設定を保持します。変更を確認して、STONITHリソースを作成します。
画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
フェンシングを設定するには、制約を追加します。詳細については、第10章 「フェンシングとSTONITH」を参照してください。
クラスタリソースの中には、他のコンポーネントやリソースに依存しているものもあります。このような場合、各コンポーネントまたはリソースは特定の順番で起動し、同じサーバ上で動作する必要があります。この設定を簡単にするため、SUSE Linux Enterprise High Availability Extensionは、グループのコンセプトをサポートしています。
リソースグループには、一緒の場所で見つけ、連続して開始し、逆の順序で停止する必要のあるリソースセットが含まれます。リソースグループの例と、グループとそのプロパティの詳細について、6.3.5.1項 「グループ」を参照してください。
グループには1つ以上のリソースを含む必要があります。空の場合は設定は無効になります。グループの作成中に、Hawk2ではさらにプリミティブを作成し、それらをグループに追加できます。詳細については、7.7.1項 「リソースとグループの編集」を参照してください。
Hawk2にログインします。
https://HAWKSERVER:7630/
左ナビゲーションバーから、
› の順に選択します。固有の
を入力します。グループメンバーを定義するには、「ハンドル」アイコンを使用して、メンバーを目的の順序にドラッグアンドドロップします。
リストで1つまたは複数のエントリを選択します。グループメンバーを再ソートするには、右側の必要に応じて、
を変更または追加します。をクリックして、設定を完了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
特定のリソースをクラスタ内の複数のノードで同時に実行することが必要な場合には、それらのリソースをクローンとして設定します。クローンとして設定できるリソースの一例は、OCFS2などのクラスタファイルシステムのocf:pacemaker:controld
です。標準のリソースまたはリソースグループであれば、どれでもクローンを作成できます。クローンリソースの各インスタンスは、すべて同じ動作にすることができます。ただし、ホストされているノードに応じて設定を変えることもできます。
利用可能なリソースクローンのタイプの概要は、6.3.5.2項 「クローン」を参照してください。
クローンには、プリミティブまたはグループのいずれかを子リソースとして含めることができます。Hawk2では、クローンの作成中に子リソースを作成したり変更したりすることはできません。クローンを追加する前に、子リソースを作成し、必要に応じて設定しておいてください。詳細については、7.5.3項 「単純なリソースの追加」または7.5.7項 「クラスタリソースグループの追加」を参照してください。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。固有の
を入力します。リストから、クローンのサブリソースとして使用するプリミティブまたはグループを選択します。
必要に応じて、
を変更または追加します。をクリックして、設定を完了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
マルチステートリソースは、クローンが得意とするところです。これにより、インスタンスを2つの動作モード(active/passive
、primary/secondary
、またはmaster/slave
と呼ばれます)のいずれかに設定できます。マルチステートリソースは、グループまたは通常リソースを1つだけ含む必要があります。
リソースの監視または制約を設定する場合、マルチステートリソースには、単純なリソースとは異なる要件があります。詳細については、『Pacemaker Explained』(http://www.clusterlabs.org/doc/から入手可)を参照してください。特に、「Multi-state - Resources That Have Multiple Modes」のセクションを参照してください。
マルチステートリソースには、プリミティブまたはグループのいずれかを子リソースとして含めることができます。Hawk2では、マルチステートリソースの作成中に子リソースを作成したり変更したりすることはできません。マルチステートリソースを追加する前に、子リソースを作成し、必要に応じて設定しておいてください。詳細については、7.5.3項 「単純なリソースの追加」または7.5.7項 「クラスタリソースグループの追加」を参照してください。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。に固有のIDを入力します。
リストから、マルチステートリソースのサブリソースとして使用するプリミティブまたはグループを選択します。
必要に応じて、
を変更または追加します。をクリックして、設定を完了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
タグは、コロケーションの作成や関係の順序付けを行わずに、複数のリソースをただちに参照する方法です。タグを使用して、概念的に関連するリソースをグループ化できます。たとえば、データベースに関連する複数のリソースがある場合、関連するすべてのリソースをdatabase
という名前のタグに追加できます。
同じタグに属するすべてのリソースは、1つのコマンドで開始または停止できます。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。に固有のIDを入力します。
リストから、このタグで参照するリソースを選択します。
をクリックして、設定を完了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
High Availability Extensionは、ノードの障害を検出するだけではなく、ノードの個々のリソースで障害が発生した場合、そのことも検出します。リソースが実行中であるかどうか確認するには、そのリソースにリソースの監視を設定します。通常、リソースは動作中にのみ、クラスタによって監視されます。しかし、同時実行違反を検出するために、停止されるリソースの監視も設定する必要があります。リソースを監視するには、タイムアウト、開始遅延のいずれか、または両方と、間隔を指定します。間隔の指定によって、CRMにリソースステータスの確認頻度を指示します。start
またはstop
操作に対するtimeout
など、特定のパラメータも設定できます。
Hawk2にログインします。
https://HAWKSERVER:7630/
手順7.5「プリミティブリソースの追加」の説明に従ってリソースを追加するか、既存のプリミティブを選択して編集します。
Hawk2は、重要なstart
、stop
、monitor
)を自動的に表示し、デフォルト値を提案します。
提案された各値に属する属性を参照するには、マウスポインタをそれぞれの値に合わせます。
start
またはstop
操作に対して提案されたtimeout
の値を変更するには、次の手順に従います。
操作の隣のペンアイコンをクリックします。
表示されるダイアログで、timeout
パラメータに別の値(例: 10
)を入力し、変更内容を確認します。
monitor
操作に対して提案された の値を変更するには、次の手順に従います。
操作の隣のペンアイコンをクリックします。
表示されるダイアログで、interval
に対して監視間隔の別の値を入力します。
リソースが停止されている場合にリソース監視を設定するには、次の手順に従います。
下にある空のドロップダウンボックスから役割
項目を選択します。
[役割
]ドロップダウンボックスから、[Stopped (停止済み)
]を選択します。
をクリックし、変更内容を確認して操作のダイアログを閉じます。
リソース設定画面で変更内容を確認します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
リソースモニタが障害を検出した場合の処理については、6.4項 「リソース監視」を参照してください。
リソースの障害を表示するには、Hawk2で
画面に切り替えて、関係するリソースを選択します。 列で、下矢印アイコンをクリックして を選択します。表示されるダイアログに、リソースに対して実行された最近のアクションが一覧表示されます。障害は赤で表示されます。リソースの詳細を表示するには、 列で虫眼鏡アイコンをクリックします。すべてのリソースを設定したら、クラスタがそれらを扱う方法を指定します。リソース制約を使えば、リソースがどのクラスタノードで実行されるか、リソースをどの順番でロードするか、そして特定のリソース型のどのリソースに依存するかを指定することができます。
利用可能な制約のタイプの概要は、6.5.1項 「制約のタイプ」を参照してください。制約を定義する際には、スコアも指定する必要があります。スコアおよびクラスタでのそれらの意味の詳細については、6.5.2項 「スコアと無限大」を参照してください。
場所制約は、リソースを実行できるノード、実行に適したノード、または実行できないノードを決定します。たとえば、場所制約により、特定のデータベースに関連するすべてのリソースを同じノードに配置します。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。固有の
を入力します。のリストから、制約を定義するリソースを1つまたは複数選択します。
にスコアを入力します。スコアはこのリソース制約に割り当てる値を示します。正の値は、次のステップで指定する でリソースを実行できることを示します。負の値は、リソースをそのノードで実行すべきではないことを示します。スコアの高い制約は、それよりもスコアが低い制約より先に適用されます。
使用頻度の高い次の値は、ドロップダウンボックスからも設定できます。
ノードで強制的にリソースを実行するには、矢印アイコンをクリックして常に
を選択します。これにより、スコアはINFINITY
に設定されます。
ノードでリソースを実行しない場合、矢印アイコンをクリックしてNever (実行しない)
を選択します。これにより、スコアは-INFINITY
に設定され、リソースはそのノードで実行してはならないことになります。
スコアを0
に設定するには、矢印アイコンをクリックしてAdvisory (推奨値)
を選択します。これにより制約が無効になります。これは、リソース検出を設定してもリソースを制約したくない場合に便利です。
を選択します。
をクリックして、設定を完了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
コロケーション制約は、ノード上で一緒に実行可能な、または一緒に実行することが禁止されているリソースをクラスタに伝えます。コロケーション制約はリソース間の依存関係を定義するため、コロケーション制約を作成するには、少なくとも2つのリソースが必要です。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。固有の
を入力します。にスコアを入力します。スコアは複数のリソースの場所の関係を決定します。正の値は、リソースを同じノードで実行しなければならないことを示します。負の値は、リソースを同じノードで実行するべきではないことを示します。スコアと他の要因との組み合わせによって、ノードの配置先が決定します。
使用頻度の高い次の値は、ドロップダウンボックスからも設定できます。
リソースを強制的に同じノードで実行する場合、矢印アイコンをクリックしてAlways (常に実行する)
を選択します。これにより、スコアはINFINITY
に設定されます。
リソースを同じノードで実行しない場合、矢印アイコンをクリックしてNever (実行しない)
を選択します。これにより、スコアは-INFINITY
に設定され、リソースは同じノードで実行してはならないことになります。
制約のリソースを定義するには、次の手順に従います。
カテゴリのドロップダウンボックスから、リソース(またはテンプレート)を選択します。
リソースが追加され、下に新しい空のドロップダウンボックスが表示されます。
この手順を繰り返してリソースを追加します。
最上位のリソースは次のリソースなど順に依存するため、クラスタはまず最後のリソースを置く場所を決め、次にその決定に基づいて依存するものを配置していきます。制約が満たされないと、クラスタは依存するリソースが実行しないようにすることがあります。
コロケーション制約内のリソースの順序を入れ替えるには、リソースの横にある上矢印アイコンをクリックして、その上のエントリと入れ替えます。
必要に応じて、各リソースの他のパラメータ(Started (開始)
、Stopped (停止)
、Master (マスタ)
、Slave (スレーブ)
、Promote (昇格)
、Demote (降格)
など)を指定します。リソースの横にある空のドロップダウンリストをクリックして、目的のエントリを選択します。
をクリックして、設定を完了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
順序制約は、リソースを開始および停止する順序を定義します。順序制約はリソース間の依存関係を定義するため、順序制約を作成するには、少なくとも2つのリソースを作成する必要があります。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
› の順に選択します。固有の
を入力します。にスコアを入力します。スコアがゼロより大きい場合、順序制約は必須になりますが、そうでない場合はオプションです。
使用頻度の高い次の値は、ドロップダウンボックスからも設定できます。
順序制約を必須にする場合、矢印アイコンをクリックしてMandatory (必須)
を選択します。
順序制約を提案にとどめる場合は、矢印アイコンをクリックしてOptional (オプション)
を選択します。
Serialize (順番に処理)
: リソースに対して2つの停止/開始アクションが同時に実行されないようにするには、矢印アイコンをクリックしてSerialize (順番に処理)
を選択します。これにより、1つのリソースの開始が完了しないと他のリソースを開始できなくなります。通常は、起動時にホストに高い負荷をかけるリソースに使用します。
順序の制約の場合、オプション
は常に有効にしていてください。これは、リソースを停止するときには逆順で行うという指定です。制約のリソースを定義するには、次の手順に従います。
カテゴリのドロップダウンボックスから、リソース(またはテンプレート)を選択します。
リソースが追加され、下に新しい空のドロップダウンボックスが表示されます。
この手順を繰り返してリソースを追加します。
リソースは、最初に最上位のリソース、次に2番目のリソースという順序で開始されます。通常、リソースを停止するときには逆順で行われます。
順序制約内のリソースの順序を入れ替えるには、リソースの横にある上矢印アイコンをクリックして、その上のエントリと入れ替えます。
必要に応じて、各リソースの他のパラメータ(Started (開始)
、Stopped (停止)
、Master (マスタ)
、Slave (スレーブ)
、Promote (昇格)
、Demote (降格)
など)を指定します。リソースの横にある空のドロップダウンリストをクリックして、目的のエントリを選択します。
変更を確認して、設定を完了します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
制約を定義するための別のフォーマットとして、リソースセットを使用することができます。これらは、グループと同じ意味論に従います。
場所制約内でリソースセットを使用するには:
手順7.14「場所制約の追加」の説明に従って操作を進めます。ただし、ステップ 4は除きます。1つのリソースを選択する代わりに、CtrlまたはShiftを押しながらマウスをクリックして、複数のリソースを選択します。これにより、場所制約内でリソースセットが作成されます。
場所制約からリソースを削除するには、Ctrlを押しながらリソースを再度クリックして、選択解除します。
コロケーションまたは順序の制約内でリソースセットを使用するには:
手順7.15「コロケーション制約の追加」または手順7.16「順序制約の追加」の説明に従います。ただし、制約に対してリソースを定義する手順(ステップ 5.aまたはステップ 6.a)は除きます。
複数のリソースを追加します。
リソースセットを作成するため、リソースの横にあるチェーンアイコンをクリックして、そのリソースを上のリソースにリンクします。リソースセットは、セットに属しているリソースの周囲のフレームによって示されます。
リソースセット内の複数のリソースを結合したり、複数のリソースセットを作成したりできます。
上のリソースからリソースをリンク解除するには、そのリソースの横にあるハサミアイコンをクリックします。
変更を確認して、制約の設定を完了します。
制約の設定の詳細や、順序およびコロケーションの基本的な概念についての詳細なバックグラウンド情報は、http://www.clusterlabs.org/doc/で提供されているドキュメントを参照してください。
『Pacemaker Explained』の「Resource Constraints」の章
『Colocation Explained』
『オーダーの概要』
リソースに障害が発生すると、自動的に再起動されます。現在のノードで再起動できない場合、または現在のノードでN回失敗した場合は、別のノードへのフェールオーバーが試行されます。新しいノードへのマイグレートを行う基準(migration-threshold
)となるリソースの失敗をいくつか定義できます。クラスタ内に3つ以上ノードがある場合、特定のリソースのフェールオーバー先のノードはHigh Availabilityソフトウェアにより選択されます。
リソースがフェールオーバーする特定のノードを前もって指定するには、次の手順に従います。
Hawk2にログインします。
https://HAWKSERVER:7630/
手順7.14「場所制約の追加」に記されている手順に従って、そのリソースの場所の制約を設定します。
手順 7.7: パラメータ、操作、またはメタ属性の変更、ステップ 4に説明されている手順に従ってリソースにmigration-threshold
メタ属性を追加し、migration-thresholdの値を入力します。INFINITYではない正の値を指定する必要があります。
リソースの失敗回数を自動的に失効させる場合は、手順 7.5: プリミティブリソースの追加、ステップ 4に説明されている手順に従ってfailure-timeout
メタ属性をそのリソースに追加し、failure-timeout
の を入力します。
リソースの初期設定として、追加のフェールオーバーノードを指定する場合は、追加の場所の制約を作成します。
マイグレーションしきい値と失敗カウントに関連したプロセスフローは、例6.8「マイグレーションしきい値 - プロセスフロー」に示されています。
リソースの失敗回数は、自動的に期限切れにする代わりに、いつでも、手動でクリーンアップすることもできます。詳細については、7.7.3項 「リソースのクリーンアップ」を参照してください。
ノードがオンライン状態に戻り、クラスタ内にある場合は、リソースが元のノードにフェールバックすることがあります。このことを防ぐ、またはリソースのフェールバック先として別のノードを指定するには、リソースの固着性の値を変更します。リソースの固着性は、リソースを作成するとき、または作成した後のどちらでも指定できます。
さまざまなリソース固着性値の意味については、6.5.5項 「フェールバックノード」を参照してください。
Hawk2にログインします。
https://HAWKSERVER:7630/
手順 7.7: パラメータ、操作、またはメタ属性の変更、ステップ 4に従って、resource-stickiness
メタ属性をリソースに追加します。
resource-stickiness
として、-INFINITY
とINFINITY
の間の値を指定します。
すべてのリソースが同等ではありません。Xenゲストなどの一部のリソースでは、そのホストであるノードがリソースの容量要件を満たす必要があります。配置したリソースの要件の合計が提供容量よりも大きくなった場合には、リソースのパフォーマンスが低下するか、または失敗します。
これを考慮に入れて、High Availability Extensionでは、次のパラメータを指定できます。
一定のノードが提供する容量
一定のリソースが要求する容量
リソースの配置に関する全体的なストラテジ
詳細と設定例については、6.5.6項 「負荷インパクトに基づくリソースの配置」を参照してください。
使用属性は、リソースの要件と、ノードが提供する容量の両方を設定するために使用されます。リソースが要求する容量を設定するには、その前にノードの容量を設定する必要があります。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。タブで、容量を設定するノードを選択します。
列で、下矢印アイコンをクリックして を選択します。
画面が開きます。
の下で、使用属性の名前を空のドロップダウンボックスに入力します。
名前は任意です(RAM_in_GB
など)。
属性を追加するには、
アイコンをクリックします。属性の隣の空のテキストボックスに、属性値を入力します。値は整数にする必要があります。
必要なだけ使用属性を追加し、これらの属性すべての値を追加します。
変更内容を確認します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
プリミティブリソースを作成するときや、既存のプリミティブリソースを編集するときに、特定のリソースがノードに要求する容量を設定します。
リソースに使用属性を追加する前に、手順 7.20で説明するように、クラスタノードの使用属性を設定しておく必要があります。
Hawk2にログインします。
https://HAWKSERVER:7630/
既存のリソースに使用属性を追加する場合: 7.7.1項 「リソースとグループの編集」に示すように、 › の順に移動して、[リソース設定]ダイアログを開きます。
新しいリソースを作成する場合: 7.5.3項 「単純なリソースの追加」に示すように、 › の順に移動して進みます。
[リソース設定]ダイアログで、
カテゴリに移動します。空のドロップダウンボックスから、手順 7.20でノードに対して設定した使用属性のいずれかを選択します。
属性の隣の空のテキストボックスに、属性値を入力します。値は整数にする必要があります。
必要なだけ使用属性を追加し、これらの属性すべての値を追加します。
変更内容を確認します。画面上部に、アクションが成功したかどうかを示すメッセージが表示されます。
ノードが提供する容量とリソースが要求する容量を設定してから、配置ストラテジをグローバルクラスタオプションに設定します。そうしないと、容量設定は有効になりません。負荷のスケジュールに使用できるストラテジがいくつかあります。たとえば、負荷をできるだけ少ない数のノードに集中したり、使用可能なすべてのノードに均等に分散できます。詳細については、6.5.6項 「負荷インパクトに基づくリソースの配置」を参照してください。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択し、各画面を開きます。グローバルクラスタオプション、およびリソースと操作のデフォルトが表示されます。
画面上部にある空のドロップダウンボックスから、placement-strategy
を選択します。
デフォルトでは、その値は
に設定され、使用属性と値が考慮されていないことを意味します。要件に応じて、
を適切な値に設定します。変更内容を確認します。
Hawk2では、クラスタリソースを設定することに加えて、7.8.1項 「単一クラスタの監視」を参照してください。
画面で既存のリソースを管理することができます。この画面の概要については、既存のリソースを編集する必要がある場合は、
画面に移動します。 列で、変更したいリソースまたはグループの横にある下矢印アイコンをクリックして を選択します。編集画面が表示されます。プリミティブリソースを編集する場合は、次の操作が使用できます。
リソースのコピー。
リソースの名前変更 (そのIDの変更)。
リソースの削除。
グループを編集する場合は、次の操作が使用できます。
このグループに追加される新しいプリミティブの作成。
グループの名前変更 (そのIDの変更)。
グループメンバーを再ソートするには、右側の「ハンドル」アイコンを使用して、メンバーを目的の順序にドラッグアンドドロップします。
クラスタリソースは、起動する前に、正しく設定されているようにします。たとえば、Apacheサーバをクラスタリソースとして使用する場合は、まず、Apacheサーバを設定します。クラスタでそれぞれのリソースを開始する前に、Apache設定を完了します。
High Availability Extensionでリソースを管理しているときに、リソースを他の方法(クラスタ外で、たとえば、手動、ブート、再起動など)で開始したり、停止したりしてはなりません。High Availability Extensionソフトウェアが、すべてのサービスの開始または停止アクションを実行します。
ただし、サービスが適切に構成されているか確認したい場合は手動で開始しますが、High Availabilityが起動する前に停止してください。
現在クラスタで管理されているリソースへの介入については、まず、リソースをmaintenance mode
に設定します。詳細については、手順16.5「リソースをHawk2を使用して保守モードにする」を参照してください。
Hawk2でリソースを作成するときには、target-role
メタ属性でその初期状態を設定することができます。その値をstopped
に設定した場合、リソースは、作成後、自動的に開始することはありません。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。 のリストには も表示されます。開始するリソースを選択し、その
列で アイコンをクリックします。継続するには、表示されるメッセージに対して確認します。リソースが開始すると、Hawk2はすぐにリソースの
を緑に変え、それがどのノードで実行されているかを表示します。リソースは、失敗した場合は自動的に再起動しますが、失敗のたびにリソースの失敗回数が増加します。
リソースに対してmigration-threshold
が設定されていた場合、失敗回数が移行しきい値に達すると、そのリソースはそのノードでは実行されなくなります。
リソースの失敗回数は、(リソースにfailure-timeout
オプションを設定することにより)自動的にリセットするか、または次に示すように手動でリセットできます。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。 のリストには も表示されます。クリーンアップするリソースに移動します。
列で、下矢印ボタンをクリックして を選択します。継続するには、表示されるメッセージに対して確認します。
これにより、コマンドcrm resource cleanup
が実行され、すべてのノードでリソースがクリーンアップされます。
リソースをクラスタから削除する必要がある場合は、次の手順に従って、設定エラーが発生しないようにします。
Hawk2にログインします。
https://HAWKSERVER:7630/
手順7.24「リソースをクリーンアップする」の説明に従って、すべてのノードでリソースをクリーンアップします。
リソースを停止します。
左のナビゲーションバーで、
を選択します。 のリストには も表示されます。列で、リソースの横にある ボタンをクリックします。
継続するには、表示されるメッセージに対して確認します。
リソースが停止すると、
列に変更が反映されます。リソースを削除します。
左のナビゲーションバーで、
を選択します。のリストで、それぞれのリソースに移動します。 列で、リソースの横にある アイコンをクリックします。
継続するには、表示されるメッセージに対して確認します。
7.6.6項 「リソースフェールオーバーノードの指定」で説明したように、ソフトウェアまたはハードウェアの障害時には、クラスタは定義可能な特定のパラメータ(たとえばマイグレーションしきい値やリソースの固着性など)に従って、リソースを自動的にフェールオーバー(マイグレート)させます。クラスタ内の別のノードにリソースを手動で移行させることもできます。または、リソースを現在のノードから出すかはユーザが判断し、どこに移動するかはクラスタに判断させます。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。 のリストには も表示されます。のリストで、それぞれのリソースを選択します。
列で、下矢印ボタンをクリックして を選択します。
開くウィンドウには、次の選択肢があります。
-INFINITY
スコアによる場所の制約が作成されます。
または、別のノードにリソースを移動できます。これによって移動先ノードに対してINFINITY
スコアの場所の制約が作成されます。
選択内容を確認します。
リソースを再び元に戻すには、次の手順に従います。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。 のリストには も表示されます。のリストで、それぞれのリソースに移動します。
列で、下矢印ボタンをクリックして を選択します。継続するには、表示されるメッセージに対して確認します。
これによって、crm_resource
-U
コマンドが使用されます。リソースは元の場所に戻ることができます。あるいは現在の場所に残ることもあります(リソースの固着性によって)。
詳細については、http://www.clusterlabs.org/doc/から入手できる『Pacemaker Explained』を参照してください。特に、「Resource Migration」のセクションを参照してください。
Hawk2には、単一のクラスタおよび複数のクラスタを監視するための異なる画面があります:
画面と 画面。単一クラスタを監視するには、
画面を使用します。Hawk2にログインした後で、 画面がデフォルトで表示されます。右上隅のアイコンに、クラスタの状態の概要が表示されます。詳細情報を参照する場合は、次のカテゴリを確認します。エラーが発生した場合、ページの上部に表示されます。
設定されているリソースが表示されます。その
、 (ID)、 (リソースが実行されているノード)、リソースエージェントの が含まれます。 列で、リソースを開始または停止するか、いくつかのアクションをトリガーするか、詳を表示できます。トリガ可能なアクションには、保守モードへのリソースの設定(または保守モードの削除)、リソースの別のノードへの移行、リソースのクリーンアップ、リソースイベントの表示、またはリソースの編集が含まれます。
ログイン先のクラスタサイトに属するノードが表示されます。ノードのmaintenance
またはstandby
フラグを設定または解除できます。 列で、ノードの最新イベントや詳細情報を参照できます。たとえば、それぞれのノードにutilization
、standby
、またはmaintenance
のどの属性が設定されているかを参照できます。
Geoクラスタリングでの使用向けにチケットを設定した場合にのみ表示されます。
複数のクラスタを監視するには、Hawk2 D.2項 「パスワード不要のSSHアカウントの設定」を参照してください。ただし、Hawk2を実行するマシンは、その目的のためにクラスタの一部である必要はなく、別個の無関係のシステムで構いません。
を使用します。 画面に表示されるクラスタ情報は、サーバ側に保管されています。これらは、クラスタノード間で同期が取られています(クラスタノード間にパスワード不要のSSHアクセスが設定されている場合)。詳細については、Hawk2で複数のクラスタを監視するには、一般的なHawk2の要件に加え、次の前提条件も満たす必要があります。
Hawk5のSUSE Linux Enterprise High Availability Extension 12 SP2を実行している必要があります。
で監視するすべてのクラスタでは、すべてのクラスタノードにあるHawk2の自己署名証明書を独自の証明書(または公式認証局によって署名された証明書)で置き換えていない場合は、「すべての」クラスタの「すべての」ノードで、少なくとも1回はHawk2にログインします。証明書を検証します(または、ブラウザで例外を追加して警告をスキップします)。そうしない場合、Hawk2はクラスタに接続できません。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。Hawk2は、現在のクラスタサイトのリソースおよびノードに関する概要を表示します。また、Geoクラスタでの使用向けに設定された
を表示します。このビューで使用されているアイコンについての情報が必要な場合は、 をクリックします。リソースIDを検索するには、 テキストボックスに名前(ID)を入力します。特定のノードのみを表示するには、フィルタアイコンをクリックしてフィルタリングオプションを選択します。amsterdam
) #複数のクラスタにダッシュボードを追加するには、以下の操作を行います。
をクリックします。
berlin
です。
いずれかのノードの完全修飾ホスト名を、2つ目のクラスタに入力します。たとえば、charlie
です。
をクリックします。新たに追加されたクラスタサイトに対して、Hawk2は2つ目のタブにノードやリソースの概要を表示します。
パスワードを入力してノードにログインすることを求めるプロンプトが表示された場合、このノードにはまだ接続したことがなく、自己署名証明書を置き換えていない状態です。そのような場合は、パスワードを入力しても、接続は次のメッセージを表示して失敗します。
Error connecting to server. Retrying every 5 seconds...
続行するには、自己署名証明書の置き換えを参照してください。
クラスタサイトやその管理に関する詳細を参照するには、サイトのタブに切り替えてチェーンアイコンをクリックします。
Hawk2はこのサイトの
ビューを新しいブラウザウィンドウかタブに表示します。この部分のGeoクラスタをそこから管理できます。
ダッシュボードからクラスタを削除するには、クラスタの詳細の右側にあるx
アイコンをクリックします。
Hawk2は、「クラスタシミュレータ」を含む。これは次の操作に使用できます。
を提供します各変更を直ちに反映させるのではなく、クラスタに変更をステージングして、それらの変更を単一トランザクションとして適用する。
たとえば、潜在的な障害シナリオを調べるため、変更やクラスタイベントをシュミレートする。
たとえば、互いに依存するリソースのグループを作成する場合にバッチモードを使用できます。バッチモードを使用すると、クラスタに中間的なまたは不完全な設定を適用することを回避できます。
バッチモードが有効な間は、リソースや制約を追加したり編集したり、クラスタ設定を変更できます。ノードのオンラインまたはオフライン化、リソース操作およびチケットの許可または取り消しなど、クラスタのイベントをシミュレートすることもできます。詳細については、手順7.30「ノード、リソース、またはチケットイベントの挿入」を参照してください。
「クラスタシミュレータ」は、すべての変更後に自動的に実行され、ユーザインタフェースに予想される結果を表示します。たとえば、次のような場合もあります。バッチモードの最中にリソースを止めると、実際リソースはまだ実行中であるにも関わらず、ユーザインタフェースにはリソースが停止したと表示されます。
一部のウィザードには単なるクラスタ設定を超えるアクションが含まれます。これらのウィザードをバッチモードで使用する場合、クラスタ設定を超えるすべての変更がライブシステムに直ちに適用されます。
したがって、root
許可が必要なウィザードはバッチモードでは実行できません。
Hawk2にログインします。
https://HAWKSERVER:7630/
バッチモードを有効にするには、最上位の行から
を選択します。最上位の行の下に追加のバーが表示されます。これは、バッチモードがアクティブであることを示し、バッチモードで実行可能なアクションへのリンクが含まれます。
バッチモードがアクティブなときに、リソースや制約の追加または編集、あるいはクラスタ設定の編集など、クラスタに対する変更を実行します。
変更はシミュレートされ、すべての画面に表示されます。
行った変更の詳細を表示するには、バッチモードバーから
を選択します。 ウィンドウが開きます。
設定の変更について、ライブ状態とシミュレートされた変更間の相違がcrmsh構文で表示されます。-
文字で開始される行は、現在の状態を表し、+
で開始される行は、提案される状態を示します。
イベントを注入したり、さらに詳細を表示する場合は、手順 7.30を参照してください。または、 をクリックしてウィンドウを閉じます。
シミュレートした変更を
または するかのいずれかを選択し、選択内容を確認します。これによりバッチモードが無効になり、通常のモードに戻ります。バッチモードで実行中に、Hawk2では
と を注入することもできます。ノードの状態を変更できます。使用可能な状態は、
、 、および です。
リソースの一部のプロパティを変更できます。たとえば、操作(start
、stop
、monitor
など)、その操作を適用するノード、およびシミュレートされる予想される結果を設定できます。
(Geoクラスタにおける)チケットの許可と取り消しの影響をテストできます。
Hawk2にログインします。
https://HAWKSERVER:7630/
バッチモードがまだアクティブでない場合、最上位の行で
をクリックして、バッチモードに切り替えます。バッチモードバーで、
をクリックして、 ウィンドウを開きます。ノードのステータスの変更をシミュレートするには
› を順にクリックします。
操作する
を選択し、そのターゲット を選択します。変更内容を確認します。イベントは
ダイアログに一覧表示されるイベントのキューに追加されます。リソースの操作をシミュレートするには
› を順にクリックします。
操作する
を選択し、シミュレートする を選択します。必要に応じて、
を定義します。操作を実行する
を選択し、ターゲットとする を選択します。イベントは ダイアログに一覧表示されるイベントのキューに追加されます。変更内容を確認します。
チケットアクションをシミュレートするには
› を順にクリックします。
操作する
を選択し、シミュレートする を選択します。変更内容を確認します。イベントは
ダイアログに一覧表示されるイベントのキューに追加されます。図 7.18)で、注入されたイベントごとに新しい行が表示されます。ここに一覧表示されるイベントは、直ちにシミュレートされ、 画面に反映されます。
ダイアログ(設定の変更も行った場合は、ライブ状態とシミュレートされた変更の間の相違が注入されたイベントの下に表示されます。
注入されたイベントを削除するには、その隣の
アイコンをクリックします。Hawk2では、それに従って 画面が更新されます。実行されたシミュレーションに関する詳細を表示するには、
をクリックして、次のいずれかを選択します。詳細な概要を表示します。
では、初期のCIB状態を示します。 では、遷移後のCIBの状態を示します。
遷移のグラフィカルな表現を示します。
遷移のXML表示を示します。
シミュレートされた変更を確認したら、
ウィンドウを閉じます。バッチモードを終了するには、シミュレートされた変更を
するか、 するかのいずれかを選択します。Hawk2には、クラスタの過去のイベントを表示する、次のような機能があります(いくつかの詳細さのレベルがあります)。
左のナビゲーションバーから
を選択して、 にアクセスします。 では、詳細なクラスタレポートを作成し、遷移情報を表示できます。次のオプションが表示されます。
特定の時刻のクラスタレポートを作成します。Hawk2では、crm report
コマンドをコールして、レポートを生成します。
crmシェルで直接作成したか、異なるクラスタ上で作成したcrm report
アーカイブをアップロードできます。
レポートを生成するか、アップロードした後で、これらのレポートは
の下に表示されます。レポートのリストから、レポートの詳細を表示したり、レポートをダウンロードしたり、削除したりできます。Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。ビューに 画面が開きます。デフォルトでは、レポートの提案される時間フレームは最後の時刻です。
クラスタレポートを作成するには
レポートを直ちに開始するには、
をクリックします。レポートの時間フレームを変更するには、提案される時間フレームの任意の場所をクリックし、ドロップダウンボックスから別のオプションを選択します。
開始日、終了日、および時間をそれぞれ入力することもできます。レポートを開始するには、 をクリックします。レポートを終了した後で、そのレポートが
の下に表示されます。
クラスタレポートをアップロードするには、Hawk2でアクセス可能なファイルシステム上にcrm report
アーカイブがある必要があります。次の手順に従います。
タブに切り替えます。
クラスタレポートアーカイブを
し、 をクリックします。レポートがアップロードされると、そのレポートが
の下に表示されます。レポートをダウンロードまたは削除するには、
列のレポートの横の各アイコンをクリックします。履歴エクスプローラーのレポート詳細を表示するには、レポートの名前をクリックするか、 列から を選択します。
ボタンをクリックして、レポートのリストに戻ります。
各遷移ごとに、クラスタはポリシーエンジン(PE)への入力として提供される状態のコピーを保存します。このアーカイブがログ記録されるパス。すべてのpe-input*
ファイルが指定コーディネータ(DC)上に生成されます。DCはクラスタ内で変更可能なため、いくつかのノードからのpe-input*
ファイルがある場合があります。すべてのpe-input*
ファイルにPEの実行「予定」の内容が表示されます。
Hawk2では、各pe-input*
ファイルの名前とそれが作成された時刻とノードを表示できます。また、 では、それぞれのpe-input*
ファイルに基づいて、次の詳細をビジュアル化できます。
遷移に属するログインデータのスニペットを表示します。次のコマンドの出力を表示します(リソースエージェントのログメッセージを含む)。
crm history transition peinput
pe-input*
ファイルが作成された時刻でクラスタ設定を表示します。
選択したpe-input*
ファイルと次のファイル間の設定とステータスの相違を表示します。
遷移に属するログインデータのスニペットを表示します。次のコマンドの出力を表示します。
crm history transition log peinput
これには、pengine
、crmd
、およびlrmd
からの詳細が含まれます。
遷移のグラフィカルな表現を示します。pe-input*
ファイルを使用して) PEが再度呼び出され、遷移のグラフィカルな表現が生成されます。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。レポートがすでに生成またはアップロードされている場合は、これらのレポートが手順 7.31で説明されるように、レポートを生成またはアップロードします。
のリストに表示されます。そうでない場合は、レポート名をクリックするか、履歴エクスプローラーのレポート詳細を開きます。
列から を選択して、遷移詳細にアクセスするには、下に示す遷移タイムラインの遷移ポイントを選択する必要があります。
および アイコンをおよび および アイコンを使用して、興味ある遷移を探します。
pe-input*
ファイルの名前、それが作成された時刻およびノードを表示するには、タイムラインの遷移ポイント上でマウスポインタを合わせます。
履歴エクスプローラーでの遷移詳細を表示するには、さらに知りたい遷移ポイントをクリックします。
履歴エクスプローラーでの遷移詳細で説明されるように、コンテンツを表示するには、各ボタンをクリックします。
、 、 、 または を表示するには、レポートのリストに戻るには、
ボタンをクリックします。
Hawk2は、クラスタの検査と問題点の検出を行うウィザードを提供します。分析が完了すると、Hawk2は詳細なクラスタレポートを作成します。Hawk2によるクラスタヘルスの確認とレポートの生成には、ノード間のパスワード不要のSSHアクセスが必要です。ない場合は、現在のノードのデータのみを収集します。ha-cluster-bootstrap
パッケージが提供するブートストラップスクリプトでクラスタを設定した場合、パスワード不要のSSHアクセスは既に設定されています。手動で設定する必要がある場合は、D.2項 「パスワード不要のSSHアカウントの設定」を参照してください。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーから、
を選択します。カテゴリを展開します。
ウィザードを選択します。
を選択して確認します。
クラスタのルートパスワードを入力して、
をクリックします。Hawk2がレポートを生成します。クラスタリソースを設定および管理するには、crmシェル(crmsh)コマンドラインユーティリティ、HA Web Konsole (Hawk2)、Webベースユーザインタフェースのいずれかを使用します。
この章では、crm
コマンドラインツールを紹介し、このツールの概要、テンプレートの使用方法、そして、主にクラスタリソースの設定と管理(基本的なリソースと高度なリソース(グループとクローン)の作成、制約の設定、フェールオーバーノードとフェールバックノードの指定、リソース監視の設定、リソースの開始、クリーンアップ、または削除、および手動によるリソースの移行について説明します。
クラスタを管理するには十分な権限が必要です。crm
コマンドおよびそのサブコマンドは、root
ユーザとして、またはCRM所有者ユーザとして実行される必要があります(通常はhacluster
ユーザ)。
ただし、user
オプションを使用することで、crm
とそのサブコマンドを一般(権限のない)ユーザとして実行し、必要な場合はいつでもsudo
を使用してIDを変更できます。 たとえば、次のcrm
コマンドは、権限のあるユーザIDとしてhacluster
を使用します。
root #
crm
options user hacluster
/etc/sudoers
を設定しておいて、sudo
がパスワードを要求しないようにしておく必要があることに注意してください。
crm
コマンドには、リソース、CIB、ノード、リソースエージェントなどを管理するサブコマンドがあります。このコマンドには、例を組み込んだ詳細なヘルプシステムが用意されています。すべての例は、付録Bで説明される命名規則に従います。
crmを引数なしで(または1つのサブレベルのみを引数として)使用することにより、crmシェルは対話モードになります。このモードは、次のプロンプトで示されます。
crm(live/HOSTNAME)
読みやすくするために、このマニュアルでは対話型crmのプロンプトでホスト名を省略します。次の例のように、aliceなどの特定のノードで対話型シェルを実行する必要がある場合にのみホスト名を含めます。
crm(live/alice)
ヘルプには複数の方法でアクセスできます。
crm
とそのコマンドラインオプションの使用方法を出力するには:
root #
crm
--help
使用可能なすべてのコマンドの一覧を表示するには:
root #
crm
help
コマンドの参照情報だけでなく、他のヘルプセクションにアクセスするには:
root #
crm
help topics
configure
サブコマンドの詳細なヘルプテキストを表示するには:
root #
crm
configure help
configure
のgroup
サブコマンドの構文、使用方法、例を印刷するには:
root #
crm
configure help group
これも同様です:
root #
crm
help configure group
help
サブコマンド(--help
オプションと混同しないこと)のほとんどすべての出力によって、テキストビューアが開きます。このテキストビューアは上下にスクロール可能で、ヘルプテキストが読みやすくなっています。テキストビューアを閉じるには、Qキーを押します。
crmshは、対話型シェルに対してだけではなく、バッシュでの直接的で完全なタブ補完機能をサポートしています。たとえば、「crm help config
<Tab>」と入力してを押すと、対話型シェルと同様に単語が補完されます。
crm
コマンドそのものは、次のように使用できます。
直接:
すべてのサブコマンドをcrm
に続け、Enterを押すと、ただちにその出力が表示されます。たとえば、crm
help ra
を入力すると、ra
サブコマンド(リソースエージェント)に関する情報を取得できます。
サブコマンドは、その短縮形が固有である限り短縮できます。たとえば、status
をst
と短縮しても、crmshにはユーザが意図したサブコマンドとして認識されます。
パラメータを短縮する機能もあります。通常、パラメータはparams
キーワードを使用して追加します。paramsセクションが最初のセクションでほかにセクションがない場合、このセクションを省略できます。たとえば、次のような行があるとします。
root #
crm
primitive ipaddr ocf:heartbeat:IPaddr2 params ip=192.168.0.55
これは次の行と同等です。
root #
crm
primitive ipaddr ocf:heartbeat:IPaddr2 ip=192.168.0.55
crmシェルスクリプトとして使用:
Crmシェルスクリプトにはcrm
のサブコマンドが含まれます。詳細については、8.1.4項 「crmshのシェルスクリプトの使用」を参照してください。
crmshクラスタスクリプトとして使用: これらは、メタデータ、RPMパッケージへの参照、設定ファイル、およびcrmshサブコマンドを1つのわかりやすい名前でバンドルしてまとめたものです。crm script
コマンドを使用して管理します。
これらをcrmshシェルスクリプトと混同しないでください。両方に共通する目的はいくつかありますが、crmシェルスクリプトにはサブコマンドのみが含まれるのに対し、クラスタスクリプトにはコマンドの単純なエミュレーション以上の処理が組み込まれています。詳細については、8.1.5項 「crmshのクラスタスクリプトの使用」を参照してください。
内部シェルとして対話式に使用:
「crm
」とタイプして、内部シェルに入ります。プロンプトがcrm(live)
に変化します。help
を使用すると、利用可能なサブコマンドの概要を取得できます。内部シェルにはさまざまなサブコマンドレベルがあり、1つのサブコマンドをタイプしてEnterを押すことで、そのサブコマンドのレベルに「入る」ことができます。
たとえば、「resource
」とタイプすると、リソース管理レベルに入ります。プロンプトはcrm(live)resource#
に変わります。内部シェルを終了したい場合は、コマンドquit
、bye
、またはexit
を使用します。1レベル戻る場合は、back
、up
、end
、またはcd
を使用します。
crm
、そしてオプションを付けずにサブコマンドを入力してEnterを押すと、そのレベルに直接入ることができます。
内部シェルは、サブコマンドとリソースのタブによる完了もサポートします。コマンドの冒頭をタイプして<Tab>を押すと、crm
がそのオブジェクトを完了します。
すでに説明した方法に加えて、crmshは、同期コマンド実行もサポートしています。これを有効にするには、-w
オプションを使用します。crm
を-w
なしで起動した場合でも、後ほどユーザ初期設定のwait
をyes
に設定すれば(options wait yes
)、有効にすることができます。このオプションが有効化される場合、crm
は遷移が終了するまで待機します。処理が開始すると毎回、進行状況を示すための点が印刷されます。同期コマンドの実行はresource start
などのコマンドにのみ適用できます。
crm
ツールには管理機能(サブコマンドresources
およびnode
)があり、設定に使用できます(cib
、configure
)。
以降のサブセクションでは、crm
ツールの重要な側面について、その概要を示します。
リソースエージェントはクラスタ設定で常に操作する必要があるため、crm
ツールには、ra
コマンドが含まれています。このコマンドを使用して、リソースエージェントの情報を表示し、リソースエージェントを管理します(詳細は6.3.2項 「サポートされるリソースエージェントクラス」も参照)。
root #
crm
racrm(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
」を入力すれば済みます。
crmshシェルスクリプトは、crmshサブコマンドをファイル内に列挙する便利な方法を提供します。これにより、特定の行をコメントしたり、これらのコメントを後で再生したりするのが簡単になります。crmshシェルスクリプトには「crmshサブコマンドのみ」を含めることができることに注意してください。他のコマンドは許可されていません。
crmshシェルスクリプトを使用するには、その前に特定のコマンドを使用してファイルを作成してください。たとえば、次のファイルにはクラスタのステータスが出力され、すべてのノードのリストが提供されます。
# A small example file with some crm subcommandsstatus
node
list
ハッシュ記号(#
)で始まる行はコメントなので、無視されます。行が長すぎる場合は、行末にバックスラッシュ(\
)を挿入します。可読性を向上させるため、特定のサブコマンドに属する行をインデントすることをお勧めします。
このスクリプトを使用するには、次の方法のいずれかを使用します。
root #
crm
-f example.cliroot #
crm
< example.cli
すべてのクラスタノードから情報を収集して変更をすべて展開することは、鍵となるクラスタ管理タスクです。複数のノードで同じ手順を手動で実行するのはミスを起こしがちであるため、代わりにcrmshクラスタスクリプトを使用できます。
これらを「crmshシェルスクリプト」と混同しないでください(8.1.4項 「crmshのシェルスクリプトの使用」で説明)。
crmshシェルスクリプトとは対照的に、クラスタスクリプトでは次のような追加のタスクを実行します。
特定のタスクに必要なソフトウェアをインストールする。
設定ファイルを作成または変更する。
情報を収集し、クラスタの潜在的な問題をレポートする。
変更をすべてのノードに展開する。
crmshクラスタスクリプトは、他のクラスタ管理ツールを置き換えるものではなく、クラスタ全体に対して統合化された方法でこれらのタスクを実行できるようにします。詳細については、http://crmsh.github.io/scripts/を参照してください。
利用可能なすべてのクラスタのリストを取得するには、次のコマンドを実行します。
root #
crm
script list
スクリプトのコンポーネントを表示するには、show
コマンドと、クラスタスクリプトの名前を使用します。次に例を示します。
root #
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 | 指定したユーザとしてスクリプトを実行します。 |
問題を避けるため、クラスタスクリプトを実行する前に、実行するアクションを確認してパラメータを検証します。クラスタスクリプトは一連のアクションを実行でき、さまざまな理由で失敗する可能性があります。そのため、実行前にパラメータを検証すると、問題の回避に役立ちます。
たとえば、mailto
リソースエージェントでは、固有の識別子と電子メールアドレスが必要です。これらのパラメータを検証するには、以下を実行します。
root #
crm
script verify mailto id=sysadmin email=tux@example.org 1. Ensure mail package is installed mailx 2. Configure cluster resources primitive sysadmin ocf:heartbeat: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
に置き換えます。
root #
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
を使用して、リソースがクラスタに統合されているかどうかを確認します。
root #
crm
status [...] Clone Set: c-sysadmin [sysadmin] Started: [ alice bob ]
設定テンプレートの使用は非推奨で、今後削除される予定です。設定テンプレートはクラスタスクリプトに置き換えられます。8.1.5項 「crmshのクラスタスクリプトの使用」を参照してください。
設定テンプレートは、crmsh用の既成のクラスタ設定です。リソーステンプレート(8.4.3項 「リソーステンプレートの作成」の説明を参照)と混同しないでください。これらはクラスタ用のテンプレートで、crmシェル用ではありません。
設定テンプレートは、最小限の操作で、特定ユーザのニーズに合わせて調整できます。テンプレートで設定を作成する際には、警告メッセージでヒントが与えられます。これは、後から編集することができ、さらにカスタマイズできます。
次の手順は、簡単ですが機能的なApache設定を作成する方法を示しています。
root
としてログインし、crm
対話型シェルを開始します。
root #
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 ocf:heartbeat: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
詳細がわかっていれば、コマンドをさらに簡素化できます。次のコマンドをシェルで使用して、上記の手順を要約できます。
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に適用したり、コミットすることはありません。
シャドーイング設定は、異なる設定シナリオのテストに使用されます。複数のシャドウ設定を作成した場合は、1つ1つテストして変更を加えた影響を確認できます。
通常の処理は次のようになります。
root
としてログインし、crm
対話型シェルを開始します。
root #
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 livecrm(live)#
設定の変更をクラスタにロードする前に、変更内容をptest
でレビューすることを推奨します。ptest
コマンドを指定すると、変更のコミットによって生じるアクションのダイアグラムを表示できます。ダイアグラムを表示するには、graphviz
パッケージが必要です。次の例は監視操作を追加するスクリプトです。
root #
crm
configurecrm(live)configure#
show
fence-bob primitive fence-bob stonith:apcsmart \ params hostlist="bob"crm(live)configure#
monitor
fence-bob 120m:60scrm(live)configure#
show
changed primitive fence-bob stonith:apcsmart \ params hostlist="bob" \ op monitor interval="120m" timeout="60s"crm(live)configure#
ptestcrm(live)configure#
commit
クラスタダイアグラムを出力するには、コマンドcrm
configure graph
を使用します。これにより現在の設定が現在のウィンドウに表示されるので、X11が必要になります。
SVG (Scalable Vector Graphics)を使用する場合は、次のコマンドを使用します。
root #
crm
configure graph dot config.svg svg
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を参照してください。
グローバルクラスタオプションは、一定の状況下でのクラスタの動作を制御します。事前に定義されている値は、通常は、そのまま保持できます。ただし、クラスタの主要機能を正しく機能させるには、クラスタの基本的なセットアップ後に、次のパラメータを調整する必要があります。
crm
でグローバルクラスタオプションを変更する #
root
としてログインし、crm
ツールを開始します。
root #
crm
configure
次のコマンドを使用して、2ノードクラスタだけのオプションを設定します。
crm(live)configure#
property
no-quorum-policy=stopcrm(live)configure#
property
stonith-enabled=true
STONITHがないクラスタはサポートされません。
変更内容を表示します。
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="stop" \ stonith-enabled="true"
変更内容をコミットして終了します。
crm(live)configure#
commit
crm(live)configure#
exit
クラスタの管理者は、クラスタ内のサーバ上の各リソースや、サーバ上で実行する各アプリケーションに対してクラスタリソースを作成する必要があります。クラスタリソースには、Webサイト、電子メールサーバ、データベース、ファイルシステム、仮想マシン、およびユーザが常時使用できるようにする他のサーバベースのアプリケーションまたはサービスなどが含まれます。
作成できるリソースタイプの概要については、6.3.3項 「リソースのタイプ」を参照してください。
設定の一部またはすべてをローカルファイルまたはネットワークURLからロードできます。次の3つの異なる方法を定義できます。
置き換え
このオプションは、現在の設定を新たなソース設定に置き換えます。
update
このオプションは、ソース設定のインポートを試みます。現在の設定に新たな項目を追加したり、既存の項目を更新したりします。
push
このオプションは、ソースからのコンテンツを現在の設定にインポートします(update
と同じ)。ただし、新しい設定で使用できないオブジェクトを削除します。
ファイルmycluster-config.txt
から新しい設定をロードするには、次の構文を使用します。
root #
crm
configure load push mycluster-config.txt
クラスタで使用できるRA(リソースエージェント)には3種類あります(背景情報については6.3.2項 「サポートされるリソースエージェントクラス」を参照)。新しいリソースをクラスタに追加するには、次の手順に従います。
root
としてログインし、crm
ツールを開始します。
root #
crm
configure
プリミティブIPアドレスを設定ます。
crm(live)configure#
primitive
myIP ocf:heartbeat:IPaddr \ params ip=127.0.0.99 op monitor interval=60s
前のコマンドは「プリミティブ」に名前myIP
を設定します。クラス(ここではocf
)、プロバイダ(heartbeat
)、およびタイプ(IPaddr
)を選択する必要があります。さらに、このプリミティブでは、IPアドレスなどのパラメータが必要です。自分の設定に合わせてアドレスを変更してください。
行った変更を表示して確認します。
crm(live)configure#
show
変更をコミットして反映させます。
crm(live)configure#
commit
類似した設定で複数のリソースを作成する場合、リソーステンプレートを使用すれば作業が簡単になります。基本的なバックグラウンド情報については、6.5.3項 「リソーステンプレートと制約」を参照してください。これらを、「通常の」テンプレート(8.1.6項 「設定テンプレートの使用」で説明したもの)と混同しないでください。次の構文を知るには、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
オプションや操作を上書きしたい場合は、自分の(プリミティブの)定義を追加します。たとえば、次の新しいプリミティブMyVM2は監視操作のタイムアウトを2倍にしますが、その他はそのままに残します。
crm(live)configure#
primitive
MyVM2 @BigVM \ params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \ op monitor timeout=120s interval=30s
リソーステンプレートは、そのテンプレートから派生するすべてのプリミティブを表すものとして、制約で参照することができます。これにより、クラスタ設定をいっそう簡潔かつクリアに行うことができます。リソーステンプレートは、場所の制約を除くすべての制約から参照することができます。コロケーション制約には、複数のテンプレート参照を含めることはできません。
crm
からは、STONITHデバイスは単なる1つのリソースと認識されます。STONITHリソースを作成するには、次の手順に従います。
root
としてログインし、crm
対話型シェルを開始します。
root #
crm
configure
次のコマンドで、すべての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
上記のリストから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. ...
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
すべてのリソースを設定することは、ジョブのほんの一部分です。クラスタが必要なすべてのリソースを認識しても、正しく処理できるとは限りません。たとえば、DRBDのスレーブノードにファイルシステムをマウントしないようにしてください(実際、DRBDでは失敗します)。このような情報をクラスタが利用できるように、制約を定義します。
制約の詳細については、6.5項 「リソースの制約」を参照してください。
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.5crm(live)configure#
primitive
vip2 ocf:heartbeat:IPaddr2 params ip=192.168.1.6crm(live)configure#
location
loc-alice { vip1 vip2 } inf: alice
ある場合には、location
コマンドでリソースパターンを使用すると、より効率的で便利です。リソースパターンは、2つのスラッシュ間の正規表現です。たとえば、前に示した仮想IPアドレスは、次とすべて一致させることができます。
crm(live)configure#
location
loc-alice /vip.*/ inf: alice
colocation
コマンドは、同じホストまたは別のホストで実行するべきリソースを定義するために使用します。
常に同じノードで実行する必要があるリソース、または同じノードで実行してはならないリソースを定義する場合には、それぞれ+infまたは-infのスコアを設定することだけが可能です。無限大以外のスコアの使用も可能です。その場合、コロケーションはadvisoryと呼ばれ、衝突が発生したときに他のリソースが停止しないようにするため、クラスタがそれらの制約に従わないこともあります。
たとえば、IDがfilesystem_resource
とnfs_group
のリソースを常に同じホストで実行するには、次の制約を使用します。
crm(live)configure#
colocation
nfs_on_filesystem inf: nfs_group filesystem_resource
マスタスレーブ構成では、現在のノートがマスタかどうかと、リソースをローカルに実行しているかどうかを把握することが必要です。
同じノード上にリソースのグループを配置できると便利な場合がありますが(コロケーション制約を定義)、リソース間で困難な依存性を持つことはありません。
同じノード上にリソースを配置するが、これらの一方に障害が発生した場合のアクションがない場合は、weak-bond
コマンドを使用します。
root #
crm
configure assist weak-bond RES1 RES2
weak-bond
の実装により、指定されたリソースを持つダミーリソースとコロケーション制約が自動的に作成されます。
order
コマンドは、アクションのシーケンスを定義します。
リソースのアクションや操作の順序を指定することが必要な場合があります。たとえば、デバイスがシステムで利用できるようになるまで、ファイルシステムはマウントできません。順序の制約を使用して、開始、停止、マスタへの昇格など、別のリソースが特殊な条件を満たす直前または直後に、サービスを開始または停止できます。
順序の制約を設定するには、次のようなコマンドをcrm
シェルで使用します。
crm(live)configure#
order
nfs_after_filesystem mandatory: filesystem_resource nfs_group
このセクションで使用される例は、制約を追加しないと機能しません。すべてのリソースは、必ず、マスタである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
リソースフェールオーバーを判定するには、メタ属性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が定義されていない場合には、リソースは移行しません。
概要については、6.5.4項 「フェールオーバーノード」を参照してください。
ノードがオンライン状態に戻り、クラスタ内にある場合は、リソースが元のノードにフェールバックすることがあります。リソースを実行していたノードにリソースをフェールバックさせたくない場合や、リソースのフェールバック先として別のノードを指定する場合は、リソースの固着性の値を変更します。リソースの固着性は、リソースの作成時でも、その後でも指定できます。
概要については、6.5.5項 「フェールバックノード」を参照してください。
一部のリソースは、メモリの最小量など、特定の容量要件を持っています。要件が満たされていない場合、リソースは全く開始しないか、またはパフォーマンスを下げた状態で実行されます。
これを考慮に入れて、High Availability Extensionでは、次のパラメータを指定できます。
一定のノードが提供する容量
一定のリソースが要求する容量
リソースの配置に関する全体的なストラテジ
パラメータと設定の詳細な背景情報については、6.5.6項 「負荷インパクトに基づくリソースの配置」を参照してください。
リソースの要件とノードが提供する容量を設定するには、使用属性を使用します。使用属性に任意の名前を付け、設定に必要なだけ名前/値のペアを定義します。いくつかのエージェントは、たとえばVirtualDomain
などの使用を更新します。
次の例では、クラスタのノードとリソースの基本設定がすでに完了していることを想定しています。さらに、特定のノードが提供する容量と特定のリソースが必要とする容量を設定します。
crm
で使用属性を追加または変更する #
root
としてログインし、crm
対話型シェルを開始します。
root #
crm
configure
ノードが提供する容量を指定するには、次のコマンドを使用し、プレースホルダNODE_1をノードの名前に置き換えます。
crm(live)configure#
node
NODE_1 utilization memory=16384 cpu=8
これらの値によって、NODE_1は16GBのメモリと8つのCPUコアをリソースに提供すると想定されます。
リソースが要求する容量を指定するには、次のコマンドを使用します。
crm(live)configure#
primitive
xen1 ocf:heartbeat:Xen ... \ utilization memory=4096 cpu=4
これによって、リソースはNODE_1からの4,096のメモリ単位と4つのCPU単位を使用します。
property
コマンドを使用して、配置ストラテジを設定します。
crm(live)configure#
property
...
次の値を使用できます。
default
(デフォルト値)使用値は考慮しません。リソースは、場所のスコアに従って割り当てられます。スコアが同じであれば、リソースはノード間で均等に分散されます。
utilization
リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。ただし、負荷分散は、まだ、ノードに割り当てられたリソースの数に基づいて行われます。
minimal
リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。できるだけ少ない数のノードにリソースを集中しようとします(残りのノードの電力節約のため)。
balanced
リソースの要件を満たすだけの空き容量がノードにあるかどうか決定する際に、利用率を確認します。リソースを均等に分散して、リソースのパフォーマンスを最適化しようとします。
使用できる配置ストラテジは、最善策であり、まだ、複雑なヒューリスティックソルバで、常に最適な割り当て結果を得るには至っていません。リソースの優先度を正しく設定して、最重要なリソースが最初にスケジュールされるようにしてください。
変更をコミットしてから、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
charlie utilization memory="4000"crm(live)configure#
primitive
xenA ocf:heartbeat:Xen \ utilization hv_memory="3500" meta priority="10" \ params xmfile="/etc/xen/shared-vm/vm1"crm(live)configure#
primitive
xenB ocf:heartbeat:Xen \ utilization hv_memory="2000" meta priority="1" \ params xmfile="/etc/xen/shared-vm/vm2"crm(live)configure#
primitive
xenC ocf:heartbeat:Xen \ utilization hv_memory="2000" meta priority="1" \ params xmfile="/etc/xen/shared-vm/vm3"crm(live)configure#
primitive
xenD ocf:heartbeat:Xen \ utilization hv_memory="1000" meta priority="5" \ params xmfile="/etc/xen/shared-vm/vm4"crm(live)configure#
property
placement-strategy="minimal"
3ノードはすべてアクティブであり、まず、xenAがノードに配置され、次に、xenDが配置されます。xenBとxenCは、一緒に割り当てられるか、またはどちらか1つがxenDとともに割り当てられます。
1つのノードに障害が発生した場合、残りのノード上で利用できるメモリ合計が少なすぎて、これらのリソースすべてはホストできません。xenAは確実に割り当てられ、xenDも同様です。ただし、xenBとxenCは、そのどちらか1つしか割り当てられません。xenBとxenCの優先度は同等なので、結果はまだ未定義です。これを解決するためにも、どちらかに高い優先度を設定する必要があります。
リソースを監視するには、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
概要については、6.4項 「リソース監視」を参照してください。
クラスタの一般的な要素の1つは、一緒の場所で見つける必要のあるリソースのセットです。連続的に開始し、逆の順序で停止します。この設定を簡単にするため、グループのコンセプトをサポートしています。次の例では、2つのプリミティブ(IPアドレスと電子メールリソース)を作成します。
crm
コマンドをシステム管理者として実行します。プロンプトがcrm(live)
に変化します。
プリミティブを設定します。
crm(live)#
configure
crm(live)configure#
primitive
Public-IP ocf:heartbeat:IPaddr \ params ip=1.2.3.4 id= Public-IPcrm(live)configure#
primitive
Email systemd:postfix \ params id=Email
該当するIDを使用して、正しい順序で、プリミティブをグループ化します。
crm(live)configure#
group
g-mailsvc Public-IP Email
グループメンバーの順序を変更するには、configure
サブコマンドからmodgroup
コマンドを使用します。プリミティブのEmail
をPublic-IP
の前に移動するには、次のコマンドを使用します(このコマンドは機能のデモのみを目的としています)。
crm(live)configure#
modgroup
g-mailsvc add Email before Public-IP
グループ(Email
など)からリソースを削除する場合には、このコマンドを使用します。
crm(live)configure#
modgroup
g-mailsvc remove Email
概要については、6.3.5.1項 「グループ」を参照してください。
クローンは当初、IPアドレスのN個のインスタンスを開始し、負荷分散のためにクラスタ上に分散させる便利な方法と考えられていました。それらは、DLMとの統合、サブシステムおよびOCFS2のフェンシングなど、他の目的にも有効であることがわかってきました。どのようなリソースでも、リソースエージェントがサポートしていれば、クローン化できます。
クローンリソースの詳細については、6.3.5.2項 「クローン」を参照してください。
匿名クローンリソースを作成するには、まずプリミティブリソースを作成して、それをclone
コマンドで指定することです。次の操作を実行してください:
root
としてログインし、crm
対話型シェルを開始します。
root #
crm
configure
次のように、プリミティブを設定します。
crm(live)configure#
primitive
Apache ocf:heartbeat:apache
プリミティブをクローンします。
crm(live)configure#
clone
cl-apache Apache
マルチステートリソースは、クローンが得意とするところです。これにより、インスタンスを2つの動作モード(active/passive、primary/secondary、またはmaster/slave)のいずれかに設定できます。
ステートフルクローンリソースを作成するには、まずプリミティブリソースを作成してから、マルチステートリソースを作成します。マルチステートリソースは少なくとも、昇格および降格操作をサポートしている必要があります。
root
としてログインし、crm
対話型シェルを開始します。
root #
crm
configure
プリミティブを作成します。必要に応じて間隔を変更します。
crm(live)configure#
primitive
my-rsc ocf:myCorp:myAppl \ op monitor interval=60 \ op monitor interval=61 role=Master
マルチステートリソースを作成します。
crm(live)configure#
ms
ms-rsc my-rsc
crm
ツールでは、クラスタリソースの設定が可能なだけでなく、既存リソースを管理することもできます。移行のサブセクションで概要を示します。
クラスタを管理する際には、コマンドcrm configure show
で、クラスタ設定、グローバルオプション、プリミティブなどの現在のCIBオブジェクトを一覧表示します。
root #
crm
configure show node 178326192: alice node 178326448: bob primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20 primitive stonith-sbd stonith:external/sbd \ params pcmk_delay_max=30 property cib-bootstrap-options: \ have-watchdog=true \ dc-version=1.1.15-17.1-e174ec8 \ cluster-infrastructure=corosync \ cluster-name=hacluster \ stonith-enabled=true \ placement-strategy=balanced \ standby-mode=true rsc_defaults rsc-options: \ resource-stickiness=1 \ migration-threshold=3 op_defaults op-options: \ timeout=600 \ record-pending=true
多数のリソースがある場合、show
の出力が冗長になります。出力を制限するには、リソースの名前を使用します。たとえば、プリミティブadmin_addr
のみのプロパティを一覧表示するには、リソース名をshow
に付加します。
root #
crm
configure show admin_addr primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20
ただし、特定のリソースの出力をさらに制限したい場合があります。これは、「フィルタ」を使用して実現できます。フィルタは特定のコンポーネントに出力を制限します。たとえば、ノードのみを一覧表示するには、type:node
を使用します。
root #
crm
configure show type:node node 178326192: alice node 178326448: bob
プリミティブにも興味がある場合には、or
オペレータを使用します。
root #
crm
configure show type:node or type:primitive node 178326192: alice node 178326448: bob primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20 primitive stonith-sbd stonith:external/sbd \ params pcmk_delay_max=30
さらに、特定の文字列で開始するオブジェクトを検索するには次の表記を使用します。
root #
crm
configure show type:primitive and and 'admin*' primitive admin_addr IPaddr2 \ params ip=192.168.2.1 \ op monitor interval=10 timeout=20
使用可能なすべてのタイプを一覧表示するには、crm configure show type:
と入力し、<Tab>キーを押します。Bash補完により、すべてのタイプのリストが表示されます。
新しいクラスタリソースを開始するには、そのIDが必要です。次の手順に従います。
root
としてログインし、crm
対話型シェルを開始します。
root #
crm
リソースレベルに切り替えます。
crm(live)#
resource
start
でリソースを開始し、<Tab>キーを押してすべての既知のリソースを表示します。
crm(live)resource#
start
ID
リソースは、失敗した場合は自動的に再起動しますが、失敗のたびにリソースの失敗回数が増加します。migration-threshold
がそのリソースに設定されている場合は、失敗の数が移行しきい値に達すると、そのリソースはノードで実行できなくなります。
シェルを開いて、root
ユーザとしてログインします。
すべてのリソースのリストを取得します。
root #
crm
resource list ... Resource Group: dlm-clvm:1 dlm:1 (ocf:pacemaker:controld) Started clvm:1 (ocf:heartbeat:clvm) Started
リソースdlm
をクリーンアップするには、たとえば、以下の手順を実行します:
root #
crm
resource cleanup dlm
次の手順に従って、クラスタリソースを削除します。
root
としてログインし、crm
対話型シェルを開始します。
root #
crm
configure
次のコマンドを実行して、リソースのリストを取得します。
crm(live)#
resource
status
たとえば、出力はこのようになります(ここで、myIPはリソースの該当するID)。
myIP (ocf:IPaddr:heartbeat) ...
該当するIDを持つリソースを削除します(これは、commit
も含意します)。
crm(live)#
configure
delete YOUR_ID
変更をコミットします。
crm(live)#
configure
commit
リソースは、ハードウェアまたはソフトウェアに障害が発生した場合、クラスタ内の他のノードに自動的にフェールオーバー(つまり移行)するよう設定されていますが、Hawk2またはコマンドラインを使用して、手動でリソースを別のノードに移動することもできます。
この作業を行うには、migrate
コマンドを使用します。たとえば、リソースipaddress1
をbob
というクラスタノードに移行するには、次のコマンドを使用します。
root #
crm
resourcecrm(live)resource#
migrate
ipaddress1 bob
タグは、コロケーションの作成や関係の順序付けを行わずに、複数のリソースをただちに参照する方法です。これは、概念的に関連するリソースをグループ化するのに役立つ場合があります。たとえば、データベースに関連するいくつかのリソースがある場合、databases
というタグを作成し、データベースに関連するすべてのリソースをこのタグに追加します。
root #
crm
configure tag databases: db1 db2 db3
これにより、1つのコマンドですべてを起動できます。
root #
crm
resource start databases
同様に、すべてを停止することもできます。
root #
crm
resource stop databases
クラスタまたはノードの「ヘルス」ステータスは、「スクリプト」というもので表示できます。スクリプトは、ヘルスだけに限らず各タスクを実行できます。ただし、このサブセクションでは、ヘルスステータスを取得する方法に焦点を当てます。
health
コマンドに関するすべての詳細を取得するには、describe
を使用します。
root #
crm
script describe health
このコマンドは、すべてのパラメータの説明とリスト、およびそのデフォルト値を示します。スクリプトを実行するには、run
を使用します。
root #
crm
script run health
スイートから1つのステップのみを実行したい場合は、describe
コマンドのStepsカテゴリで、使用可能なすべてのステップを一覧表示できます。
たとえば、次のコマンドは、health
コマンドの最初のステップを実行します。さらなる調査のために、出力がhealth.json
に保存されます。
root #
crm
script run health statefile='health.json'
上記のコマンドは、crm cluster health
でも実行できます。
スクリプトに関する追加情報を表示するには、http://crmsh.github.io/scripts/を参照してください。
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
コマンドを使用すれば、この処理が実行されます。秘密のパラメータを管理する場合には、このコマンドを使用することを強く推奨します。
クラスタの履歴の調査は複雑な作業です。この作業を簡素化するために、crmshにはhistory
コマンドとそのサブコマンドが含まれています。これは、SSHが正しく設定されていることが前提となります。
それぞれのクラスタは、状態を移動し、リソースを移行し、または重要なプロセスを開始します。これらすべてのアクションは、history
のサブコマンドによって取得できます。
デフォルトでは、すべてのhistory
コマンドは過去1時間のイベントを確認します。このタイムフレームを変更するには、limit
サブコマンドを使用します。構文は次のとおりです。
root #
crm
historycrm(live)history#
limit
FROM_TIME [TO_TIME]
有効な例として、次のようなものが挙げられます。
limit
4:00pm
, limit
16:00
どちらのコマンドも同じ意味で、今日の午後4時を表しています。
limit
2012/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
1
数値が大きいほど、レポートが詳細になっていきます。デフォルト値は0
(ゼロ)です。
ここまでのパラメータを設定したら、log
を使用してログメッセージを表示します。
最後の遷移を表示するには、次のコマンドを使用します。
crm(live)history#
transition
-1 INFO: fetching new logs, please wait ...
このコマンドはログを取得し、dotty
(graphviz
パッケージから)を実行して、遷移グラフを表示します。 シェルはログファイルを開きます。ログ内は、↓と↑カーソルキーでブラウズできます。
遷移グラフを表示する必要がない場合には、nograph
オプションを使用します。
crm(live)history#
transition
-1 nograph
crm マニュアルページ。
アップストリームプロジェクトマニュアルにアクセスします(http://crmsh.github.io/documentation)。
詳しい例については、Article “Highly Available NFS Storage with DRBD and Pacemaker”を参照してください。
クラスタがノードの1つの誤動作を検出し、そのノードの削除が必要となることがあります。これをフェンシングと呼び、一般にSTONITHリソースで実行されます。
SSHが他のシステムの問題にどのように反応するのかを知る方法はありません。このため、外部SSH/STONITHエージェント(stonith:external/ssh
など)は、運用環境ではサポートされていません。テスト目的でこのようなエージェントをまだ使用する場合は、libglue-devel
パッケージをインストールしてください。
現在使用可能なすべてのSTONITHデバイス(ソフトウェア側から)のリストを入手するには、crm ra list stonith
コマンドを使用します。お気に入りのエージェントが見つからない場合は、-devel
パッケージをインストールしてください。STONITHデバイスおよびリソースエージェントの詳細については、第10章 「フェンシングとSTONITH」を参照してください。
今のところ、STONITHエージェントの作成に関するマニュアルはありません。新しいSTONITHエージェントを作成する場合は、cluster-glue
パッケージのソースに提供されている例を参照してください。
/usr/lib/ocf/resource.d/
で提供されているすべてのOCFリソースエージェントの詳細については、6.3.2項 「サポートされるリソースエージェントクラス」を参照してください。各リソースエージェントは、それを制御する次の操作をサポートしている必要があります。
start
リソースを開始または有効化します。
stop
リソースを中止または無効化します。
status
リソースのステータスを返します。
monitor
status
と同様ですが、予期しない状態もチェックします。
validate
リソースの設定を検証します。
meta-data
リソースエージェントの情報をXMLで返します。
OCF RAの作成方法の一般的な手順は、次のとおりです。
テンプレートとして、/usr/lib/ocf/resource.d/pacemaker/Dummy
ファイルをロードします。
新しいリソースエージェントごとに新しいサブディレクトリを作成して、名前が競合しないようにします。たとえばリソースグループkitchen
にリソースcoffee_machine
がある場合、このリソースを/usr/lib/ocf/resource.d/kitchen/
ディレクトリに追加します。このRAにアクセスするには、コマンドcrm
を実行します。
root #
crm
configure primitive coffee_1 ocf:coffee_machine:kitchen ...
異なるシェル関数を実装し、異なる名前でファイルを保存します。
OCFリソースエージェントの作成についての詳細は、https://github.com/ClusterLabs/resource-agents/blob/master/doc/dev-guides/ra-dev-guide.ascを参照してください。コンセプトの特別な情報については、第1章 「製品の概要」を参照してください。
OCF仕様によると、アクションが返す必要がある出口コードの厳密な定義があります。クラスタは常に、予期される結果に対する戻りコードを確認します。結果が予期された値と一致しない場合、アクションは失敗したとみなされ、回復処理が開始されます。障害回復には3種類あります。
回復の種類 |
説明 |
クラスタが行うアクション |
---|---|---|
soft |
一時的なエラーが発生しました。 |
リソースを再起動するか、新しい場所に移動させます。 |
hard |
一時的ではないエラーが発生しました。エラーは、現在のノードに固有の場合があります。 |
リソースを他の場所に移動して、現在のノードで再試行されないようにします。 |
fatal |
すべてのクラスタノードに共通の、一時的ではないエラーが発生しました。これは、不正な設定が指定されたことを示しています。 |
リソースを停止して、どのクラスタノードでも開始されないようにします。 |
アクションが失敗したと想定して、次の表では、異なるOCF戻りコードを概説します。また、エラーコードを受け取った場合にクラスタが開始する回復の種類も示しています。
OCF戻りコード |
OCFエイリアス |
説明 |
回復の種類 |
---|---|---|---|
0 |
OCF_SUCCESS |
成功。コマンドは正常に完了しました。これは、すべてのstart、stop、promote、demoteコマンドの予期された結果です。 |
soft |
1 |
OCF_ERR_GENERIC |
汎用の「問題が発生した」ことを示すエラーコード。 |
soft |
2 |
OCF_ERR_ARGS |
リソースの設定がこのマシンで有効ではありません(たとえば、ノード上に見つからない場所/ツールを参照している場合)。 |
hard |
3 |
OCF_ERR_UNIMPLEMENTED |
要求されたアクションは実行されていません。 |
hard |
4 |
OCF_ERR_PERM |
リソースエージェントに、作業を完了できるだけの権限がありません。 |
hard |
5 |
OCF_ERR_INSTALLED |
リソースが必要とするツールがこのコンピュータにインストールされていません。 |
hard |
6 |
OCF_ERR_CONFIGURED |
リソースの設定が無効です(たとえば、必要なパラメータがないなど)。 |
fatal |
7 |
OCF_NOT_RUNNING |
リソースが実行されていません。クラスタは、どのアクションについてもこれを返すリソースを停止しようとしません。
このOCF戻りコードはリソース回復を必要することも必要としないこともあります。予期されたリソースの状態に依存します。予期されない場合は、 |
N/A |
8 |
OCF_RUNNING_MASTER |
リソースはマスタモードで実行しています。 |
soft |
9 |
OCF_FAILED_MASTER |
リソースはマスタモードですが、失敗しました。リソースは降格、停止され、再度開始されます(昇格されます)。 |
soft |
その他 |
該当なし |
カスタムエラーコード。 |
soft |
フェンシングはHA(High Availability)向けコンピュータクラスタにおいて、非常に重要なコンセプトです。クラスタがノードの1つの誤動作を検出し、そのノードの削除が必要となることがあります。これをフェンシングと呼び、一般にSTONITHリソースで実行されます。フェンシングは、HAクラスタを既知の状態にするための方法として定義できます。
クラスタのすべてのリソースには、それぞれ状態が関連付けられています。たとえば、「リソースr1はaliceで起動されている」などです。HAクラスタでは、このような状態は「リソースr1はalice以外のすべてのノードで停止している」ことを示します。クラスタは各リソースが1つのノードでのみ起動されるようにするためです。各ノードはリソースに生じた変更を報告する必要があります。つまり、クラスタの状態は、リソースの状態とノードの状態の集まりです。
ノードまたはリソースの状態を十分に確定することができない場合には、フェンシングが発生します。クラスタが所定のノードで起こっていることを認識しない場合でも、フェンシングによって、そのノードが重要なリソースを実行しないようにできます。
フェンシングには、リソースレベルとノードレベルのフェンシングという、2つのクラスがあります。後者について、この章で主に説明します。
リソースレベルのフェンシングにより、特定のリソースへの排他的アクセスが保証されます。この一般的な例として、SANファイバチャネルスイッチからのノードのゾーニングの変更(つまり、ノードのディスクへのアクセスのロックアウト)や、SCSI予約などの方法が挙げられます。例については、 11.10項 「ストレージ保護のための追加メカニズム」を参照してください。
ノードレベルのフェンシングにより、障害が発生したノードから共有リソースに完全にアクセスできなくなります。このことは通常、そのノードをリセットする、または電源オフにするというような、極端な手段で行われます。
Pacemakerクラスタにおけるノードレベルフェンシングの実装は、STONITH (Shoot The Other Node in the Head: 他のノードの即時強制終了)です。High Availability Extensionにはstonith
コマンドラインツールが付属し、これはクラスタ上のノードの電源をリモートでオフにする拡張インタフェースです。使用できるオプションの概要については、stonith --help
を実行するか、またはstonith
のマニュアルページで詳細を参照してください。
ノードレベルのフェンシングを使用するには、まず、フェンシングデバイスを用意する必要があります。High Availability ExtensionでサポートされているSTONITHデバイスのリストを取得するには、任意のノード上で次のコマンドのいずれかを実行します。
root #
stonith -L
または
root #
crm ra list stonith
STONITHデバイスは次のカテゴリに分類できます。
電源分配装置は、重要なネットワーク、サーバ、データセンター装置の電力と機能を管理する、重要な要素です。接続した装置のリモートロード監視と、個々のコンセントでリモート電源オン/オフのための電力制御を実行できます。
電力会社からの電力の停電発生時に別個のソースから電力を供給することで、安定した電源から接続先の装置に緊急電力が提供されます。
クラスタを一連のブレード上で実行している場合、ブレードエンクロージャの電源制御デバイスがフェンシングの唯一の候補となります。当然、このデバイスは1台のブレードコンピュータを管理できる必要があります。
ライトアウトデバイス(IBM RSA、HP iLO、Dell DRAC)は急速に広まっており、既製コンピュータの標準装備になる可能性さえあります。ただし、ホスト(クラスタノード)と電源を共有する場合は、必要時にそれらが機能しない場合があります。ノードに電力が供給されないままでは、それを制御するデバイスも役に立ちません。したがって、バッテリ駆動のライトアウトデバイスを使用することを強くお勧めします。これらのデバイスはネットワークでアクセスできるという別の側面があります。これはシングルポイント障害またはセキュリティの懸念事項を示唆している可能性があります。
テストデバイスは、テスト専用に使用されます。通常、ハードウェアにあまり負担をかけないようになっています。クラスタが運用に使用される前に、実際のフェンシングデバイスに交換される必要があります。
STONITHデバイスは、予算と使用するハードウェアの種類に応じて選択します。
SUSE® Linux Enterprise High Availability ExtensionでのSTONITHの実装は、2つのコンポーネントで構成されています。
stonithdは、ローカルプロセスまたはネットワーク経由でアクセスできるデーモンです。stonithdは、フェンシング操作に対応するコマンド(rest、power-off、power-on)を受け入れます。フェンシングデバイスのステータスチェックも行います。
stonithdデーモンはCRM HAクラスタの各ノードで実行されます。DCノードで実行されるstonithdインスタンスは、CRMからフェンシング要求を受け取ります。目的のフェンシング操作を実行するのは、このインスタンスとその他のstonithdプログラムです。
サポートされているフェンシングデバイスごとに、そのデバイスを制御できるSTONITHプラグインがあります。STONITHプラグインはフェンシングデバイスへのインタフェースです。cluster-glue
パッケージに付属するSTONITHプラグインは、各ノード上の/usr/lib64/stonith/plugins
にあります(fence-agents
パッケージもインストールしている場合、そのパッケージに付属する各種プラグインは、/usr/sbin/fence_*
にインストールされています)。すべてのSTONITHプラグインはstonithdからは同一のものと認識されますが、フェンシングデバイスの性質を反映しているため、大きな違いがあります。
一部のプラグインは、複数のデバイスをサポートします。代表的な例はipmilan
(またはexternal/ipmi
)で、IPMIプロトコルを実装し、このプロトコルをサポートする任意のデバイスを制御できます。
フェンシングをセットアップするには、1つまたは複数のSTONITHリソースを設定する必要があります。stonithdデーモンでは設定は不要です。すべての設定はCIBに保存されます。STONITHリソースはクラスstonith
のリソースです(6.3.2項 「サポートされるリソースエージェントクラス」を参照)。STONITHリソースはSTONITHプラグインのCIBでの表現です。フェンシング操作の他、STONITHリソースはその他のリソースと同様、起動、停止、監視できます。STONITHリソースの開始または停止は、ノード上でSTONITHデバイスドライバのロードおよびアンロードが行われることを意味しています。開始と停止は管理上の操作であるため、フェンシングデバイス自体での操作にはなりません。ただし、監視は、デバイスのログイン操作になります(必要な場合にデバイスが動作していることを検証するため)。STONITHリソースが別のノードにフェールオーバーすると、対応するドライバがロードされて、現在のノードがSTONITHデバイスと通信できるようにされます。
STONITHリソースはその他のリソースと同様にして設定できます。これらの操作の詳細については、使用しているクラスタ管理ツールに応じて次のいずれかを参照してください。
Hawk2: 7.5.6項 「STONITHリソースの追加」
crmsh: 8.4.4項 「STONITHリソースの作成」
パラメータ(属性)のリストは、それぞれのSTONITHの種類に依存します。特定のデバイスのパラメータ一覧を表示するには、stonith
コマンドを実行します。
stonith -t stonith-device-type -n
たとえば、ibmhmc
デバイスタイプのパラメータを表示するには、次のように入力します。
stonith -t ibmhmc -n
デバイスの簡易ヘルプテキストを表示するには、-h
オプションを使用します。
stonith -t stonith-device-type -h
以降では、crm
コマンドラインツールの構文で作成された設定例を紹介します。これを適用するには、サンプルをテキストファイル(sample.txt
など)に格納して、実行します。
root #
crm
< sample.txt
crm
コマンドラインツールでのリソースの設定については、第8章 「クラスタリソースの設定と管理(コマンドライン)」を参照してください。
IBM RSAライトアウトデバイスは、次のようにして設定できます。
configure primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \ params nodename=alice ip_address=192.168.0.101 \ username=USERNAME password=PASSW0RD primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \ params nodename=bob ip_address=192.168.0.102 \ username=USERNAME password=PASSW0RD location l-st-alice st-ibmrsa-1 -inf: alice location l-st-bob st-ibmrsa-2 -inf: bob commit
この例では、location制約が使用されていますが、それは、STONITH操作が常に一定の確率で失敗するためです。したがって、(実行側でもあるノード上の) STONITH操作は信頼できません。ノードがリセットされていない場合、フェンシング操作結果について通知を送信できません。これを実行する方法は、操作が成功すると仮定して事前に通知を送信するほかありません。ただし操作が失敗した場合、問題が発生することがあります。したがって、規則によってstonithdはホストの終了を拒否します。
UPSタイプのフェンシングデバイスの設定は、上記の例と似ています。詳細についてはここでは割愛します。すべてのUPSデバイスは、フェンシングのために、同じ機構を使用します。デバイスへのアクセス方法が異なる方法。古いUPSデバイスにはシリアルポートしかなく、通常、特別のシリアルケーブルを使用して1200ボーで接続していました。新型の多くは、まだシリアルポートがありますが、USBインタフェースまたはEthernetインタフェースも使用します。使用できる接続の種類は、プラグインが何をサポートしているかによります。
たとえば、apcmaster
をapcsmart
デバイスと、stonith -t
stonith-device-type -nコマンドを使用して比較します。
stonith -t apcmaster -h
次の情報が返されます。
STONITH Device: apcmaster - APC MasterSwitch (via telnet) NOTE: The APC MasterSwitch accepts only one (telnet) connection/session a time. When one session is active, subsequent attempts to connect to the MasterSwitch will fail. For more information see http://www.apc.com/ List of valid parameter names for apcmaster STONITH device: ipaddr login password
今度は次のコマンドを使用します。
stonith -t apcsmart -h
次の結果が得られます。
STONITH Device: apcsmart - APC Smart UPS (via serial port - NOT USB!). Works with higher-end APC UPSes, like Back-UPS Pro, Smart-UPS, Matrix-UPS, etc. (Smart-UPS may have to be >= Smart-UPS 700?). See http://www.networkupstools.org/protocols/apcsmart.html for protocol compatibility details. For more information see http://www.apc.com/ List of valid parameter names for apcsmart STONITH device: ttydev hostlist
最初のプラグインは、ネットワークポートとtelnetプロトコルを持つAPC UPSをサポートします。2番目のプラグインはAPC SMARTプロトコルをシリアル回線で使用します。これは多数のAPC UPS製品ラインでサポートされているものです。
Kdumpは特殊なフェンシングデバイスに属し、実際にはフェンシングデバイスとは正反対のものです。このプラグインは、ノードでカーネルダンプが進行中かどうかをチェックします。進行中であればtrueを返し、ノードがフェンシングされたかのように動作します。
Kdumpプラグインは、別の実際のSTONITHデバイスと共に使用する必要があります(たとえば、external/ipmi
など)。フェンシングメカニズムが正常に機能するには、実際のSTONITHデバイスがトリガされる前にKdumpをチェックするよう指定する必要があります。次の手順で示すように、crm configure fencing_topology
を使用して、フェンシングデバイスの順序を指定してください。
kdump機能を有効にしたノードをすべて監視するには、stonith:fence_kdump
リソースエージェント(パッケージfence-agents
で提供)を使用します。構成の例については、以下のリソースを参照してください。
configure
primitive st-kdump stonith:fence_kdump \
params nodename="alice "\ 1
pcmk_host_check="static-list" \
pcmk_reboot_action="off" \
pcmk_monitor_action="metadata" \
pcmk_reboot_retries="1" \
timeout="60"
commit
監視されるノードの名前。複数のノードを監視する必要がある場合は、追加のSTONITHリソースを設定します。特定のノードでフェンシングデバイスを使用しないようにするには、場所に対する制約を追加します。 |
フェンシングのアクションは、リソースのタイムアウトが経過すると始まります。
各ノード上の/etc/sysconfig/kdump
で、kdumpプロセスが完了したときにすべてのノードに通知が送信されるようにKDUMP_POSTSCRIPT
を設定します。次に例を示します。
/usr/lib/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charlie [...]
kdumpが完了すると、kdumpを実行するノードが自動的に再起動します。
ネットワークが有効化されたfence_kdump_send
ライブラリに関する指定を含む、新しいinitrd
を記述します。-f
オプションを使用して既存のファイルを上書きし、次回のブートプロセスでその新規ファイルが使用されるようにします。
root #
dracut -f -a kdump
fence_kdump
リソース用のポートをファイアウォールで開きます。デフォルトポートは7410
です。
実際のフェンシングメカニズム(external/ipmi
など)をトリガする前にKdumpがチェックされるようにするため、次のような設定を使用します。
fencing_topology \ alice: kdump-node1 ipmi-node1 \ bob: kdump-node2 ipmi-node2
fencing_topology
の詳細:
crm configure help fencing_topology
他のリソースと同様に、STONITHクラスのエージェントは、ステータスのチェックのための監視操作もサポートします。
STONITHリソースの監視は定期的に行われますが、頻繁ではありません。ほとんどのデバイスでは、少なくとも1800秒(30分)の監視間隔があれば十分です。
フェンシングデバイスはHAクラスタの不可欠な要素ですが、使用する必要が少ないほど好都合です。ブロードキャストトラフィックが多すぎると、しばしば、電源管理装置が影響を受けます。1分間に10本程度の接続しか処理できないデバイスもあります。2つのクライアントが同時に接続しようとすると、混乱するデバイスもあります。大部分は、同時に複数のセッションを処理できません。
したがって、通常、フェンシングデバイスのステータスは数時間ごとにチェックすれば十分です。フェンシング操作の実行が必要となり、電源スイッチが故障する可能性は小さいものです。
監視操作の設定方法の詳細については、8.4.9項 「リソース監視の設定」を参照してください(コマンドラインアプローチについて説明されている)。
実際のSTONITHデバイスを操作するプラグインに加えて、特殊目的のSTONITHプラグインも存在します。
次に示すSTONITHプラグインの一部は、デモとテストだけを目的としています。次のデバイスは、現実のシナリオでは使用しないでください。使用すると、データが損なわれたり、予測できない結果が生じることがあります。
external/ssh
ssh
fence_kdump
このプラグインは、ノードでカーネルダンプが進行中かどうかをチェックします。進行中であればtrue
を返し、ノードがフェンシングされたかのように動作します。いずれにせよ、ダンプ中には、ノードはどのリソースも実行できません。これによって、すでにダウンしているがダンプ中(これは時間がかかります)であるノードのフェンシングを避けることができます。このプラグインは、別の実際のSTONITHデバイスとともに使用する必要があります。
設定の詳細については、例10.3「kdumpデバイスの設定」を参照してください。
external/sbd
これは自己フェンシングデバイスです。共有ディスクに挿入されることがある、いわゆる「ポイズンピル」に反応します。共有ストレージ接続が失われた場合、このデバイスはノードの動作を停止します。このSTONITHエージェントを使用してストレージベースのフェンシングを実装する方法については、第11章、手順11.7「SBDを使用するようにクラスタを設定する」を参照してください。詳細については、https://github.com/ClusterLabs/sbdも参照してください。
external/sbd
およびDRBD
external/sbd
フェンシングメカニズムは、SBDパーティションが各ノードから直接読み取れることを要求します。そのため、SBDパーティションではDRBD*デバイスを使用してはなりません。
ただし、SBDパーティションが階層配置または複製されていない共有ディスク上にある場合には、DRBDクラスタでフェンシングメカニズムを使用することはできます。
external/ssh
別のソフトウェアベースの「フェンシング」メカニズムです。ノードは、root
として、パスワードなしでお互いにログインできる必要があります。このメカニズムは、1つのパラメータhostlist
をとり、ターゲットにするノードを指定します。これは、本当に障害のあるノードをリセットすることはできないので、実際のクラスタには使用しないでください。これは、テストとデモの目的にのみ使用します。これを共有ストレージに使用すると、データが破損します。
meatware
meatware
ではユーザが操作を支援する必要があります。起動すると、meatware
はノードのコンソールに表示されるCRIT重大度メッセージを記録します。その場合、オペレータはノードがダウンしていることを確認して、meatclient(8)
コマンドを発行します。これによりmeatware
は、クラスタに対して、そのノードが 機能しなくなっていることを伝えます。詳細については、/usr/share/doc/packages/cluster-glue/README.meatware
を参照してください。
suicide
これはソフトウェアのみのデバイスで、reboot
コマンドを使用して実行しているノードを再起動できます。これにはノードのオペレーティングシステムによる操作が必要で、特定の状況では失敗することがあります。したがって、このデバイスの使用は、極力避けてください。ただし、1ノードクラスタで使用する場合は安全です。
この設定は、共有ストレージなしのフェンシングメカニズムが必要なときに便利です。このディスクレスモードでは、SBDは共有デバイスに頼らず、ハードウェアウォッチドッグを使用してノードをフェンスします。ただし、ディスクレスSBDは2ノードクラスタ用のスプリットブレインシナリオには対応できません。そのため、ディスクレスSBDを使用するには、3以上のノードが必要です。
suicide
は、「自分のホストを停止させない」というルールに対する唯一の例外です。
次の推奨事項のリストをチェックして、よく発生する間違いを避けてください。
複数の電源スイッチを並列に接続しないでください。
STONITHデバイスとその設定をテストする際には、各ノードからプラグを1回抜いて、ノードのフェンシングが起こらないことを検証してください。
リソースのテストは負荷のかかった状態で行って、タイムアウト値が適切であるかどうかを検証してください。タイムアウト値が短すぎると、(不必要な)フェンシング操作がトリガされることがあります。詳細については、6.3.9項 「タイムアウト値」を参照してください。
セットアップでは適切なフェンシングデバイスを使用してください。詳細については、10.5項 「特殊なフェンシングデバイス」も参照してください。
1つ以上のSTONITHリソースを設定します。デフォルトでは、グローバルクラスタオプションstonith-enabled
はtrue
に設定されています。STONITHリソースが定義されていない場合、クラスタはどのリソースの開始も拒否します。
グローバルクラスタオプションstonith-enabled
をfalse
に設定しないでください。これは、次の理由によります。
STONITHが有効でないクラスタはサポートされていません。
DLM/OCFS2は、決して発生しないフェンシング操作を待機して、永久にブロックし続けます。
グローバルクラスタオプションstartup-fencing
をfalse
に設定しないでください。 デフォルトでは、これは次の理由でtrue
に設定されています。クラスタの起動時に、あるノードが不明な状態になっていると、そのノードは、ステータスが明らかにされるまでフェンシングされます。
/usr/share/doc/packages/cluster-glue
インストールしたシステムのこのディレクトリには、多数のSTONITHプラグインおよびデバイスのREADMEファイルが格納されています。
STONITHに関する情報です。
『Pacemakerの説明』: Pacemakerの設定に必要なコンセプトを説明します。包括的で詳しい参照用情報です。
HAクラスタでのスプリットブレイン、クォーラム、フェンシングのコンセプトを説明する記事。
SBD (STONITH Block Device)は、共有ブロックストレージ(SAN、iSCSI、FCoEなど)を介したメッセージの交換を通じて、Pacemakerベースのクラスタのノードフェンシングメカニズムを提供します。これにより、フェンシングメカニズムが、ファームウェアバージョンの変更や特定のファームウェアコントローラへの依存から切り離されます。動作異常のノードが本当に停止したかどうかを確認するために、各ノードではウォッチドッグが必要です。特定の条件下では、ディスクレスモードで実行することにより、共有ストレージなしでSBDを使用することもできます。
ha-cluster-bootstrap スクリプトは、フェンシングメカニズムとしてSBDを使用するオプションを用いて、クラスタを設定する自動化された方法を提供します。詳細については、『インストールおよびセットアップクイックスタート』を参照してください。ただし、SBDを手動で設定する場合、個々の設定に関するオプションが増えます。
この章では、SBDの背後にある概念について説明します。スプリットブレインシナリオの場合に潜在的なデータ破損からクラスタを保護するために、SBDが必要とするコンポーネントを設定する手順を説明します。
ノードレベルのフェンシングに加えて、LVM2排他アクティブ化やOCFS2ファイルロックのサポート(リソースレベルのフェンシング)など、ストレージ保護のための追加のメカニズムを使用することができます。これにより、管理上またはアプリケーション上の障害からシステムが保護されます。
SBDは、「Storage-Based Death」または「STONITHブロックデバイス」の略語です。
High Availabilityクラスタスタックの最優先事項は、データの整合性を保護することです。これは、データストレージへの非協調的な同時アクセスを防止することによって実現されます。クラスタスタックは、複数の制御メカニズムを使用してこの処理を行います。
ただし、ネットワークのパーティション分割やソフトウェアの誤動作により、クラスタでいくつものDCが選択される状況となる可能性があります。このいわゆるスプリットブレインシナリオが発生した場合は、データが破損することがあります。
STONITHによるノードフェンシングは、これを防ぐためのプライマリメカニズムです。ノードフェンシングメカニズムとしてSBDを使用することは、スプリットブレインシナリオの場合に、外部電源オフデバイスを使用せずにノードをシャットダウンする1つの方法です。
すべてのノードが共有ストレージへのアクセスを持つ環境で、デバイスの小さなパーティションをSBDで使用できるようにフォーマットします。パーティションのサイズは、使用されるディスクのブロックサイズによって異なります(たとえば、512バイトのブロックサイズの標準SCSIディスクには1MB、4KBブロックサイズのDASDディスクには4MB必要です)。初期化プロセスでは、最大255のノードに対するスロットを備えたデバイス上にメッセージレイアウトが作成されます。
SBDは、そのデーモンの設定後、クラスタスタックの他のコンポーネントが起動される前に各ノードでオンラインになります。SBDデーモンは、他のすべてのクラスタコンポーネントがシャットダウンされた後で終了されます。したがって、クラスタリソースがSBDの監督なしでアクティブになることはありません。
このデーモンは、自動的に、パーティション上のメッセージスロットの1つを自分自身に割り当て、自分へのメッセージがないかどうか、そのスロットを絶えず監視します。デーモンは、メッセージを受信すると、ただちに要求に従います(フェンシングのための電源切断や再起動サイクルの開始など)。
また、デーモンは、ストレージデバイスへの接続性を絶えず監視し、パーティションが到達不能になった場合は、デーモン自体が終了します。このため、デーモンがフェンシングメッセージから切断されることはありません。これは、クラスタデータが別のパーティション上の同じ論理ユニットにある場合、追加障害ポイントになることはありません。ストレージ接続を失えば、ワークロードは終了します。
SBDを使用する場合は常に、正常動作するウォッチドッグが不可欠です。近代的なシステムは、ソフトウェアコンポーネントによって「チックル」または「フィード」される必要のあるhardware watchdogをサポートします。ソフトウェアコンポーネント(この場合、SBDデーモン)は、ウォッチドッグにサービスパルスを定期的に書き込むことによって、ウォッチドッグに「フィード」します。デーモンがウォッチドッグへのフィードを停止すると、ハードウェアでシステムが強制的に再起動されます。この機能は、SBDプロセス自体の障害(I/Oエラーで終了またはスタックするなど)に対する保護を提供します。
Pacemaker統合が有効になっている場合、デバイスの過半数が失われてもSBDはセルフフェンスを行いません。たとえば、クラスタにA、B、Cの3つのノードが含まれており、ネットワーク分割によってAには自分自身しか表示できず、BとCはまだ通信可能な状態であるとします。この場合、2つのクラスタパーティションが存在し、1つは過半数(B、C)であるためにクォーラムがあり、もう1つにはクォーラムがない(A)ことになります。過半数のフェンシングデバイスに到達できないときにこれが発生した場合、ノードAはすぐに自らダウンしますが、BとCは引き続き実行されます。
手動でストレージベースのフェンシングを設定するには、次の手順に従う必要があります。 これらはroot
として実行する必要があります。開始する前に、11.3項 「要件」を確認してください。
シナリオに応じて、1~3台のデバイスとともにまたはディスクレスモードでSBDを使用してください。概要については、11.4項 「SBDデバイスの数」を参照してください。詳細な設定については、以下に記載されています。
ストレージベースのフェンシングには、最大3つのSBDデバイスを使用できます。1~3台のデバイスを使用する場合、共有ストレージにすべてのノードからアクセス可能である必要があります。
共有ストレージデバイスのパスが永続的で、クラスタ内のすべてのノードで一致している必要があります。/dev/disk/by-id/dm-uuid-part1-mpath-abcedf12345
などの固定デバイス名を使用してください。
共有ストレージはFC (ファイバチャネル)、FCoE (Fibre Channel over Ethernet)、またはiSCSI経由で接続できます。仮想化環境では、ハイパーバイザーは共有ブロックデバイスを提供する場合があります。どの場合にも、共有ブロックデバイス上のコンテンツがすべてのクラスタノードに対して一貫性がある必要があります。キャッシュによってその一貫性が損なわれないようにしてください。
共有ストレージセグメントが、ホストベースのRAID、LVM2、またはDRBD*を「使用してはなりません」。DRBDは分割できますが、SBDでは2つの状態が存在することはできないため、これはSBDにとって問題になります。クラスタマルチデバイス(クラスタMD)は、SBDには使用できません。
ただし、信頼性向上のため、ストレージベースのRAIDとマルチパスの使用は推奨されます。
255を超えるノードでデバイスを共有しない限り、異なるクラスタ間でSBDデバイスを共有できます。
3つ以上のノードがあるクラスタの場合は、SBDをディスクレスモードで使用することもできます。
SBDは、最大3つのデバイスの使用をサポートしています。
最も単純な実装です。すべてのデータが同じ共有ストレージ上にあるクラスタに適しています。
この設定は、主に、ホストベースのミラーリングを使用しているものの3つ目のストレージデバイスが使用できない環境で役立ちます。1つのミラーログにアクセスできなくなっても、SBDは終了せず、クラスタは引き続き実行できます。ただし、SBDにはストレージの非同期分割を検出できるだけの情報が与えられていないので、ミラーログが1つだけ使用可能なときにもう一方をフェンスすることはありません。つまり、ストレージアレイのいずれかがダウンしたときに、2つ目の障害に自動的に耐えることはできません。
最も信頼性の高い設定です。障害または保守による1台のデバイスの機能停止から回復できます。複数のデバイスが失われた場合、およびクラスタパーティションまたはノードの状態に応じて必要な場合にのみ、SBD自体が終了します。少なくとも2つのデバイスにまだアクセス可能な場合は、フェンシングメッセージを正常に送信できます。
この設定は、ストレージが1つのアレイに制約されていない、比較的複雑なシナリオに適しています。ホストベースのミラーリングソリューションでは、1つのミラーログに1つのSBDを設定し(自分自身はミラーしない)、iSCSI上に追加のタイブレーカを設定できます。
この設定は、共有ストレージなしのフェンシングメカニズムが必要なときに便利です。このディスクレスモードでは、SBDは共有デバイスに頼らず、ハードウェアウォッチドッグを使用してノードをフェンスします。ただし、ディスクレスSBDは2ノードクラスタ用のスプリットブレインシナリオには対応できません。そのため、ディスクレスSBDを使用するには、3以上のノードが必要です。
フェンシングメカニズムとしてSBDを使用する場合、すべてのコンポーネントのタイムアウトを考慮することが重要です。それらのコンポーネントが相互に依存するためです。
このタイムアウトは、SBDデバイスの初期化中に設定されます。これは主にストレージのレイテンシに依存します。この時間内に大半のデバイスを正常に読み込む必要があります。それができない場合、そのノードでセルフフェンスを行うことがあります。
マルチパスセットアップまたはiSCSI上にSBDデバイスがある場合、パスの障害を検出して次のパスに切り替えるのに必要な時間に、タイムアウトを設定する必要があります。
またこれは、/etc/multipath.conf
でmax_polling_interval
の値がウォッチドッグ
のタイムアウト未満でなければならないことを意味します。
msgwait
タイムアウトこのタイムアウトは、SBDデバイスの初期化中に設定されます。この時間が経過するとSBDデバイス上のノードのスロットに書き込まれたメッセージが配信されたとみなされる時間を定義します。タイムアウトは、ノードでセルフフェンスを行う必要があることを検出するのに十分な長さでなければなりません。
ただし、msgwait
タイムアウトが比較的長い場合、フェンシングアクションが戻る前にフェンスされたクラスタノードが再加入することがあります。これは、SBD設定の SBD_DELAY_START
パラメータを設定することで軽減できます(手順 11.4のステップ 4で説明)。
stonith-timeout
このタイムアウトは、グローバルクラスタプロパティとしてCIBで設定されます。これは、STONITHアクション(再起動、オン、オフ)が完了するのを待つ時間の長さを定義します。
stonith-watchdog-timeout
このタイムアウトは、グローバルクラスタプロパティとしてCIBで設定されます。明示的に設定されていない場合は、デフォルトで0
に設定されます。これは1~3台のデバイスとともにSBDを使用するのに適しています。ディスクレスモードでSBDを使用する方法の詳細については、手順11.8「ディスクレスSBDの設定」を参照してください。
ウォッチドッグのタイムアウトを変更する場合は、他の2つのタイムアウトも調整する必要があります。次の「式」は、これら3つの値の関係を示しています。
Timeout (msgwait) >= (Timeout (watchdog) * 2) stonith-timeout = Timeout (msgwait) + 20%
たとえば、ウォッチドッグのタイムアウトを120
に設定した場合、msgwait
タイムアウトを240
に設定し、stonith-timeout
を288
に設定します。
ha-cluster-bootstrap スクリプトを使用してクラスタを設定し、SBDデバイスを初期化する場合、これらのタイムアウト間の関係が自動的に考慮されます。
SUSE Linux Enterprise High Availability Extensionには、ハードウェア固有のウォッチドッグドライバを提供する、いくつかのカーネルモジュールが付属しています。最もよく使用されるカーネルモジュールのリストについては、よく使用されるウォッチドッグドライバを参照してください。
運用環境のクラスタでは、ハードウェア固有のウォッチドッグドライバを使用することをお勧めします。ただし、ハードウェアに適合するウォッチドッグがない場合、カーネルウォッチドッグモジュールとしてsoftdog
を使用することができます。
High Availability Extensionはウォッチドッグに「フィード」するソフトウェアコンポーネントとしてSBDデーモンを使用します。
特定のシステムの正しいウォッチドッグカーネルモジュールを判断することは、容易ではありません。自動プロービングは頻繁に失敗します。その結果、正しいモジュールがロードされる前に、多くのモジュールがすでにロードされている状態になってしまいます。
表 11.1は、最もよく使用されるウォッチドッグドライバのリストです。お使いのハードウェアがそこに記載されていない場合、ディレクトリ/lib/modules/KERNEL_VERSION/kernel/drivers/watchdog
も選択肢のリストとして用意されています。または、ハードウェアベンダーに名前を問い合わせてください。
Hardware (ハードウェア) | ドライバ |
---|---|
HP | hpwdt |
Dell、Supermicro、Lenovo | iTCO_wdt |
Fujitsu | ipmi_watchdog |
IBMメインフレーム上のz/VMのVM | vmwatchdog |
Xen VM (DomU) | xen_wdt |
Generic | softdog |
一部のハードウェアベンダーは、システムのリセット用にウォッチドッグを使用するシステム管理ソフトウェアを提供しています(たとえば、HP ASRデーモンなど)。ウォッチドッグがSBDで使用されている場合は、このようなソフトウェアを無効にします。他のソフトウェアは、ウォッチドッグタイマにアクセスしないでください。
正しいウォッチドッグモジュールがロードされていることを確認するには、次の手順を実行します。
お使いのカーネルバージョンでインストールされているドライバをリストします。
root #
rpm
-ql kernel-VERSION |grep
watchdog
カーネルに現在ロードされているウォッチドッグモジュールをリストします。
root #
lsmod
|egrep
"(wd|dog)"
結果が表示されたら、間違ったモジュールをアンロードします。
root #
rmmod
WRONG_MODULE
お使いのハードウェアに適合するウォッチドッグモジュールを有効にします。
root #
echo
WATCHDOG_MODULE > /etc/modules-load.d/watchdog.confroot #
systemctl
restart systemd-modules-load
ウォッチドッグモジュールが正しくロードされているかどうかをテストします。
root #
lsmod
|egrep
"(wd|dog)"
運用環境のクラスタでは、ハードウェア固有のウォッチドッグドライバを使用することをお勧めします。ただし、ハードウェアに適合するウォッチドッグがない場合、カーネルウォッチドッグモジュールとしてsoftdog
を使用することができます。
softdogドライバはCPUが最低1つは動作中であることを前提とします。すべてのCPUが固まっている場合、システムを再起動させるsoftdogドライバのコードは実行されません。これに対して、ハードウェアウォッチドッグはすべてのCPUが固まっていても動作し続けます。
softdogドライバを有効にします。
root #
echo
softdog > /etc/modules-load.d/watchdog.conf
/etc/modules-load.d/watchdog.conf
にsoftdog
モジュールを追加し、サービスを再起動します。
root #
echo
softdog > /etc/modules-load.d/watchdog.confroot #
systemctl
restart systemd-modules-load
softdogウォッチドッグモジュールが正しくロードされているかどうかをテストします。
root #
lsmod
|grep
softdog
セットアップには次の手順が必要です。
開始する前に、SBDに使用するブロックデバイスが、11.3項で指定された要件を満たしていることを確認してください。
SBDデバイスを設定するときは、いくつかのタイムアウト値を考慮する必要があります。 詳細については、11.5項 「タイムアウトの計算」を参照してください。
ノード上で実行しているSBDデーモンがウォッチドッグタイマを十分な速さで更新していない場合、ノード自体が終了します。タイムアウトを設定したら、個別の環境でテストしてください。
共有ストレージでSBDを使用するには、まず1~3台のブロックデバイス上でメッセージングレイアウトを作成する必要があります。sbd create
コマンドは、指定された1つまたは複数のデバイスにメタデータヘッダを書き込みます。また、最大255ノードのメッセージングスロットを初期化します。追加のオプションを指定せずに実行する場合、このコマンドはデフォルトのタイムアウト設定を使用します。
SBD用に使用するデバイスには、重要なデータが一切ないようにしてください。sbd create
コマンドを実行すると、指定されたブロックデバイスの最初のメガバイトが、さらなる要求やバックアップなしに上書きされます。
SBDに使用するブロックデバイスを決定します。
次のコマンドで、SBDデバイスを初期化します。
root #
sbd
-d /dev/SBD create
(/dev/SBD
を実際のパス名で置き換えます。たとえば/dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg
です)。
SBDに複数のデバイスを使用するには、-d
オプションを複数回指定します。たとえば、次のようになります。
root #
sbd
-d /dev/SBD1 -d /dev/SBD2 -d /dev/SBD3 create
SBDデバイスがマルチパスグループにある場合は、-1
と-4
オプションを使用して、SBDに使用するタイムアウトを調整します。詳細については、11.5項 「タイムアウトの計算」を参照してください。タイムアウトはすべて秒単位で指定します。
root #
sbd
-d /dev/SBD -4 1801 -1 602 create
デバイスに書き込まれた内容を確認します。
root #
sbd
-d /dev/SBD dump Header version : 2.1 UUID : 619127f4-0e06-434c-84a0-ea82036e144c Number of slots : 255 Sector size : 512 Timeout (watchdog) : 60 Timeout (allocate) : 2 Timeout (loop) : 1 Timeout (msgwait) : 180 ==Header on disk /dev/SBD is dumped
ご覧のように、タイムアウトがヘッダにも保存され、それらに関するすべての参加ノードの合意が確保されます。
SBDデバイスを初期化したら、SBD設定ファイルを編集し、次にそれぞれのサービスを有効にして起動し、変更を有効にします。
ファイル/etc/sysconfig/sbd
を開きます。
次のパラメータを検索します。 SBD_DEVICE
SBDメッセージを交換するために監視および使用するデバイスを指定します。
SBDをお使いのSBDデバイスに置き換えて、この行を編集します。
SBD_DEVICE="/dev/SBD"
1行目で複数のデバイスを指定する必要がある場合は、セミコロンで区切って指定します(デバイスの順序は任意で構いません)。
SBD_DEVICE="/dev/SBD1; /dev/SBD2; /dev/SBD3"
SBDデバイスがアクセス不能な場合は、SBDデーモンが開始できなくなり、クラスタの起動を抑止します。
次のパラメータを検索します。 SBD_DELAY_START.
遅延を有効または無効にします。 SBD_DELAY_START
をyes
に設定します(msgwait
が比較的長い場合)。ただし、クラスタノードは非常に高速に起動します。 このパラメータをyes
に設定すると、ブート時にSBDの起動が遅れます。これは、仮想マシンで必要となることがあります。
SBDデバイスをSBD設定ファイルに追加したら、SBDデーモンを有効にします。SBDデーモンは、クラスタスタックの不可欠なコンポーネントです。これは、クラスタスタックが実行されているときに、実行されている必要があります。したがって、sbd
サービスは、pacemaker
サービスが開始されるたびに依存関係として開始されます。
各ノードで、SBDサービスを有効にします。
root #
systemctl
enable sbd
これは、Pacemakerサービスが開始されるたびに、Corosyncサービスと一緒に開始されます。
各ノードでクラスタスタックを再起動します。
root #
systemctl
stop pacemakerroot #
systemctl
start pacemaker
これによって、自動的にSBDデーモンの開始がトリガされます。
次の手順として、手順 11.6の説明に従ってSBDデバイスをテストします。
次のコマンドを使用すると、ノードスロットとそれらの現在のメッセージがSBDデバイスからダンプされます。
root #
sbd
-d /dev/SBD list
ここでSBDを使用して起動したすべてのクラスタノードが表示されます。たとえば、2ノードクラスタを使用している場合、両方のノードのメッセージスロットにはclear
と表示されます。
0 alice clear 1 bob clear
ノードの1つにテストメッセージを送信してみます。
root #
sbd
-d /dev/SBD message alice test
ノードがシステムログファイルにメッセージの受信を記録します。
May 03 16:08:31 alice sbd[66139]: /dev/SBD: notice: servant: Received command test from bob on disk /dev/SBD
これによって、SBDがノード上で実際に機能し、メッセージを受信できることが確認されます。
最後のステップとして、手順 11.7の説明に従ってクラスタ設定を調整する必要があります。
クラスタでSBDの使用を設定するには、クラスタ設定で次の操作を行う必要があります。
設定に適合する値に stonith-timeout パラメータを設定します。
SBD STONITHリソースを設定します。
stonith-timeout の計算については、11.5項 「タイムアウトの計算」を参照してください。
シェルを起動し、root
または同等のものとしてログインします。
crm
configure
を実行します。
次のように入力します。
crm(live)configure#
property
stonith-enabled="true" 1crm(live)configure#
property
stonith-watchdog-timeout=0 2crm(live)configure#
property
stonith-timeout="220s" 3
2ノードクラスタの場合、予測可能な遅延を希望するか、ランダムな遅延を希望するかを決めます。他のクラスタ設定については、このパラメータを設定する必要はありません。
このパラメータはSTONITHアクションを実行する前に静的遅延を有効にします。別々のフェンシングリソースおよび異なる遅延値が使用されている場合に、ノードが互いにフェンシングしないようにします。対象ノードは「フェンシングの競合」で失われます。2ノードクラスタのスプリットブレインシナリオの場合に、このパラメータを使用して、特定のノードが存続するよう「マーク付けする」ことができます。これを正常に実行するには、各ノードに2つのプリミティブSTONITHデバイスを作成することが必須です。次の設定では、スプリットブレインシナリオの場合に、aliceが勝利して存続します。
crm(live)configure#
primitive
st-sbd-alice stonith:external/sbd params \ pcmk_host_list=alice pcmk_delay_base=20crm(live)configure#
primitive
st-sbd-bob stonith:external/sbd params \ pcmk_host_list=bob pcmk_delay_base=0
このパラメータは、SBDなどの低速デバイスを使用する場合の二重フェンシングを防止します。これは、フェンシングデバイスに対するSTONITHアクションのランダム遅延を追加します。スプリットブレインシナリオの場合、両方のノードが互いにフェンスを試みる可能性がある2ノードクラスタでは特に重要です。
crm(live)configure#
primitive
stonith_sbd stonith:external/sbd params pcmk_delay_max=30
show
で変更内容をレビューします。
commit
で変更を送信し、exit
でcrmライブ設定を終了します。
リソースの起動後、SBDを使用するためにクラスタが正常に設定されます。ノードをフェンスする必要がある場合にこの方法を使用します。
ディスクレスモードでSBDを動作させることができます。このモードでは、次の場合にウォッチドッグデバイスを使用してノードをリセットします。クォーラムが失われた場合、監視されているデーモンが失われて回復しなかった場合、またはノードでフェンシングが必要であるとPacemakerが判断した場合。ディスクレスSBDは、クラスタの状態、クォーラム、およびいくつかの合理的な前提に応じた、ノードの「セルフフェンシング」に基づいています。STONITH SBDリソースプリミティブはCIBでは必要ありません。
2ノードクラスタのフェンシングメカニズムとしてディスクレスSBDを使用しないでください。3つ以上のノードを含むクラスタでのみ使用してください。ディスクレスモードのSBDでは、2ノードクラスタのスプリットブレインシナリオを処理できません。
ファイル/etc/sysconfig/sbd
を開き、次のエントリを使用します。
SBD_PACEMAKER=yes SBD_STARTMODE=always SBD_DELAY_START=no SBD_WATCHDOG_DEV=/dev/watchdog SBD_WATCHDOG_TIMEOUT=5
共有ディスクが使用されていないので、 SBD_DEVICE
エントリは不要です。このパラメータがない場合、sbd
サービスはSBDデバイスのウォッチャプロセスを開始しません。
各ノードで、SBDサービスを有効にします。
root #
systemctl
enable sbd
これは、Pacemakerサービスが開始されるたびに、Corosyncサービスと一緒に開始されます。
各ノードでクラスタスタックを再起動します。
root #
systemctl
stop pacemakerroot #
systemctl
start pacemaker
これによって、自動的にSBDデーモンの開始がトリガされます。
パラメータ have-watchdog=true が自動的に設定されているかどうかを確認します。
root #
crm
configure show | grep have-watchdog have-watchdog=true
crm configure
を実行し、crmシェルで次のクラスタプロパティを設定します。
crm(live)configure#
property
stonith-enabled="true" 1crm(live)configure#
property
stonith-watchdog-timeout=10 2
STONITHを使用しないクラスタはサポートされていないため、これがデフォルト設定になります。ただし、テスト目的でSTONITHが無効化されている場合は、再度このパラメータが | |
ディスクレスSBDの場合、このパラメータはゼロであってはなりません。これは、どれくらいの時間が経ったらフェンシングターゲットがすでにセルフフェンスを行ったとみなされるのかを定義します。したがって、その値は、
|
show
で変更内容をレビューします。
commit
で変更を送信し、exit
でcrmライブ設定を終了します。
SBDがノードフェンシング目的で期待どおりに機能するかどうかをテストするには、次のいずれかまたはすべての方法を使用します。
ノードNODENAMEのフェンシングアクションをトリガするには:
root #
crm
node fence NODENAME
当該ノードがフェンシングされているかどうか、および stonith-watchdog-timeoutの時間が経過した後に他のノードが当該ノードをフェンシングされたとしてみなしているかどうかを確認します。
SBD inquisitorのプロセスIDを特定します。
root #
systemctl
status sbd ● sbd.service - Shared-storage based fencing daemon Loaded: loaded (/usr/lib/systemd/system/sbd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2018-04-17 15:24:51 CEST; 6 days ago Docs: man:sbd(8) Process: 1844 ExecStart=/usr/sbin/sbd $SBD_OPTS -p /var/run/sbd.pid watch (code=exited, status=0/SUCCESS) Main PID: 1859 (sbd) Tasks: 4 (limit: 4915) CGroup: /system.slice/sbd.service ├─1859 sbd: inquisitor [...]
SBD inquisitorプロセスを終了することにより、SBD障害をシミュレーションします。この例では、SBD inquisitorのプロセスIDは1859
です)。
root #
kill
-9 1859
当該ノードは積極的にセルフフェンスを行います。他のノードは、当該ノードの喪失を認識し、 stonith-watchdog-timeoutの時間経過後に当該ノードがセルフフェンスを行ったとみなします。
通常の設定では、リソース停止動作の障害によって、フェンシングがトリガされます。フェンシングを手動でトリガするために、リソース停止動作の障害を発生させることができます。あるいは、以下に説明するように、リソース監視動作の設定を一時的に変更して、監視障害を発生させることができます。
リソース監視動作のon-fail=fence
プロパティを設定します。
op monitor interval=10 on-fail=fence
監視動作の障害を発生させます(たとえば、リソースがサービスに関連する場合は、それぞれのデーモンを終了させます)。
この障害により、フェンシングアクションがトリガされます。
STONITHによるノードフェンシング以外に、リソースレベルでストレージ保護を実現する他の方法があります。たとえば、SCSI-3とSCSI-4は永続予約を使用しますが、sfex
はロック機構を提供します。両方の方法について以下のサブセクションで説明します。
SCSI仕様3および4では、「永続予約」が定義されています。これらはSCSIプロトコル機能であり、I/Oフェンシングとフェールオーバーに使用できます。この機能は、sg_persist
Linuxコマンドで実装されます。
sg_persist
のバッキングディスクは、SCSIディスクとの互換性が必要です。sg_persist
は、SCSIディスクやiSCSI LUNなどのデバイスでのみ機能します。 IDE、SATA、またはSCSIプロトコルをサポートしないブロックデバイスでは、使用しないでください。
続行する前に、お使いのディスクが永続予約をサポートしているかどうかを確認してください。次のコマンドを使用します(DISKをデバイス名で置き換えてください)。
root #
sg_persist
-n --in --read-reservation -d /dev/DISK
結果に、ディスクが永続予約をサポートしているかどうかが示されます。
サポートされているディスク:
PR generation=0x0, there is NO reservation held
サポートされていないディスク:
PR in (Read reservation): command not supported Illegal request, Invalid opcode
上記のようなエラーメッセージが表示された場合は、古いディスクをSCSIと互換性のあるディスクに交換してください。それ以外の場合は、以下の手順に従います。
プリミティブリソースsg_persist
を作成するには、root
として次のコマンドを実行します。
root #
crm
configurecrm(live)configure#
primitive
sg sg_persist \ params devs="/dev/sdc" reservation_type=3 \ op monitor interval=60 timeout=60
sg_persist
プリミティブをマスタ-スレーブグループに追加します。
crm(live)configure#
ms
ms-sg sg \ meta master-max=1 notify=true
いくつかのテストをします。リソースがマスタ/スレーブ構成のステータスにある場合、マスタインスタンスが実行されているクラスタノードでは/dev/sdc1
をマウントして書き込みを行えますが、スレーブインスタンスが実行されているクラスタノードでは書き込みが禁止されます。
Ext4のファイルシステムプリミティブを追加します。
crm(live)configure#
primitive
ext4 ocf:heartbeat:Filesystem \ params device="/dev/sdc1" directory="/mnt/ext4" fstype=ext4
sg_persist
マスタとファイルシステムリソースの間に、次の順序関係とコロケーションを追加します。
crm(live)configure#
order
o-ms-sg-before-ext4 inf: ms-sg:promote ext4:startcrm(live)configure#
colocation
col-ext4-with-sg-persist inf: ext4 ms-sg:Master
show
コマンドで、すべての変更内容を確認します。
変更をコミットします.
詳細については、sg_persist
のマニュアルページを参照してください。
sfex
を使用した排他的なストレージアクティブ化の保証 #
このセクションでは、共有ストレージへのアクセスを1つのノードに排他的にロックする低レベルの追加メカニズムであるsfex
を紹介します。ただし、sfexは、STONITHと置き換えることはできないので注意してください。sfexには共有ストレージが必要なので、上記で説明したSBDノードフェンシングメカニズムは、ストレージの別のパーティションで使用することをお勧めします。
設計上、sfexは、同時実行が必要なワークロード(OCFS2など)では使用できません。これは、従来のフェールオーバースタイルのワークロードに対する保護の層として機能します。これは、実際にはSCSI-2予約と似ていますが、もっと一般的です。
共有ストレージ環境では、ストレージの小さなパーティションが1つ以上のロックの保存用に確保されます。
ノードは、保護されたリソースを取得する前に、まず、保護ロックを取得する必要があります。順序は、Pacemakerによって強制されます。sfexコンポーネントは、Pacemakerがスプリットブレイン条件に制約されても、ロックが2回以上付与されないことを保証します。
ノードのダウンが永続的にロックをブロックせず、他のノードが続行できるように、これらのロックも定期的に更新される必要があります。
次に、sfexで使用する共有パーティションの作成方法と、CIBでsfexロック用にリソースを設定する方法を説明します。1つのsfexパーティションは任意の数のロックを保持でき、ロックごとに1KBのストレージスペースを割り当てる必要があります。デフォルトでは、sfex_init
はパーティション上にロックを1つ作成します。
sfex用の共有パーティションは、保護するデータと同じ論理ユニットにある必要があります。
共有されたsfexパーティションは、ホストベースのRAIDやDRBDを使用してはなりません。
LVM2論理ボリュームを使用することは可能です。
sfexで使用する共有パーティションを作成します。このパーティションの名前を書き留め、以降の手順の/dev/sfex
をこの名前で置き換えます。
次のコマンドでsfexメタデータを作成します。
root #
sfex_init
-n 1 /dev/sfex
メタデータが正しく作成されたかどうか検証します。
root #
sfex_stat
-i 1 /dev/sfex ; echo $?
現在、ロックがかかっていないので、このコマンドは、2
を返すはずです。
sfexロックは、CIB内のリソースを介して表現され、次のように設定されます。
crm(live)configure#
primitive
sfex_1 ocf:heartbeat:sfex \ # params device="/dev/sfex" index="1" collision_timeout="1" \ lock_timeout="70" monitor_interval="10" \ # op monitor interval="10s" timeout="30s" on-fail="fence"
sfexロックによってリソースを保護するには、保護対象のリソースとsfexリソース間の必須の順序付けと配置の制約を作成します。保護対象のリソースがfilesystem1
というIDを持つ場合は、次のようになります。
crm(live)configure#
order
order-sfex-1 inf: sfex_1 filesystem1crm(live)configure#
colocation
col-sfex-1 inf: filesystem1 sfex_1
グループ構文を使用する場合は、sfexリソースを最初のリソースとしてグループに追加します。
crm(live)configure#
group
LAMP sfex_1 filesystem1 apache ipaddr
crmシェル(crmsh)またはHawk2などのクラスタ管理ツールは、root
ユーザまたはhaclient
グループ内のユーザが使用できます。デフォルトで、これらのユーザは完全な読み込み/書き込みのアクセス権を持ちます。アクセスを制限するか、または詳細なアクセス権を割り当てるには、「アクセス制御リスト」(ACL)を使用できます。
アクセス制御リストは、順序付けされたアクセスルールセットで構成されています。各ルールにより、クラスタ設定の一部への読み込みまたは書き込みアクセスの許可、またはアクセスの拒否が行われます。ルールは通常、組み合わせて特定の役割を生成し、ユーザを自分のタスクに一致する役割に割り当てることができます。
このACLマニュアルは、pacemaker-2.0
以上のCIB構文バージョンでCIBを検証する場合にのみ適用します。この検証方法およびCIBバージョンのアップグレード方法の詳細については、注記: CIB構文バージョンのアップグレードを参照してください。
SUSE Linux Enterprise High Availability Extension 11 SPxからアップグレードする一方で、それまで使用してきたCIBバージョンを保持する場合は、SUSE Linux Enterprise High Availability Extension 11 SP3以前の『管理ガイド』で「アクセス制御リスト」の章を参照してください。https://documentation.suse.com/sle-ha-11から入手できます。
クラスタでACLの使用を開始する前に、次の条件が満たされていることを確認します。
NIS、Active Directoryを使用するか、またはすべてのノードに同じユーザを手動で追加して、クラスタ内のすべてのノード上に同じユーザがいることを確認します。
ACLでアクセス権を変更したいすべてのユーザがhaclient
グループに属している必要があります。
すべてのユーザが絶対パス/usr/sbin/crm
でcrmshを実行する必要があります。
権限のないユーザがcrmshを実行する場合は、/usr/sbin
を使用して、PATH
変数を展開する必要があります。
ACLはオプションの機能です。デフォルトでは、ACLの使用は無効になっています。
ACL機能が無効化された場合、root
およびhaclient
グループに属するすべてのユーザは、クラスタ設定への完全な読み込み/書き込みアクセス権を持ちます。
ACLが有効化され、設定される場合でも、root
およびデフォルトのCRM所有者haclient
は両方とも、「常に」クラスタ設定への完全なアクセス権を持ちます。
ACLを使用するには、XPathに関するいくらかの知識が必要になります。XPathはXMLドキュメントでノードを選択するための言語です。http://en.wikipedia.org/wiki/XPathを参照するか、http://www.w3.org/TR/xpath/の仕様を確認してください。
ACLの設定を開始する前に、ACLの使用を「有効にする」必要があります。有効にするには、crmshで次のコマンドを使用します。
root #
crm
configure property enable-acl=true
または、手順12.1「Hawk2でのACLの使用の有効化」で説明するように、Hawk2を使用します。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択して、グローバルクラスタオプションとそれらの現在の値を表示します。
No
で追加されます。
値をYes
に設定して変更を適用します。
アクセス制御リストは、順序付けされたアクセスルールセットで構成されています。各ルールにより、クラスタ設定の一部への読み込みまたは書き込みアクセスの許可、またはアクセスの拒否が行われます。ルールは通常、組み合わせて特定の役割を生成し、ユーザを自分のタスクに一致する役割に割り当てることができます。ACLの役割はCIBへのアクセス権を表すルールのセットです。ルールは次の要素で構成されています。
read
、write
、またはdeny
のようなアクセス権。
ルールを適用する場所の指定。種類、ID参照、またはXPath式を使用して指定できます。
通常、ACLを役割にバンドルし、システムユーザ(ACLターゲット)に特定の役割を割り当てると便利です。ACLルールを作成するためには、次の2つの方法があります。
12.3.1項 「XPath式によるACLルールの設定」。ACLルールを作成するためには、その記述言語であるXMLの構造を理解している必要があります。
12.3.2項 「短縮によるACLルールの設定」。簡略構文を作成し、ACLルールが一致するオブジェクトに適用します。
XPathによってACLルールを管理するには、その記述言語であるXMLの構造を理解している必要があります。XMLでクラスタ設定を表示する次のコマンドで構造を取得します(例 12.1を参照)。
root #
crm
configure show xml
<num_updates="59" dc-uuid="175704363" crm_feature_set="3.0.9" validate-with="pacemaker-2.0" epoch="96" admin_epoch="0" cib-last-written="Fri Aug 8 13:47:28 2014" have-quorum="1"> <configuration> <crm_config> <cluster_property_set id="cib-bootstrap-options"> <nvpair name="stonith-enabled" value="true" id="cib-bootstrap-options-stonith-enabled"/> [...] </cluster_property_set> </crm_config> <nodes> <node id="175704363" uname="alice"/> <node id="175704619" uname="bob"/> </nodes> <resources> [...] </resources> <constraints/> <rsc_defaults> [...] </rsc_defaults> <op_defaults> [...] </op_defaults> <configuration> </cib>
XPath言語を使用して、このXMLドキュメント内のノードを見つけることができます。たとえば、ルートノード(cib
)を選択するには、XPath式/cib
を使用します。グローバルクラスタ設定を見つけるには、XPath式/cib/configuration/crm_config
を使用します。
一例として、表12.1「オペレータ役割 - アクセスタイプおよびXPath式」は、「オペレータ」の役割を作成するためのパラメータ(アクセスタイプおよびXPath式)を示しています。この役割を持つユーザは、2番目の列で説明されるタスクのみ実行することができ、リソースを再構成することはできません(たとえば、パラメータや操作の変更など)。また、コロケーションや順序の制約の設定を変更することもできません。
タイプ |
XPath/説明 |
---|---|
書き込み |
//crm_config//nvpair[@name='maintenance-mode'] クラスタ保守モードをオンまたはオフにします。 |
書き込み |
//op_defaults//nvpair[@name='record-pending'] 保留中の操作を記録するかを選択します。 |
書き込み |
//nodes/node//nvpair[@name='standby'] ノードをオンラインまたはスタンバイモードで設定します。 |
書き込み |
//resources//nvpair[@name='target-role'] リソースを開始、停止、昇格または降格します。 |
書き込み |
//resources//nvpair[@name='maintenance'] リソースを保守モードにするかどうかを選択します。 |
書き込み |
//constraints/rsc_location リソースをノードから別のノードにマイグレート/移動します。 |
読み込み |
/cib クラスタのステータスを表示します。 |
XML構造を扱いたくないユーザ向には、より簡単な方法があります。
たとえば、次のXPathを検討します。
//*[@id="rsc1"]
このXPathは、IDがrsc1
であるXMLノードをすべて探し出します。
短縮構文はこのように書かれます。
ref:"rsc1"
これは制約にも使用できます。これが冗長なXPathです。
//constraints/rsc_location
短縮構文はこのように書かれます。
type:"rsc_location"
短縮構文はcrmshおよびHawk2で使用できます。CIBデーモンは一致するオブジェクトにACLルールを適用する方法を認識しています。
次の手順は、monitor
役割を定義し、それをユーザに割り当てることで、クラスタ設定への読み込み専用アクセスを設定する方法を示しています。または、手順12.4「監視の役割を追加して、crmshを持つユーザに割り当てる」で説明されているように、crmshを使用してこの操作を実行することもできます。
Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。をクリックします。
固有なmonitor
などを入力します。
アクセスRead
を選択します。
/cib
を入力します。
をクリックします。
この操作は、monitor
の名前を持つ新しい役割を作成して、read
の権利を設定し、XPath式/cib
を使用してCIB内のすべての要素に適用します。
必要に応じてプラスアイコンをクリックしてルールを追加し、個別のパラメータを指定します。
上矢印や下矢印のボタンを使用して、個別のルールをソートできます。
リソースや制約に対するアクセス権を設定するには、12.3.2項 「短縮によるACLルールの設定」で説明したように、短縮構文も使用できます。
次の手順は、monitor
役割を定義し、それをユーザに割り当てることで、クラスタ設定への読み込み専用アクセスを設定する方法を示しています。
root
としてログインします。
crmshの対話モードを開始します。
root #
crm
configurecrm(live)configure#
ACLの役割を次のとおり定義します。
role
コマンドを使用して、新しい役割を定義します。
crm(live)configure#
role
monitor read xpath:"/cib"
前のコマンドは、monitor
の名前を持つ新しい役割を作成して、read
の権利を設定し、XPath式/cib
を使用してCIB内のすべての要素に適用します。必要な場合は、アクセス権およびXPath引数をさらに追加できます。
必要に応じてさらに役割を追加します。
役割を1つ以上のACLターゲットに割り当てます。このACLターゲットは、該当のシステムユーザです。これらのシステムユーザがhaclient
グループに属していることを確認します。
crm(live)configure#
acl_target
tux monitor
変更を確認します:
crm(live)configure#
show
変更をコミットします:
crm(live)configure#
commit
リソースや制約に対するアクセス権を設定するには、12.3.2項 「短縮によるACLルールの設定」で説明したように、短縮構文も使用できます。
ボンディングデバイスの設定には、ボンディングモジュールオプションを使用します。ボンディングデバイスの振る舞いは、ボンディングデバイスのモードによって決定されます。デフォルトの動作は、mode=active-backup
であり、アクティブなスレーブに障害が発生すると、別のスレーブデバイスがアクティブになります。
Corosyncの使用時は、クラスタソフトウェアでボンディングデバイスが管理されることはありません。したがって、ボンディングデバイスにアクセスする可能性のあるクラスタノードごとに、ボンディングデバイスを設定する必要があります。
ボンディングデバイスを設定するには、1つのボンディングデバイスに集めることができる数台のEthernetデバイスが必要です。次の手順に従います。
root
としてYaSTを開始し、 › の順に選択します。
で、 タブに切り替えて、使用可能なデバイスを表示します。
1つのボンディングデバイスに集めるEthernetデバイスにIPアドレスが割り当てられているかどうかチェックします。割り当てられている場合は、それを変更します。
選択するデバイスを選択して、
をクリックします。開いている
ダイアログの タブで、 オプションを選択します。をクリックして、 ダイアログの タブに戻ります。
新しいボンディングデバイスを追加するには:
をクリックして、 を に変更します。 で続行します。
IPアドレスをボンディングデバイスに割り当てる方法を選択します。3つの方法から選択できます。
リンクとIPなしのセットアップ(ボンディングスレーブ)
可変IPアドレス(DHCPまたはZeroconf)
固定IPアドレス
ご使用の環境に適合する方法を使用します。Corosyncで仮想IPアドレスを管理する場合は、
を選択し、インタフェースにIPアドレスを割り当てます。タブに切り替えます。
ステップ 3.bでボンディングスレーブとして設定したEthernetデバイスが表示されます。ボンドに含めるEthernetデバイスを選択するには、 の下にある、各デバイスの前のチェックボックスを有効にします。
を編集します。次のモードを使用できます。
balance-rr
パケットが正しい順序で転送されなくなる代わりに、負荷分散と耐障害性が提供されます。これは、TCPの再構築時などに遅延の原因になる場合があります。
active-backup
耐障害性を提供します。
balance-xor
負荷分散と耐障害性を提供します。
ブロードキャスト
耐障害性を提供します。
802.3ad
接続されるスイッチでサポートされる場合は、ダイナミックリンク集合を提供します。
balance-tlb
発信トラフィックの負荷分散を提供します。
balance-alb
使用中にハードウェアアドレスの変更が可能なネットワークデバイスを使用する場合は、着信トラフィックと発信トラフィックの負荷分散を提供します。
miimon=100
を必ず追加します。このパラメータがなければ、リンクが定期的にチェックされないため、ボンディングドライバは、障害リンクで引き続きパケットを失う可能性があります。
/etc/sysconfig/network/ifcfg-bondDEVICENUMBER
に設定を書き込みます。
ボンディングスレーブのインタフェースを別のものに置き換える必要が生じることがあります。たとえば、それぞれのネットワークデバイスに常に障害が発生する場合などです。解決方法として、ボンディングスレーブのホットプラグを設定します。デバイスをMACアドレスではなくバスIDによって一致させるために、udev
ルールを変更する必要もあります。これにより、ハードウェアが許可する場合は、不具合のあるハードウェア(同じスロットにあるのにMACアドレスが異なるネットワークカードなど)を置き換えることができます。
手動の設定を行う場合は、『SUSE Linux Enterprise High Availability Extension Administration Guide』、「Basic Networking」の章の「Hotplugging of Bonding Slaves」というセクションを参照してください。
root
としてYaSTを開始し、 › の順に選択します。
で、 タブに切り替えて、すでに設定済みのデバイスを表示します。ボンディングスレーブがすでに設定済みの場合、 列にそのことが示されます。
1つのボンディングデバイスに集められたEthernetデバイスのそれぞれに対して、次の手順を実行します。
選択するデバイスを選択して、
をクリックします。 ダイアログが開きます。
ホットプラグ
]に設定されていることを確認します。
タブに切り替えます。
で、 をクリックして オプションを選択します。
および をクリックして、 ダイアログの タブに戻ります。この時点でEthernetデバイスエントリをクリックすると、下のペインにバスIDを含むデバイスの詳細が表示されます。
をクリックして変更を確定し、ネットワーク設定を終了します。
ブート時にネットワークセットアップはホットプラグスレーブを待機しませんが、ボンドの準備が整うのを待機します。これには少なくとも1つのスレーブが利用可能であることが必要です。スレーブインタフェースの1つがシステムから削除されると(NICドライバからアンバインド、NICドライバのrmmod
、または実際のPCIホットプラグ取り外し)、カーネルによってボンドから自動的に削除されます。システムに新しいカードが追加されると(スロットのハードウェアが置換されると)、udev
は、バスベースの永続名規則を適用することで名前を変更し、ifup
を呼び出します。ifup
呼び出しによって、ボンドに自動的に追加されます。
全モードおよび多数のオプションの詳細については、kernel-source
パッケージをインストールした後に参照できる/usr/src/linux/Documentation/networking/bonding.txt
ファイルの内容です。
High Availabilityセットアップの場合は、そのファイルで説明されているmiimon
およびuse_carrier
オプションが特に重要です。
High Availability Extensionは、負荷分散の2つのテクノロジ(Linux仮想サーバ(LVS)およびHAProxy)をサポートしています。これらの主な相違点は、Linux仮想サーバがOSI第4層(トランスポート)でカーネルのネットワーク層を設定するのに対し、HAProxyは第7層(アプリケーション)のユーザスペースで実行されることにあります。このように、Linux仮想サーバは、より少ないリソースで、より高い負荷を処理します。それに対してHAProxyは、トラフィックを調査し、SSL停止を実行して、トラフィックのコンテンツに基づいたディパッチに関する決定を行います。
一方、Linux仮想サーバには、IPVS (IP Virtual Server)およびKTCPVS (Kernel TCP Virtual Server)という2つの異なるソフトウェアが組み込まれています。IPVSは第4層の負荷分散を提供するのに対し、KTCPVSは第7層の負荷分散を提供します。
この項では、高可用性と組み合わせた負荷分散について概説してから、Linux仮想サーバとHAProxyについて簡単に説明します。最後に、追加情報を紹介します。
実際のサーバとロードバランサは、高速LANまたは地理的に分散されたWANのいずれでも、相互に接続できます。ロードバランサは、さまざまなサーバに要求をディスパッチします。ロードバランサによって、クラスタのパラレルサービスが1つのIPアドレス(仮想IPアドレスまたはVIP)上の仮想サービスであるかのようにみえます。要求のディスパッチでは、IP負荷分散技術か、アプリケーションレベル負荷分散技術を使用できます。クラスタ内のノードのトランスペアレントな追加または削除によって、システムのスケーラビリティが達成されます。
ノードまたはサービスの障害検出と仮想サーバシステム全体の適切な再設定によって、常に高い可用性が実現されます。
いくつかの負荷分散戦略があります。ここに、Linux仮想サーバに適した第4層の各戦略を示します。
ラウンドロビン: 最も簡単な戦略は、各接続を異なるアドレスに順番に指定することです。たとえば、DNSサーバは指定のホスト名に対するいくつかのエントリを持つことができます。DNSラウンドロビンでは、DNSサーバは循環しながらそれらのエントリすべてを順番に返します。このように、異なるクライアントは異なるアドレスを表示します。
「最良の」サーバの選択: これにはいくつかのデメリットがありますが、「応答する最初のサーバ」または「負荷の最も少ないサーバ」アプローチで分散を実装できます。
サーバあたりの接続数の分散: ユーザとサーバ間のロードバランサは、複数のサーバ間でユーザ数を分割できます。
地理的位置: 近くのサーバにクライアントをダイレクトすることができます。
ここに、HAProxyに適した第7層の各戦略を示します。
URI: HTTPコンテンツを調査し、この特定のURIに最適なサーバにディスパッチします。
URLパラメータ、RDPクッキー: セッションパラメータ(ポストパラメータの場合もある)、またはRDP(リモートデスクトッププロトコル)セッションクッキーのHTTPコンテンツを調査し、このセッションを提供するサーバにディパッチします。
一部の重複はありますが、HAProxyはLVS/ipvsadm
が不十分なシナリオで使用できます(およびその逆もあり)。
SSL停止: フロントエンドロードバランサは、SSL層を処理できます。このため、クラウドノードは、SSLキーにアクセスする必要はなく、ロードバランサのSSLアクセラレータを利用できます。
アプリケーションレベル: HAProxyはアプリケーションレベルで動作するため、コンテンツストリームによって負荷分散の決定に影響を与えることができます。これにより、クッキーや他のフィルタに基づいた永続化が許可されます。
一方、LVS/ipvsadm
は、HAProxyで完全に置き換えることはできません。
LVSは、ロードバランサがインバウンドストリーム内にのみ配置される「ダイレクトルーティング」をサポートし、アウトバウンドトラフィックは直接クライアントにルーティングされます。これにより、非対称環境でのスループットがかなり向上する可能性があります。
LVSは、(conntrackd
を介した)ステートフルな接続テーブルレプリケーションをサポートしています。これにより、クライアントおよびサーバに透過なロードバランサのフェールオーバーが可能になります。
以降のセクションでは、主要なLVSのコンポーネントと概念の概要を示します。その後、High Availability ExtensionでのLinux仮想サーバのセットアップ方法について説明します。
LVSの主要コンポーネントは、ip_vs (またはIPVS)カーネルコードです。このコードは、Linuxカーネル内でトランスポート層の負荷分散(レイヤ-4スイッチング)を実装します。IPVSコードを含むLinuxカーネルを実行するノードは、ディレクターと呼ばれます。ディレクターで実行されるIPVSコードは、LVSの必須機能です。
クライアントがディレクターに接続すると、着信要求がすべてのクラスタノードに負荷分散されます。つまり、ディレクターは、変更されたルーティングルール(LVSを機能させる)セットを使用して、パケットを実サーバに転送します。たとえば、ディレクターは、接続の送受信端でないと、受信確認を送信しません。ディレクターは、エンドユーザから実サーバ(要求を処理するアプリケーションを実行するホスト)にパケットを転送する特殊なルータとして動作します。
デフォルトでは、IPVSモジュールはカーネルにインストールされている必要はありません。IPVSカーネルモジュールは、kernel-default
パッケージに含まれています。
ldirectord
デーモンは、Linux仮想サーバを管理し、負荷分散型仮想サーバのLVSクラスタ内の実サーバを監視するユーザスペースデーモンです。設定ファイル/etc/ha.d/ldirectord.cf
は、仮想サービスとそれらに関連付けられた実サーバを指定し、LVSリダイレクタとしてサーバを設定する方法をldirecord
に指示します。このデーモンは、その初期化時にクラスタの仮想サービスを生成します。
ldirectord
デーモンは、既知のURLを定期的に要求し、応答を確認することにより、実サーバのヘルスを監視します。障害が発生した実サーバは、ロードバランサで使用可能なサーバのリストから削除されます。サービス監視は、ダウンしていたサーバが回復し、再度機能していることを検出すると、そのサーバを使用可能サーバリストに戻します。すべての実サーバがダウンする場合、Webサービスのリダイレクト先にするフォールバックサーバを指定できます。通常、フォールバックサーバは、ローカルホストであり、Webサービスが一時的に使用できないことについて緊急ページを表示します。
ldirectord
はipvsadm
ツール(ipvsadm
パッケージ)を使用して、Linuxカーネル内の仮想サーバテーブルを操作します。
ディレクターがクライアントから実サーバにパケットを送信する方法は、3つあります。
着信要求は仮想IPで着信します。宛先のIPアドレスとポートを、選択した実サーバのIPアドレスとポートに変更することで、着信要求は実サーバに転送されます。実サーバはロードバランサに応答を送信し、そのロードバランサが宛先IPアドレスを変更して、応答をクライアントへ転送します。その結果、エンドユーザは予期されたソースから応答を受信します。すべてのトラフィックはロードバランサを通過するので、通常、ロードバランサがクラスタのボトルネックになります。
IPトンネリングでは、あるIPアドレスにアドレス指定されたパケットを別のアドレス(別のネットワーク上でも可能)にリダイレクトできます。LVSは、IPトンネルを介して実サーバに要求を送信し(別のIPアドレスにリダイレクト)、実サーバは、独自のルーティングテーブルを使用して、クライアントに直接応答します。クラスタメンバは、さまざまなサブネットに属すことができます。
エンドユーザからのパケットを、直接、実サーバに転送します。IPパケットは変更されないので、仮想サーバのIPアドレスのトラフィックを受け付けるように、実サーバを設定する必要があります。実サーバからの応答は、直接、クライアントに送信されます。実サーバとロードバランサは、同じ物理ネットワークセグメントに属する必要があります。
クライアントから要求された新しい接続に使用する実サーバの決定は、さまざまなアルゴリズムを使用して実装されます。それらは、モジュールとして使用可能であり、特定のニーズに合わせて調整できます。使用可能なモジュールの概要については、ipvsadm(8)
のマニュアルページを参照してください。ディレクターは、クライアントから接続要求を受信すると、スケジュールに基づいて実際のサーバをクライアントに割り当てます。スケジューラは、IPVSカーネルコードの一部として、次の新しい接続を取得する実際のサーバを決定します。
Linux仮想サーバのスケジューリングアルゴリズムの詳細については、http://kb.linuxvirtualserver.org/wiki/IPVSを参照してください。また、ipvsadm
のマニュアルページで--scheduler
を検索してください。
関連するHAProxy負荷分散戦略については、http://www.haproxy.org/download/1.6/doc/configuration.txtを参照してください。
YaST IP負荷分散モジュールを使用して、カーネルベースのIP負荷分散を設定できます。このモジュールは、ldirectord
のフロントエンドです。
IP負荷分散ダイアログにアクセスするには、root
としてYaSTを開始し、 › の順に選択します。または、コマンドラインで「yast2 iplb
」と入力して、root
としてYaSTクラスタモジュールを起動します。
YaSTモジュールは、その設定を/etc/ha.d/ldirectord.cf
に書き込みます。YaSTモジュール内で使用できるタブは、設定ファイル/etc/ha.d/ldirectord.cf
の構造、グローバルオプションの定義、および仮想サービス用オプションの定義に対応しています。
設定例とその結果のロードバランサ/実サーバ間のプロセスについては、例14.1「単純なldirectord設定」を参照してください。
特定のパラメータを仮想サーバセクションとグローバルセクションの両方で指定した場合は、仮想サーバセクションで定義した値が、グローバルセクションで定義した値に優先します。
次の手順では、重要なグローバルパラメータの設定方法を示します。個々のパラメータ(および、ここに記載されていないパラメータ)の詳細については、ldirectord
のマニュアルページを参照してください。
ldirectord
が各実サーバに接続していて、それらがまだオンラインかどうか確認する間隔を定義します。
で、最後の確認後に実サーバが応答する期限を設定します。
ldirectord
が、何回、実サーバに要求すると、確認が失敗したと見なされるか定義できます。
で、ネゴシエーション確認のタイムアウトを秒単位で定義します。
で、すべての実サーバがダウンした場合にWebサービスのリダイレクト先にするWebサーバのホスト名とIPアドレスを入力します。
実サーバへの接続ステータスが変わったら、システムにアラートを送信させたい場合は、有効な電子メールアドレスを
に入力します。で、実サーバにアクセスできない状態が続く場合、何秒後に電子メールアラートを繰り返すか定義します。
で、電子メールアラートを送信する必要のあるサーバのステータスを指定します。複数の状態を定義する場合は、カンマで区切ったリストを使用します。
ldirectord
に設定ファイルを継続的に監視させるかどうか定義します。yes
に設定した場合は、変更のたびに、設定ファイルが自動的にリロードされます。
0
に設定され、新しい接続が受け入れられなくなります。すでに確立している接続は、タイムアウトするまで持続します。
ロギングに代替パスを使用するには、ldirectord
は、そのログファイルを/var/log/ldirectord.log
に書き込みます。
仮想サービスごとに、2、3のパラメータを定義することによって、1つ以上の仮想サービスを設定できます。次の手順で、仮想サービスの重要なパラメータを設定する方法を示します。個々のパラメータ(および、ここに記載されていないパラメータ)の詳細については、ldirectord
のマニュアルページを参照してください。
YaST IP負荷分散モジュール内で、
タブに切り替えます。で新しい仮想サーバを追加するか、 で既存の仮想サーバを編集します。新しいダイアログに、使用可能なオプションが表示されます。
VIP:port
サービスの任意の集まりを1つの仮想サービスにまとめる方法です。
gate
、ipip
、またはmasq
のいずれかにする必要があります(14.2.3項 「パケット転送」参照)。
ボタンをクリックし、実サーバごとに必要な引数を入力します。
ネゴシエーション
]を選択します。
ネゴシエーション
]に設定した場合は、監視するサービスのタイプも定義する必要があります。 ドロップダウンボックスから選択してください。
で、確認間隔中に各実サーバで要求されるオブジェクトへのURLを入力します。
実サーバからの応答に一定の文字列(「I am alive」メッセージ)が含まれているかどうか確認する場合は、一致する必要のある正規表現を定義します。正規表現を に入力します。実サーバからの応答にこの表現が含まれている場合、実サーバはアクティブとみなされます。
ステップ 6で選択した のタイプによっては、認証のためのパラメータをさらに指定する必要があります。 タブに切り替えて、 、 、 、または などの詳細を入力します。 詳細については、YaSTヘルプのテキストか、ldirectord
のマニュアルページを参照してください。
タブに切り替えます。
ロードに使用するipvsadm(8)
のマニュアルページを参照してください。
使用するtcp
またはudp
のどちらかにする必要があります。仮想サービスをファイアウォールマークとして指定する場合は、プロトコルをfwm
にする必要があります。
必要な場合は、さらにパラメータを定義します。/etc/ha.d/ldirectord.cf
に書き込みます。
図14.1「YaST IP負荷分散 - グローバルパラメータ」と図14.2「YaST IP負荷分散 - 仮想サービス」で示された値を使用すると、次のような設定になり、/etc/ha.d/ldirectord.cf
で定義されます。
autoreload = yes 1 checkinterval = 5 2 checktimeout = 3 3 quiescent = yes 4 virtual = 192.168.0.200:80 5 checktype = negotiate 6 fallback = 127.0.0.1:80 7 protocol = tcp 8 real = 192.168.0.110:80 gate 9 real = 192.168.0.120:80 gate 9 receive = "still alive" 10 request = "test.html" 11 scheduler = wlc 12 service = http 13
| |
実サーバがまだオンラインかどうか確認するため、 | |
最後の確認後、実サーバが応答しなければならない時間的な期限 | |
障害が発生した実サーバをカーネルのLVSテーブルから削除せず、代わりに、それらのサーバの重み付けを | |
LVSの仮想IPアドレス(VIP)。LVSはポート | |
実サーバがまだアクティブかどうかをテストするための確認のタイプ。 | |
このサービス用のすべての実サーバがダウンしている場合に、Webサービスのリダイレクト先にするサーバ。 | |
使用するプロトコル。 | |
ポート | |
実サーバからの応答文字列内で一致する必要のある正規表現。 | |
確認間隔中に、各実サーバで要求されるオブジェクトへのURI。 | |
負荷分散に使用するスケジューラが選択されています。 | |
監視するサービスのタイプ |
この設定を使用すると、次のような処理フローになります: ldirectord
が、5秒ごとに(2)各実サーバに接続し、9と11で指定されているように、192.168.0.110:80/test.html
または192.168.0.120:80/test.html
を要求します。予期されたstill alive
文字列(10)を、最後の確認から 3秒以内(3)に実サーバから受信しない場合は、実サーバが使用可能なサーバのプールから削除されます。ただし、quiescent=yes
が設定されているので(4)、実サーバは、LVSテーブルからは削除されません。代わりに、その重み付けが0
に設定されます。その結果、この実サーバへの新しい接続は受け付けられなくなります。すでに確立されている接続は、タイムアウトするまで持続します。
YaSTによるldirectord
の設定に加えて、LVS設定を完了するには、次の条件を満たす必要があります。
実サーバは、必要なサービスを提供するように正しく設定します。
負荷分散サーバは、IP転送を使用して実サーバにトラフィックをルーティングできる必要があります。実サーバのネットワーク設定は、選択したパケット転送方法によって左右されます。
負荷分散サーバをシステム全体のシングルポイント障害にしないため、ロードバランサのバックアップを1つ以上セットアップする必要があります。クラスタ設定では、ldirectord
にプリミティブリソースを設定して、ハードウェア障害の場合にldirectord
が他のサーバにフェールオーバーできるようにします。
ロードバランサのバックアップにも、その作業を達成するために、ldirectord
設定ファイルが必要なので、ロードバランサのバックアップとして使用するすべてのサーバ上で/etc/ha.d/ldirectord.cf
が使用できるようにします。設定ファイルは、4.5項 「すべてのノードへの設定の転送」で説明されているように、Csync2で同期できます。
次のセクションでは、HAProxyの概要とHigh Availabilityでのセットアップ方法について説明します。ロードバランサは、すべての要求をそのバックエンドサーバに分配します。あるマスタで障害が発生すると、スレーブがマスタになることを意味する、アクティブ/パッシブとして設定されます。このようなシナリオでは、ユーザは中断したことに気付きません。
このセクションでは、次のセットアップを使用します。
ロードバランサー、IPアドレス192.168.1.99
仮想の浮動IPアドレス192.168.1.99
サーバ(通常はWebコンテンツ用) www.example1.com
(IP: 192.168.1.200
)およびwww.example2.com
(IP: 192.168.1.201
)
HAProxyを設定するには、次の手順に従います。
haproxy
パッケージをインストールします。
次のコンテンツを含む/etc/haproxy/haproxy.cfg
ファイルを作成します。
global 1 maxconn 256 daemon defaults 2 log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 timeout connect 5000 3 timeout client 50s 4 timeout server 50000 5 frontend LB bind 192.168.1.99:80 6 reqadd X-Forwarded-Proto:\ http default_backend LB backend LB mode http stats enable stats hide-version stats uri /stats stats realm Haproxy\ Statistics stats auth haproxy:password 7 balance roundrobin 8 option httpclose option forwardfor cookie LB insert option httpchk GET /robots.txt HTTP/1.0 server web1-srv 192.168.1.200:80 cookie web1-srv check server web2-srv 192.168.1.201:80 cookie web2-srv check
プロセスワイドでOS固有のオプションを含むセクション。
| |
セクションの宣言後に、他のすべてのセクションのデフォルトパラメータを設定するセクション。次の重要な行があります。
| |
サーバへの接続試行が成功するまで待機する最大時間。 | |
クライアント側の最大非アクティブ時間。 | |
サーバ側の最大非アクティブ時間。 | |
フロントエンドおよびバックエンドセクションを1つに結合するセクション。
| |
HAProxy Statisticレポートページの認証情報。 | |
負荷分散はラウンドロビン処理で動作します。 |
設定ファイルをテストします。
root #
haproxy
-f /etc/haproxy/haproxy.cfg -c
Csync2の設定ファイル/etc/csync2/csync2.cfg
に次の行を追加して、HAProxy設定ファイルが含まれていることを確認します。
include /etc/haproxy/haproxy.cfg
それを同期します。
root #
csync2
-f /etc/haproxy/haproxy.cfgroot #
csync2
-xv
Csync2の設定部分は、HAノードがha-cluster-bootstrap
を使用して設定されたことを想定しています。詳細については、『インストールおよびセットアップクイックスタート』を参照してください。
Pacemakerによって起動されるため、HAProxyが両方のロードバランサ(alice
およびbob
)で無効になっていることを確認します。
root #
systemctl
disable haproxy
新しいCIBを設定します。
root #
crm
configurecrm(live)#
cib
new haproxy-configcrm(haproxy-config)#
primitive
primitive haproxy systemd:haproxy \ op start timeout=120 interval=0 \ op stop timeout=120 interval=0 \ op monitor timeout=100 interval=5s \ meta target-role=Startedcrm(haproxy-config)#
primitive
vip IPaddr2 \ params ip=192.168.1.99 nic=eth0 cidr_netmask=23 broadcast=192.168.1.255 \ op monitor interval=5s timeout=120 on-fail=restart \ meta target-role=Startedcrm(haproxy-config)#
order
haproxy-after-IP Mandatory: vip haproxycrm(haproxy-config)#
colocation
haproxy-with-public-IPs inf: haproxy vipcrm(haproxy-config)#
group
g-haproxy vip haproxy-after-IP
新しいCIBを確認し、エラーがあれば修正します。
crm(haproxy-config)#
verify
新しいCIBをコミットします。
crm(haproxy-config)#
cib
use livecrm(live)#
cib
commit haproxy-config
http://www.linuxvirtualserver.org/にあるプロジェクトのホームページ。
ldirectord
の詳細については、その総合的なマニュアルページを参照してください。
LVS Knowledge Base: http://kb.linuxvirtualserver.org/wiki/Main_Page。
SUSE® Linux Enterprise High Availability Extension
12 SP5は、ローカルクラスタとメトロエリアクラスタのほかに、地理的に離れたクラスタ(Geoクラスタ。マルチサイトクラスタとも呼ばれます)もサポートしています。これは、それぞれひとつのローカルクラスタで持った複数の地理的に離れたサイトを持てることを意味します。これらクラスタ間のフェールオーバーは、より高いレベルのエンティティであるbooth
によって管理されます。Geo Clustering for SUSE Linux Enterprise High Availability Extensionの個別の拡張として、Geoクラスタに対するサポートが提供されています。Geoクラスタの使用方法と設定方法の詳細については、Article “Geo Clusteringのクイックスタート”またはBook “Geo Clustering Guide”を参照してください。
クラスタノードをシャットダウンまたは再起動する(またはノード上でPacemakerサービスを停止する)場合、次のプロセスがトリガされます。
ノード上で実行されているリソースは停止されるか、ノードから移動します。
リソースの停止が失敗するか、タイムアウトする場合、STONITHメカニズムはノードをフェンシングし、シャットダウンします。
ノードをシャットダウンまたは再起動する前に、順序だった方法でノードのサービスをオフにしたい場合は、次の操作を実行します。
再起動またはシャットダウンするノードで、root
または同等な権限でログインします。
ノードをstandby
モードにします。
root #
crm node standby
このようにすると、サービスはPacemakerのシャットダウンタイムアウトによって制限されることなく、ノードをオフに移行できます。
以下を使用してクラスタの状態を確認します。
root #
crm status
standby
モード状態の各ノードが示されます。
[...] Node bob: standby [...]
そのノードでPacemakerサービスを停止します。
root #
systemctl stop pacemaker.service
ノードを再起動します。
ノードが再びクラスタに参加しているかどうかを確認するには:
root
または同等の権限でノードにログインします。
Pacemakerサービスが開始されているかどうかを確認します。
root #
systemctl status pacemaker.service
開始されていない場合は、開始します。
root #
systemctl start pacemaker.service
以下を使用してクラスタの状態を確認します。
root #
crm status
ノードが再びオンラインになっていることが示されます。
Pacemakerはシステム保守を実行するためのさまざまなオプションを提供しています。
グローバルクラスタプロパティmaintenance-mode
により、すべてのリソースを瞬時に保守状態にすることができます。クラスタはモニタリングを停止し、ステータスが追跡されなくなります。
このオプションにより、特定のノードで実行されているすべてのリソースを瞬時に保守状態にすることができます。クラスタはモニタリングを停止し、ステータスが追跡されなくなります。
スタンバイモードのノードはリソースを実行できなくなります。ノード上で実行されているすべてのリソースは移動するか停止されます(他のノードがリソースを実行する資格がない場合)。また、ノード上のすべての監視操作は停止されます(role="Stopped"
に設定された操作を除く)。
別のノードで実行されているサービスを提供し続けながら、クラスタ内の1台のノードを停止する必要がある場合は、このオプションを使用できます。
リソースに対してこのモードが有効な場合、リソースの監視操作はトリガされません。
このリソースで管理されるサービスに手動で介入する必要があり、その間にリソースの監視操作をクラスタに実行させない場合は、このオプションを使用します。
is-managed
メタ属性により、リソースを一時的にクラスタスタックによって管理されている状態から「解放」することができます。これは、このリソースによって管理されるサービスに手動で介入できることを意味します(たとえば、コンポーネントを調整するなど)。ただし、クラスタはリソースの「監視」と障害の報告を継続して行います。
クラスタによるリソースの「監視」を停止したい場合は、代わりにリソース単位の保守モードを使用します(リソースを保守モードにするを参照してください)。
テストまたは保守作業を実行する必要がある場合は、以下の一般的な手順に従います。
従わない場合、リソースが順序だった方法で起動できない、クラスタノード間でCIBが同期されない、データ損失などの、望ましくない負の影響が及ぼされるリスクがあります。
開始する前に、16.2項で概説されている、自分の状況に適したオプションを選択します。
Hawk2またはcrmshを使用してこのオプションを適用します。
保守タスクまたはテストを実行します。
終了したら、リソース、ノードまたはクラスタを「通常」の操作状態に戻します。
クラスタをcrmシェル上で保守モードにするには、次のコマンドを使用します。
root #
crm
configure property maintenance-mode=true
保守作業が完了した後で、クラスタを通常のモードに戻すには次のコマンドを使用します。
root #
crm
configure property maintenance-mode=false
7.2項 「ログイン」で説明したように、Webブラウザを起動してクラスタにログインします。
左のナビゲーションバーで、
を選択します。グループで、空のドロップダウンボックスから 属性を選択し、プラスアイコンをクリックして追加します。
maintenance-mode=true
を設定するには、maintenance-mode
の隣のチェックボックスをオンにして、変更を確認します。
クラスタ全体の保守作業が完了したら、maintenance-mode
属性の隣のチェックボックスをオフにします。
この時点から、High Availability Extensionはクラスタ管理をもう一度引き継ぎます。
crmシェル上でノードを保守モードにするには、次のコマンドを使用します。
root #
crm
node maintenance NODENAME
保守作業が完了した後で、ノードを通常のモードに戻すには、次のコマンドを使用します。
root #
crm
node ready NODENAME
7.2項 「ログイン」で説明したように、Webブラウザを起動してクラスタにログインします。
左のナビゲーションバーで、
を選択します。個々のノードのビューのいずれかで、ノードの隣のレンチアイコンをクリックして、
を選択します。保守タスクが終了したら、ノードの横にあるレンチアイコンをクリックして、
を選択します。ノードをcrmシェル上でスタンバイモードにするには、次のコマンドを使用します。
root #
crm node standby NODENAME
保守作業が完了した後でノードをオンライン状態に戻すには、次のコマンドを使用します。
root #
crm node online NODENAME
7.2項 「ログイン」で説明したように、Webブラウザを起動してクラスタにログインします。
左のナビゲーションバーで、
を選択します。個々のノードのビューのいずれかで、ノードの隣のレンチアイコンをクリックして、
を選択します。ノードの保守タスクを完了します。
スタンバイモードを無効化するには、そのノードの隣のレンチアイコンをクリックして
を選択します。crmシェル上でリソースを保守モードにするには、次のコマンドを使用します。
root #
crm
resource maintenance RESOURCE_ID true
保守作業が完了した後で、リソースを通常のモードに戻すには次のコマンドを使用します。
root #
crm
resource maintenance RESOURCE_ID false
7.2項 「ログイン」で説明したように、Webブラウザを起動してクラスタにログインします。
左のナビゲーションバーで、
を選択します。保守モードまたは非管理対象モードにするリソースを選択し、そのリソースの隣のレンチアイコンをクリックして、
を選択します。カテゴリが開きます。
空のドロップダウンボックスから
属性を選択し、プラスアイコンをクリックして追加します。
maintenance
の隣のチェックボックスをオンにして、maintenance属性をyes
に設定します。
変更内容を確認します。
該当するリソースの保守作業が完了したら、そのリソースのmaintenance
属性の隣のチェックボックスをオフにします。
リソースは、この時点から再びHigh Availability Extensionソフトウェアによって管理されます。
crmシェル上でリソースを非管理対象モードにするには、次のコマンドを使用します。
root #
crm
resource unmanage RESOURCE_ID
保守作業が完了した後で再び管理対象モードにするには、次のコマンドを使用します。
root #
crm
resource manage RESOURCE_ID
7.2項 「ログイン」で説明したように、Webブラウザを起動してクラスタにログインします。
左ナビゲーションバーから、
を選択し、 リストに移動します。列で、変更したいリソースの横にある下矢印アイコンをクリックして を選択します。
リソース設定画面が開きます。
の下で、空のドロップダウンボックスから エントリを選択します。
その値をNo
に設定し、 をクリックします。
保守タスクが終了した後で、Yes
に設定し(デフォルト値です)、変更を適用します。
リソースは、この時点から再びHigh Availability Extensionソフトウェアによって管理されます。
クラスタまたはノードが保守モードの場合、クラスタリソースを任意に停止したり再起動したりできます。High Availability Extensionはこれらを再起動しようとしません。ノード上のPacemakerサービスを停止する場合、(Pacemakerの管理対象クラスタリソースとして最初に起動された)すべてのデーモンとプロセスの実行は継続されます。
クラスタまたはノードが保守モードのときに、ノード上でPacemakerサービスを起動しようとする場合、Pacemakerはリソースごとに1つのワンショット監視操作(「probe」)を開始し、そのノードで現在どのリソースが実行されているかを評価します。ただし、リソースのステータスを決定する以外の操作は行いません。
クラスタまたはノードが保守モード
のときにノードを切断する場合は、次のようにします。
再起動またはシャットダウンするノードで、root
または同等な権限でログインします。
ocf:pacemaker:controld
タイプのリソースを使用しているのか、またはこのタイプのリソースに依存しているリソースを使用しているのかどうかを確認します。ocf:pacemaker:controld
タイプのリソースはDLMリソースです。
その場合は、DLMリソースとそれに依存しているすべてのリソースを明示的に停止します。
crm(live)resource#
stop RESOURCE_ID
その理由は、Pacemakerを停止すると、DLMが依存するメンバーシップとメッセージングサービスを持つCorosyncサービスも停止するからです。Corosyncが停止した場合、DLMリソースではスプリットブレインシナリオが発生したと見なされ、フェンシング操作がトリガされます。
そうでない場合は、ステップ 3に進みます。
そのノードでPacemakerサービスを停止します。
root #
systemctl stop pacemaker.service
ノードをシャットダウンするか再起動します。
カーネル内の分散ロックマネージャ(DLM)は、OCFS2、GFS2、Cluster MD、およびcLVMによって使用されるベースコンポーネントで、各層でアクティブ/アクティブ構成のストレージが提供されます。
OCFS 2 (Oracle Cluster File System 2)は、Linux 2.6以降のカーネルに完全に統合されている汎用ジャーナリングファイルシステムです。Oracle Cluster File System 2を利用すれば、アプリケーションバイナリファイル、データファイル、およびデータベースを、共有ストレージ中のデバイスに保管することができます。このファイルシステムには、クラスタ中のすべてのノードが同時に読み書きすることができます。ユーザスペース管理デーモンは、クローンリソースを介して管理され、HAスタック(特に、CorosyncおよびDLM (Distributed Lock Manager))との統合を実現します。
Global File System 2 (GFS2)は、Linuxコンピュータクラスタ用の共有ディスクファイルシステムです。GFS2により、すべてのノードが同じ共有ブロックストレージに直接同時にアクセスすることができます。GFS2には、非接続運用モードがなく、クライアント役割やサーバ役割もありません。GFS2クラスタのすべてのノードがピアとして機能します。GFS2は、クラスタノードを32台までサポートします。クラスタでGFS2を使用する場合は、ハードウェアが共有ストレージへのアクセスを許可し、ロックマネージャがストレージへのアクセスを制御する必要があります。
SUSEでは、パフォーマンスが主要な要件の1つである場合は、クラスタ環境でOCFS2 over GFS2を使用することを推奨しています。弊社のテストは、このような設定では、GFS2と比較してOCFS2の方がパフォーマンスに優れていることを示しています。
分散複製ブロックデバイス(DRBD*)を使用すると、IPネットワーク内の2つの異なるサイトに位置する2つのブロックデバイスのミラーを作成できます。Corosyncと共に使用すると、DRBDは分散高可用性Linuxクラスタをサポートします。この章では、DRBDのインストールとセットアップの方法を示します。
クラスタ上の共有ストレージを管理する場合、ストレージサブシステムに行った変更を各ノードに伝える必要があります。Logical Volume Manager 2 (LVM2)はローカルストレージの管理に多用されており、クラスタ全体のボリュームグループのトランスペアレントな管理をサポートするために拡張されています。クラスタ化されたボリュームグループを、ローカルストレージと同じコマンドで管理できます。
クラスタマルチデバイス(Cluster MD)は、クラスタ用のソフトウェアベースのRAIDストレージソリューションです。Cluster MDでは、クラスタにRAID1ミラーリングの冗長性を提供します。現在、RAID1のみがサポートされています。この章では、Cluster MDの作成および使用方法を示します。
クラスタ対応のSambaサーバは、異種混合ネットワークにHigh Availabilityソリューションを提供します。この章では、背景情報とクラスタ対応Sambaサーバの設定方法を説明します。
Relax-and-Recover (旧称「ReaR」。この章ではRearと略記)は、システム管理者による使用を意図した障害復旧フレームワークです。Rearは、障害発生時に保護対象となる特定の運用環境に合わせて調整する必要があるBashスクリプトのコレクションです。
特別な設定を必要とせずにそのまま使用できる障害復旧ソリューションはありません。したがって、障害が発生する前に準備しておくことが不可欠です。
シングルポイント障害を回避するには、高可用性クラスタに対する冗長通信パスが重要となります。これはDLM通信においても当てはまります。ネットワークボンディング(Link Aggregation Control Protocol、LACP)が何らかの理由で使用できない場合、Corosyncで冗長通信チャネル(2番目のリング)を定義することを強くお勧めします。詳細については、手順4.3「冗長通信チャネルの定義」を参照してください。
/etc/corosync/corosync.conf
の設定によって、DLMはその通信にTCPプロトコルを使用するか、SCTPプロトコルを使用するかを判断します。
none
に設定する場合(冗長リング設定が無効であることを意味する)、DLMは自動的にTCPを使用します。ただし、冗長通信チャネルを使用しない場合には、TCPリンクがダウンすると、DLM通信は失敗します。
passive
に設定され(これは通常の設定です)、/etc/corosync/corosync.conf
の2番目の通信リングが正しく設定されている場合、DLMは自動的にSCTPを使用します。この場合、DLMメッセージングには、SCTPによって提供される冗長性機能があります。
DLMはPacemakerからのクラスタメンバーシップサービスを使用し、それらのサービスはユーザスペースで実行されます。したがって、DLMは、クラスタ内の各ノードに存在するクローンリソースとして設定する必要があります。
OCFS2、GFS2、Cluster MD、およびcLVMのすべてがDLMを使用するため、DLMに1つのリソースを設定することで十分です。DLMリソースはクラスタ内のすべてのノード上で実行されるので、リソースはクローンリソースとして設定されます。
OCFS2およびcLVMの両方を含むセットアップがある場合、OCFS2およびcLVMの両方に1つのDLMリソースを設定することで十分です。
設定は複数のプリミティブおよび1つのベースクローンを含むベースグループで設定されます。ベースグループとベースクローンはどちらも、後でさまざまなシナリオで使用できます(例: OCFS2およびcLVM)。必要に応じてそれぞれのプリミティブを持つベースグループを拡張する必要があるだけです。ベースグループは内部コロケーションおよび順序付けを持つため、個々のグループ、クローン、その依存性をいくつも指定する必要がなく、セットアップ全体を容易にします。
クラスタ内の1つのノードについて、次の手順を実行してください。
シェルを起動し、root
または同等のものとしてログインします。
crm
configure
を実行します。
次のコマンドを入力して、DLMのプリミティブリソースを作成します。
crm(live)configure#
primitive
dlm ocf:pacemaker:controld \ op monitor interval="60" timeout="60"
DLMリソースおよび追加のストレージ関連のリソース用にベースグループを作成します。
crm(live)configure#
group
g-storage dlm
g-storage
グループのクローンを作成して、すべてのノードで実行できるようにします。
crm(live)configure#
clone
cl-storage g-storage \ meta interleave=true target-role=Started
show
で変更内容をレビューします。
すべて正しければ、commit
で変更を送信し、exit
でcrmライブ設定を終了します。
STONITHを使用しないクラスタはサポートされていません。テストまたはトラブルシューティングのためにグローバルクラスタオプション stonith-enabled
をfalse
に設定すると、DLMリリソースとそれに依存するすべてのサービス(cLVM、GFS2、およびOCFS2など)は起動できません。
OCFS 2 (Oracle Cluster File System 2)は、Linux 2.6以降のカーネルに完全に統合されている汎用ジャーナリングファイルシステムです。Oracle Cluster File System 2を利用すれば、アプリケーションバイナリファイル、データファイル、およびデータベースを、共有ストレージ中のデバイスに保管することができます。このファイルシステムには、クラスタ中のすべてのノードが同時に読み書きすることができます。ユーザスペース管理デーモンは、クローンリソースを介して管理され、HAスタック(特に、CorosyncおよびDLM (Distributed Lock Manager))との統合を実現します。
OCFS2は、たとえば、次のストレージソリューションに使用できます。
一般のアプリケーションとワークロード。
クラスタ中のXENイメージ。Xen仮想マシンと仮想サーバは、クラスタサーバによってマウントされたOCFS2ボリュームに保存できます。これによって、サーバ間でXen仮想マシンを素早く容易に移植できます。
LAMP (Linux、Apache、MySQL、およびPHP | Perl | Python)スタック。
OCF2は、高パフォーマンスでシンメトリックなパラレルクラスタファイルシステムとして、次の機能をサポートします。
アプリケーションのファイルを、クラスタ内のすべてのノードで使用できます。ユーザは、クラスタ中のOracle Cluster File System 2ボリュームに1回インストールするだけで構いません。
すべてのノードが、標準ファイルシステムインタフェースを介して、同時並行的に、ストレージに直接読み書きできるので、クラスタ全体に渡わたって実行されるアプリケーションの管理が容易になります。
ファイルアクセスがDLMを介して調整されます。ほとんどの場合、DLMによる制御は適切に機能しますが、アプリケーションの設計によっては、アプリケーションとDLMがファイルアクセスの調整で競合すると、スケーラビリティが制限されることがあります。
すべてのバックエンドストレージで、ストレージのバックアップ機能を利用することができます。共有アプリケーションファイルのイメージを簡単に作成することができるため、災害発生時でも素早くデータを復元することができます。
Oracle Cluster File System 2には、次の機能も用意されています。
メタデータのキャッシュ処理。
メタデータのジャーナル処理。
ノード間にまたがるファイルデータの整合性。
最大4KBのマルチブロックサイズ、最大1MBのクラスタサイズ、4PB(ペタバイト)の最大ボリュームサイズをサポートします。
32台までのクラスタノードをサポート。
データベースのパフォーマンスを向上する非同期、直接I/Oのサポート。
OCFS2は、SUSE Linux Enterprise High Availability Extensionによって提供される、pcmk (Pacemaker)スタックと併用する場合にのみ、SUSEによってサポートされます。o2cbスタックと組み合わせた場合、SUSEはOCFS2をサポートしません。
SUSE® Linux Enterprise Server 12 SP5上のHigh Availability Extensionには、OCFS2カーネルモジュール(ocfs2)が自動的にインストールされます。OCFS2を使用するには、
ocfs2-tools
と、ご使用のカーネルに適合するocfs2-kmp-*
パッケージが、クラスタの各ノードにインストールされていることを確認してください。
ocfs2-tools
パッケージには、次に示すOCFS2ボリュームの管理ユーティリティがあります。構文については、各マニュアルページを参照してください。
OCFS2ユーティリティ |
説明 |
---|---|
debugfs.ocfs2 |
デバッグのために、OCFSファイルシステムの状態を調査します。 |
fsck.ocfs2 |
ファイルシステムにエラーがないかをチェックし、必要に応じてエラーを修復します。 |
mkfs.ocfs2 |
デバイス上にOCFS2ファイルシステムを作成します。通常は、共有物理/論理ディスク上のパーティションに作成します。 |
mounted.ocfs2 |
クラスタシステム上のすべてのOCFS2ボリュームを検出、表示します。OCFS2デバイスをマウントしているシステム上のすべてのノードを検出、表示するか、またはすべてのOCFS2デバイスを表示します。 |
tunefs.ocfs2 |
ボリュームラベル、ノードスロット数、すべてのノードスロットのジャーナルサイズ、およびボリュームサイズなど、OCFS2ファイルのシステムパラメータを変更します。 |
OCFS2ボリュームを作成する前に、DLMおよびSTONITHリソースをクラスタ内のサービスとして設定する必要があります。
次の手順では、crm
シェルを使用してクラスタリソースを設定します。18.6項 「Hawk2でのOCFS2リソースの設定」で説明されているように、リソースの設定にはHawk2を使用することもできます。
フェンシングデバイスを設定する必要があります。STONITHなしでは、設定内に配置されたメカニズム(external/sbd
など)は失敗します。
シェルを起動し、root
または同等のものとしてログインします。
手順11.3「SBDデバイスの初期化」で説明されるとおり、SBDパーティションを作成します。
crm
configure
を実行します。
external/sdb
をフェンシングデバイスとして設定し、/dev/sdb2
を共有ストレージ上のハートビートとフェンシング専用のパーティションにします。
crm(live)configure#
primitive
sbd_stonith stonith:external/sbd \ params pcmk_delay_max=30 meta target-role="Started"
show
で変更内容をレビューします。
すべて正しければ、commit
で変更を送信し、exit
でcrmライブ設定を終了します。
DLMに対するリソースグループの設定の詳細については、手順17.1「DLMのベースグループの設定」を参照してください。
18.3項 「OCFS2サービスとSTONITHリソースの設定」で説明されているように、DLMクラスタリソースを設定したら、システムがOCFS2を使用できるように設定し、OCFs2ボリュームを作成します。
一般に、アプリケーションファイルとデータファイルは、異なるOCFS2ボリュームに保存することを推奨します。アプリケーションボリュームとデータボリュームのマウント要件が異なる場合は、必ず、異なるボリュームに保存します。
作業を始める前に、OCFS2ボリュームに使用するブロックデバイスを準備します。デバイスは空き領域のままにしてください。
次に、手順18.2「OCFS2ボリュームを作成し、フォーマットする」で説明されているように、mkfs.ocfs2
で、OCFS2ボリュームを作成し、フォーマットします。そのコマンドの重要なパラメータは、表18.2「重要なOCFS2パラメータ 」に一覧されています。詳細情報とコマンド構文については、mkfs.ocfs2
のマニュアルページを参照してください。
OCFS2パラメータ |
説明と推奨設定 |
---|---|
ボリュームラベル( |
異なるノードへのマウント時に、正しく識別できるように、一意のわかりやすいボリューム名を指定します。ラベルを変更するには、 |
クラスタサイズ( |
クラスタサイズは、ファイルに割り当てられる、データ保管領域の最小単位です。使用できるオプションと推奨事項については、 |
ノードスロット数( |
同時にボリュームをマウントできる最大ノード数を指定します。各ノードについて、OCFS2はジャーナルなどの個別のシステムファイルを作成します。ボリュームにアクセスするノードに、リトルエンディアン形式のノード(AMD64/Intel 64など)とビッグエンディアン形式のノード(System zなど)が混在しても構いません。
ノード固有のファイルは、ローカルファイルと呼ばれます。ローカルファイルには、ノードスロット番号が付加されます。たとえば、
各ボリュームを同時にマウントすると予期されるノード数に従って、各ボリュームの作成時に、そのボリュームの最大ノードスロット数を設定します。
|
ブロックサイズ( |
ファイルシステムがアドレス可能な領域の最小単位を指定します。ブロックサイズは、ボリュームの作成時に指定します。使用できるオプションと推奨事項については、 |
特定機能のオン/オフ( |
カンマで区切った機能フラグリストを指定できます。
使用できるすべてのフラグの概要については、 |
事前定義機能( |
事前定義されたファイルシステム機能セットから選択できます。使用できるオプションについては、 |
mkfs.ocfs2
によるボリュームの作成およびフォーマット時に機能を指定しない場合は、backup-super
、sparse
、inline-data
、unwritten
、metaecc
、indexed-dirs
、およびxattr
の各機能がデフォルトで有効になります。
クラスタノードの1つだけで、次の手順を実行します。
端末ウィンドウを開いて、root
としてログインします。
クラスタがオンラインであることをコマンドcrm status
で確認します。
mkfs.ocfs2
ユーティリティを使用して、ボリュームを作成およびフォーマットします。このコマンドの指定形式については、mkfs.ocfs2
マニュアルページを参照してください。
たとえば、最大32台のクラスタノードをサポートする新しいOCFS2ファイルシステムを/dev/sdb1
上に作成するには、次のコマンドを使用します。
root #
mkfs.ocfs2 -N 32 /dev/sdb1
OCFS2ボリュームは、手動でマウントするか、クラスタマネージャでマウントできます(手順18.4「クラスタリソースマネージャでOCFS2ボリュームをマウントする」参照)。
端末ウィンドウを開いて、root
としてログインします。
クラスタがオンラインであることをコマンドcrm status
で確認します。
コマンドラインから、mount
コマンドを使ってボリュームをマウントします。
OCFS2ファイルシステムをテスト目的で手動マウントした場合、そのファイルシステムは、いったんマウント解除してから、クラスタリソースで使用してください。
High AvailabilityソフトウェアでOCFS2ボリュームをマウントするには、クラスタ内でocfs2ファイルシステムのリソースを設定します。次の手順では、crm
シェルを使用してクラスタリソースを設定します。18.6項 「Hawk2でのOCFS2リソースの設定」で説明されているように、リソースの設定にはHawk2を使用することもできます。
シェルを起動し、root
または同等のものとしてログインします。
crm
configure
を実行します。
OCFS2ファイルシステムをクラスタ内のすべてのノードにマウントするように、Pacemakerを設定します。
crm(live)configure#
primitive
ocfs2-1 ocf:heartbeat:Filesystem \ params device="/dev/sdb1" directory="/mnt/shared" \ fstype="ocfs2" options="acl" \ op monitor interval="20" timeout="40" \ op start timeout="60" op stop timeout="60" \ meta target-role="Stopped"
ocfs2-1
プリミティブを手順17.1「DLMのベースグループの設定」で作成したg-storage
グループに追加します。
crm(live)configure#
modgroup
g-storage add ocfs2-1
add
サブコマンドは、デフォルトで新しいグループメンバーを追加します。ベースグループの内部コロケーションおよび順序付けによって、Pacemakerは、すでに実行しているdlm
リソースも持つノード上でocfs2-1
リソースのみ起動します。
show
で変更内容をレビューします。
すべて正しければ、commit
で変更を送信し、exit
でcrmライブ設定を終了します。
crmシェルを使用して、DLM、およびOCFS2のファイルシステムリソースを手動で設定する代わりに、Hawk2の
のOCFS2テンプレートを使用することもできます。。ウィザードを使用する場合でも、手順18.1「STONITHリソースの設定」で説明されているように、共有ストレージ上でSBDパーティションを作成し、STONITHリソースを設定する必要があります。
のOCFS2テンプレートには、STONITHリソースの設定が含まれませんまた、Hawk手順17.1「DLMのベースグループの設定」および手順18.4「クラスタリソースマネージャでOCFS2ボリュームをマウントする」で説明されている手動設定とは若干異なるリソース設定になります。
のOCFS2テンプレートを使用すると、Hawk2にログインします。
https://HAWKSERVER:7630/
左のナビゲーションバーで、
を選択します。
OCFS2 File System
を選択します。
画面の指示に従います。オプションについての情報が必要な場合には、オプションをクリックすると、Hawk2は簡単なヘルプテキストを表示します。最後の設定手順が完了したら、
を選択して、入力した値を検証します。CIBに適用する設定スニペットやその他の必要な変更がウィザードに表示されます。
適用予定の変更を確認します。すべてが希望どおりの場合は、変更を適用します。
画面上のメッセージが、アクションに成功したかどうかを示します。
OCFS2ファイルシステム上でクォータを使用するには、適切なクォータ機能またはオプションを使用して、ファイルシステムを作成し、マウントします。オプションはursquota
(個々のユーザのためのクォータ)またはgrpquota
(グループのためのクォータ)です。これらの機能は後ほど、tunefs.ocfs2
を使用して、マウントされていないファイルシステムで有効にすることもできます。
ファイルシステムで適切なクォータ機能が有効にされている場合、ファイルシステムは、そのメタデータで、各ユーザ(または)グループが使用しているスペースの量とファイルの数を追跡します。OCFS2はクォータ情報をファイルシステムの内部メタデータとして扱うので、quotacheck
(8)プログラムを実行する必要はありません。すべての機能はfsck.ocf2、およびファイルシステムドライバ自体に組み込まれています。
各ユーザまたはグループに課せられている制限の強制を有効にするには、他のファイルシステムでの場合と同様に、quotaon
(8)を実行します。
パフォーマンス上の理由で、各クラスタノードはクォータの計算をローカルに行い、この情報を、10秒ごとに共通の中央ストレージに同期するようになっています。この間隔は、tunefs.ocfs2
と、usrquota-sync-interval
およびgrpquota-sync-interval
オプションで調整することができます。クォータ情報は必ずしも常に正確というわけではないので、複数のクラスタノードを並列に運用している場合、ユーザまたはグループがクォータ制限をいくらか超えることもあります。
OCFS2の詳細については、次のリンクを参照してください。
OCFS2プロジェクトホームページ。
Oracleサイトにある以前のOCFS2プロジェクトのホームページ
プロジェクトの以前のドキュメントホームページ。
Global File System 2 (GFS2)は、Linuxコンピュータクラスタ用の共有ディスクファイルシステムです。GFS2により、すべてのノードが同じ共有ブロックストレージに直接同時にアクセスすることができます。GFS2には、非接続運用モードがなく、クライアント役割やサーバ役割もありません。GFS2クラスタのすべてのノードがピアとして機能します。GFS2は、クラスタノードを32台までサポートします。クラスタでGFS2を使用する場合は、ハードウェアが共有ストレージへのアクセスを許可し、ロックマネージャがストレージへのアクセスを制御する必要があります。
SUSEでは、パフォーマンスが主要な要件の1つである場合は、クラスタ環境でOCFS2 over GFS2を使用することを推奨しています。弊社のテストは、このような設定では、GFS2と比較してOCFS2の方がパフォーマンスに優れていることを示しています。
GFS2を使用するには、gfs2-utils
と、ご使用のカーネルに適合するgfs2-kmp-*
パッケージが、クラスタの各ノードにインストールされていることを確認してください。
gfs2-utils
パッケージには、次に示すGFS2ボリュームの管理ユーティリティがあります。構文については、各マニュアルページを参照してください。
GFS2ユーティリティ |
説明 |
---|---|
fsck.gfs2 |
ファイルシステムにエラーがないかをチェックし、必要に応じてエラーを修復します。 |
gfs2_jadd |
GFS2ファイルシステムにジャーナルを追加します。 |
gfs2_grow |
GFS2ファイルシステムを拡張します。 |
mkfs.gfs2 |
デバイス上にGFS2ファイルシステムを作成します。通常は、共有デバイスまたはパーティションになります。 |
tunegfs2 |
次のようなGFS2ファイルシステムパラメータを表示および操作できます( |
GFS2ボリュームを作成する前に、DLMおよびSTONITHリソースを設定する必要があります。
フェンシングデバイスを設定する必要があります。STONITHなしでは、設定内に配置されたメカニズム(external/sbd
など)は失敗します。
シェルを起動し、root
または同等のものとしてログインします。
手順11.3「SBDデバイスの初期化」で説明されるとおり、SBDパーティションを作成します。
crm
configure
を実行します。
external/sdb
をフェンシングデバイスとして設定し、/dev/sdb2
を共有ストレージ上のハートビートとフェンシング専用のパーティションにします。
crm(live)configure#
primitive
sbd_stonith stonith:external/sbd \ params pcmk_delay_max=30 meta target-role="Started"
show
で変更内容をレビューします。
すべて正しければ、commit
で変更を送信し、exit
でcrmライブ設定を終了します。
DLMに対するリソースグループの設定の詳細については、手順17.1「DLMのベースグループの設定」を参照してください。
19.2項 「GFS2サービスとSTONITHリソースの設定」で説明されているように、DLMをクラスタリソースとして設定したら、システムがGFS2を使用できるように設定し、GFS2ボリュームを作成します。
一般に、アプリケーションファイルとデータファイルは、異なるGFS2ボリュームに保存することをお勧めします。アプリケーションボリュームとデータボリュームのマウント要件が異なる場合は、必ず、異なるボリュームに保存します。
作業を始める前に、GFS2ボリュームに使用するブロックデバイスを準備します。デバイスは空き領域のままにしてください。
次に、手順19.2「GFS2ボリュームの作成とフォーマット」で説明されているように、mkfs.gfs2
で、GFS2ボリュームを作成し、フォーマットします。そのコマンドの重要なパラメータは、表19.2「重要なGFS2パラメータ」に一覧されています。詳細情報とコマンド構文については、mkfs.gfs2
のマニュアルページを参照してください。
GFS2パラメータ |
説明と推奨設定 |
---|---|
ロ ック プロ トコル 名 ( |
使用するロッキングプロトコルの名前。使用可能なロッキングプロトコルはlock_dlm (共有ストレージ用)です。またはローカルファイルシステム(1ノードのみ)としてGFS2を使用している場合は、lock_nolockプロトコルを指定できます。このオプションを指定しない場合、lock_dlmプロトコルであるとみなされます。 |
ロックテーブル名( |
使用しているロックモジュールに適切はロックテーブルフィールド。clustername:fsnameです。clusternameは、クラスタ設定ファイル |
ジャーナル数( |
作成するgfs2_mkfs用のジャーナル数。ファイルシステムをマウントするマシンごとに少なくとも1つのジャーナルが必要です。このオプションを指定しない場合、1つのジャーナルが作成されます。 |
クラスタノードの1つだけで、次の手順を実行します。
端末ウィンドウを開いて、root
としてログインします。
クラスタがオンラインであることをコマンドcrm status
で確認します。
mkfs.gfs2
ユーティリティを使用して、ボリュームを作成およびフォーマットします。このコマンドの構文については、mkfs.gfs2
マニュアルページを参照してください。
たとえば、最大32台のクラスタノードをサポートする新しいGFS2ファイルシステムを/dev/sdb1
上に作成するには、次のコマンドを使用します。
root #
mkfs.gfs2 -t hacluster:mygfs2 -p lock_dlm -j 32 /dev/sdb1
hacluster
名は、ファイル/etc/corosync/corosync.conf
(これはデフォルトです)のエントリcluster_name
に関係します。
GFS2ボリュームは、手動でマウントするか、クラスタマネージャでマウントできます(手順19.4「クラスタマネージャによるGFS2ボリュームのマウント」を参照)。
端末ウィンドウを開いて、root
としてログインします。
クラスタがオンラインであることをコマンドcrm status
で確認します。
コマンドラインから、mount
コマンドを使ってボリュームをマウントします。
GFS2ファイルシステムをテスト目的で手動マウントした場合、そのファイルシステムは、いったんマウント解除してから、クラスタリソースで使用してください。
High AvailabilityソフトウェアでGFS2ボリュームをマウントするには、クラスタ内でOCFファイルシステムのリソースを設定します。次の手順では、crm
シェルを使用してクラスタリソースを設定します。リソースの設定には、Hawk2を使用することもできます。
シェルを起動し、root
または同等のものとしてログインします。
crm
configure
を実行します。
GFS2ファイルシステムをクラスタ内のすべてのノードにマウントするように、Pacemakerを設定します。
crm(live)configure#
primitive
gfs2-1 ocf:heartbeat:Filesystem \ params device="/dev/sdb1" directory="/mnt/shared" fstype="gfs2" \ op monitor interval="20" timeout="40" \ op start timeout="60" op stop timeout="60" \ meta target-role="Stopped"
手順17.1「DLMのベースグループの設定」で作成したdlm
プリミティブとgfs2-1
プリミティブから構成されるベースグループを作成します。グループをクローンします。
crm(live)configure#
group
g-storage dlm gfs2-1clone
cl-storage g-storage \ meta interleave="true"
ベースグループの内部コロケーションおよび順序付けによって、Pacemakerは、すでに実行しているdlm
リソースも持つノード上でgfs2-1
リソースのみ起動します。
show
で変更内容をレビューします。
すべて正しければ、commit
で変更を送信し、exit
でcrmライブ設定を終了します。
DRBDは、プライマリデバイス上のデータをセカンダリデバイスに、データの両方のコピーが同一に保たれるような方法で複製します。これは、ネットワーク型のRAID 1と考えてください。DRBDは、データをリアルタイムでミラーリングするので、そのレプリケーションは連続的に起こります。アプリケーションは、実際そのデータがさまざまなディスクに保存されるということを知る必要はありません。
DRBDは、Linuxカーネルモジュールであり、下端のI/Oスケジューラと上端のファイルシステムの間に存在しています(図20.1「Linux内でのDRBDの位置」参照)。DRBDと通信するには、高レベルのコマンドdrbdadm
を使用します。柔軟性を最大にするため、DRBDには、低レベルのツールdrbdsetup
が付いてきます。
ミラー間のデータトラフィックは暗号化されません。データ交換を安全にするには、接続に仮想プライベートネットワーク(VPN)ソリューションを導入する必要があります。
DRBDでは、Linuxでサポートされる任意のブロックデバイスを使用できます。通常は次のデバイスです。
パーティションまたは完全なハードディスク
ソフトウェアRAID
LVM (Logical Volume Manager)
EVMS (Enterprise Volume Management System)
DRBDは、デフォルトでは、DRBDノード間の通信にTCPポート7788
以上を使用します。使用しているポートの通信がファイアウォールで許可されていることを確認してください。
まず、DRBDデバイスを設定してから、その上にファイルシステムを作成する必要があります。ユーザデータに関することはすべて、rawデバイスではなく、/dev/drbdN
デバイスを介してのみ実行される必要があります。これは、DRBDが、メタデータ用にrawデバイスの最後の部分を使用するからです。rawデバイスを使用すると、データが矛盾する原因となります。
udevの統合により、/dev/drbd/by-res/RESOURCES
の形式でシンボリックリンクも取得されます。このリンクは、より簡単に使用でき、デバイスのマイナー番号を誤って記憶しないように安全対策が講じられています。
たとえば、rawデバイスのサイズが1024MBの場合、DRBDデバイスは、1023MBしかデータ用に使用できません。70KBは隠され、メタデータ用に予約されています。rawディスクを介した既存のキロバイトへのアクセスは、それがユーザデータ用でないので、すべて失敗します。
パートI「インストール、セットアップ、およびアップグレード」で説明されているように、High Availability Extensionをネットワーククラスタの両方のSUSE Linux Enterprise Serverマシンにインストールします。High Availability Extensionをインストールすると、DRBDプログラムファイルもインストールされます。
クラスタスタック全体を必要とせず、のみを使用したい場合、パッケージ drbd、 drbd-kmp-FLAVOR、 drbd-utils、および yast2-drbdをインストールしてください。
drbdadm
の操作を簡素化するには、Bash補完サポートを使用します。現在のシェルセッションでこのサポートを有効にするには、次のコマンドを挿入します。
root #
source
/etc/bash_completion.d/drbdadm.sh
root
用に永続的に使用するには、ファイル/root/.bashrc
を拡張し、前の行を挿入します。
次の手順では、サーバ名としてaliceとbobを使用し、クラスタリソース名としてr0
を使用します。aliceをプライマリノードとして設定し、/dev/sda1
をストレージとして設定します。必ず、手順を変更して、ご使用のノード名とファイルの名前を使用してください。
次の項では、aliceとbobという2つのノードがあり、それぞれがTCPポート7788
を使用するものと想定しています。ファイアウォールでこのポートが開いているようにしてください。
システムを準備します。
Linuxノード内のブロックデバイスを準備し、(必要な場合は)パーティション分割しておいてください。
ディスクに、必要のなくなったファイルシステムがすでに含まれている場合は、次のコマンドでファイルシステムの構造を破壊します。
root #
dd
if=/dev/zero of=YOUR_DEVICE count=16 bs=1M
破壊する、より多くのファイルシステムがある場合は、DRBDセットアップに含むすべてのデバイス上でこのステップを繰り返します。
クラスタがすでにDRBDを使用している場合は、クラスタを保守モードにします。
root #
crm
configure property maintenance-mode=true
クラスタがすでにDRBDを使用している場合に、この手順をスキップすると、ライブ設定の構文エラーによってサービスがシャットダウンされます。
別の方法として、drbdadm
-c FILE
を使用して設定ファイルをテストすることもできます。
次のいずれかの方法を選択してDRBDを設定します。
Csync2 (デフォルト)を設定している場合、DRBD設定ファイルは、同期に必要なファイルのリストにすでに含まれています。同期するには、次のコマンドを使用します。
root #
csync2
-xv /etc/drbd.d/
Csync2を設定していない場合(または使用しない場合)には、DRBD設定ファイルを手動で他のノードにコピーしてください。
root #
scp
/etc/drbd.conf bob:/etc/root #
scp
/etc/drbd.d/* bob:/etc/drbd.d/
初期同期を実行します(20.3.3項 「DRBDリソースの初期化とフォーマット」を参照してください)。
クラスタの保守モードフラグをリセットします。
root #
crm
configure property maintenance-mode=false
DRBD9機能の「自動プロモート」は、マスタ/スレーブ接続の代わりにクローンとファイルシステムリソースを使用できます。ファイルシステムがマウントされているときにこの機能を使用すると、DRBDは自動的にプライマリモードに変わります。
自動プロモート機能は現在サポートが限定されています。DRBD 9では、SUSEはDRBD-8でもサポートされていた使用例と同じ使用例をサポートしています。3つ以上のノードでのセットアップなど、それを超える使用例はサポートされていません。
DRBDを手動で設定するには、次の手順に従います。
DRBDバージョン8.3以降、設定ファイルは、複数のファイルに分割され、/etc/drbd.d/
ディレクトリに保存されています。
/etc/drbd.d/global_common.conf
ファイルを開きます。このファイルには、すでにいくつかのグローバルな事前定義値が含まれています。startup
セクションに移動し、次の3行を挿入します。
startup { # wfc-timeout degr-wfc-timeout outdated-wfc-timeout # wait-after-sb; wfc-timeout 100; degr-wfc-timeout 120; }
これらのオプションは、ブート時のタイムアウトを減らすために使用します。詳細については、https://docs.linbit.com/docs/users-guide-9.0/#ch-configureを参照してください。
ファイル/etc/drbd.d/r0.res
を作成し、状況に合わせて行を変更し、ファイルを保存します。
resource r0 { 1 device /dev/drbd0; 2 disk /dev/sda1; 3 meta-disk internal; 4 on alice { 5 address 192.168.1.10:7788; 6 node-id 0; 7 } on bob { 5 address 192.168.1.11:7788; 6 node-id 1; 7 } disk { resync-rate 10M; 8 } connection-mesh { 9 hosts alice bob; } }
必要なサービスへのいくつかの関連付けを許可するDRBDリソースの名前。たとえば、 | |
DRBD用デバイス名とそのマイナー番号。
先に示した例では、マイナー番号0がDRBDに対して使用されています。udev統合スクリプトは、シンボリックリンク(
| |
ノード間で複製されるrawデバイス。ただし、この例では、デバイスは両方のノードで「同じ」です。異なるデバイスが必要な場合は、 | |
meta-diskパラメータには、通常、値 | |
| |
それぞれのノードのIPアドレスとポート番号。リソースごとに、通常、 | |
複数のノードを設定する際は、ノードIDが必要です。ノードIDは、別々のノードを区別するための固有の負でない整数です。 | |
同期レート。このレートは、ディスク帯域幅およびネットワーク帯域幅の3分の1に設定します。これは、再同期を制限するだけで、レプリケーションは制限しません。 | |
同一メッシュのすべてのノードを設定します。 |
環境設定ファイルの構文をチェックします。次のコマンドがエラーを返す場合は、ファイルを検証します。
root #
drbdadm
dump all
YaSTを使用して、DRBDの初期セットアップを開始できます。DRBDセットアップの作成後、生成されたファイルを手動で調整できます。
ただし、設定ファイルを変更した後にYaST DRBDモジュールを使用しないでください。DRBDモジュールでサポートされているのは、限られた一連の基本設定のみです。再度DRBDモジュールを使用すると、変更内容がモジュールに表示されない可能性があります。
YaSTを使ってDRBDを設定するには、次の手順に従います。
YaSTを起動して、設定モジュール*.YaSTsave
として保存します。
off
)。Pacemakerがこのサービスを管理するので変更しないでください。
ファイアウォールが実行中の場合は、
を有効にします。図20.2「リソースの環境設定」を参照してください)。
エントリに移動します。 をクリックして、新しいリソースを作成します(次のパラメータを設定する必要があります。
DRBDリソースの名前(必須)。
関連するノードのホスト名。
それぞれのノードのIPアドレスとポート番号(デフォルトは7788
)
複製されたデータにアクセスするためのブロックデバイスパス。デバイスにマイナー番号が使用されている場合は、関連付けられたブロックデバイスの名前は/dev/drbdX
になることが普通です。Xはデバイスのマイナー番号です。デバイスにマイナー番号が使用されていない場合は、必ずデバイス名の後にminor 0
を追記します。
両方のノード間で複製されるrawデバイス。LVMを使用する場合、LVMデバイス名を挿入します。
internal
に設定されるか、またはインデックスで拡張された、drbdで必要なメタデータを保持する明示的なデバイスを指定します。
複数のdrbdリソースに実際のデバイスを使用することもできます。たとえば、最初のリソースに対して/dev/sda6[0]
の場合、/dev/sda6[1]
を2番目のリソースに使用できます。ただし、このディスク上で各リソースについて少なくとも128MBのスペースが必要です。メタデータの固定サイズによって、複製できる最大データサイズが制限されます。
これらのオプションはすべて、/usr/share/doc/packages/drbd/drbd.conf
ファイルの例とdrbd.conf(5)
のマニュアルページで説明されています。
をクリックします。
をクリックして、2番目のDRBDリソースを入力し、 をクリックして終了します。
と をクリックして、[リソース設定]を閉じます。
DRBDでLVMを使用する場合、LVM設定ファイルでオプションをいくつか変更する必要があります(
エントリを参照してください)。この変更は、YaST DRBDモジュールを使用して自動的に実行できます。
DRBDリソースのローカルホストのディスク名およびデフォルトのフィルタはLVMフィルタで拒否されます。LVMデバイスをスキャンできるのは/dev/drbd
のみです。
たとえば、/dev/sda1
をDRBDディスクとして使用している場合、そのデバイス名がLVMフィルタの最初のエントリとして挿入されます。フィルタを手動で変更するには、 チェックボックスをクリックします。
をクリックして、変更を保存します。
システムを準備してDRBDを設定したら、ディスクの初回の初期化を行います。
両ノード(aliceとbob)でメタデータストレージを初期化します。
root #
drbdadm
create-md r0root #
drbdadm
up r0
DRBDリソースの初期再同期を短縮する場合は、次のことを確認します。
すべてのノード上のDRBDデバイスが同じデータを持つ場合(たとえば、20.3項 「DRBDサービスの設定」に示すようにdd
コマンドでファイルシステム構造を破壊することによる)、次のコマンドを使用して初期再同期をスキップします(両ノード)。
root #
drbdadm
new-current-uuid --clear-bitmap r0/0
状態はSecondary/Secondary UpToDate/UpToDate
です
その後、次のステップに進みます。
プライマリノードのaliceから再同期プロセスを開始します。
root #
drbdadm
primary --force r0
以下を使用してステータスをチェックします。
root #
drbdadm
status r0 r0 role:Primary disk:UpToDate bob role:Secondary peer-disk:UpToDate
DRBDデバイスの上にファイルシステムを作成します。たとえば、次のように指定します。
root #
mkfs.ext3
/dev/drbd0
ファイルシステムをマウントして使用します。
root #
mount
/dev/drbd0 /mnt/
DRBD 8 (SUSE Linux Enterprise High Availability Extension 12 SP1に付属)とDRBD 9 (SUSE Linux Enterprise High Availability Extension 12 SP2に付属)間で、メタデータフォーマットが変更されました。DRBD 9では、以前のメタデータファイルが新しいフォーマットに自動的に変換されません。
12 SP2に移行した後で、DRBDを開始する前に、DRBDメタデータをバージョン9フォーマットに手動で変換します。これを実行するには、drbdadm
create-md
を使用します。設定を変更する必要はありません。
DRBD 9では、SUSEはDRBD-8でもサポートされていた使用例と同じ使用例をサポートしています。3つ以上のノードでのセットアップなど、それを超える使用例はサポートされていません。
DRBD 9は、バージョン8と互換性を持つように切り替わります。3つ以上のノードの場合、DRBDバージョン9固有のオプションを使用するため、メタデータを再作成する必要があります。
スタックされたDRBDリソースがある場合は、詳細について20.5項 「スタックされたDRBDデバイスの作成」も参照してください。
新しいリソースを再作成せずにデータを保持し、新しいノードを追加することを許可する場合は、次の操作を実行します。
1つのノードをスタンバイモードで設定します。
ノードのすべてでDRBDパッケージのすべてを更新します。20.2項 「DRBDサービスのインストール」を参照してください。
リソース設定に新しいノード情報を追加します。
すべての on
セクションごとにnode-id。
connection-mesh セクションには、ホストパラメータのすべてのホスト名が含まれます。 hosts パラメータで制御します。
手順20.1「DRBDの手動設定」のサンプル設定を参照してください。
internal
をmeta-disk
キーとして使用する場合は、DRBDディスクのスペースを拡大します。LVMのようなスペースの拡大をサポートするデバイスを使用します。別の方法として、メタデータ用の外部ディスクに変更して、meta-disk DEVICE;
を使用します。
新しい設定に基づいてメタデータを再作成します。
root #
drbdadm
create-md RESOURCE
スタンバイモードをキャンセルします。
スタックされたDRBDデバイスには少なくとも一方のデバイスがDRBDリソースでもある2つの他のデバイスが含まれます。すなわち、DRBDは既存のDRBDリソースの最上部に追加のノードを追加します(図20.3「リソースのスタッキング」を参照してください)。このようなレプリケーションセットアップは、バックアップおよび障害復旧目的に使用できます。
Three-wayレプリケーションは、非同期(DRBDプロトコルA)と同期レプリケーション(DRBDプロトコルC)を使用します。非同期部分はスタックされたリソースに使用され、同期部分はバックアップに使用されます。
ご使用の運用環境ではスタックされたデバイスを使用します。たとえば、最上部にDRBDデバイス/dev/drbd0
とスタックされたデバイス/dev/drbd10
がある場合、ファイルシステムは/dev/drbd10
上に作成されます。詳細については、例20.1「3ノードのスタックされたDRBDリソースの設定」を参照してください。
# /etc/drbd.d/r0.res resource r0 { protocol C; device /dev/drbd0; disk /dev/sda1; meta-disk internal; on amsterdam-alice { address 192.168.1.1:7900; } on amsterdam-bob { address 192.168.1.2:7900; } } resource r0-U { protocol A; device /dev/drbd10; stacked-on-top-of r0 { address 192.168.2.1:7910; } on berlin-charlie { disk /dev/sda10; address 192.168.2.2:7910; # Public IP of the backup node meta-disk internal; } }
DRBDレプリケーションリンクが途切れた場合、PacemakerはDRBDリソースを別のノードにプロモートしようとします。Pacemakerが古いデータでサービスを開始しないようにするため、例20.2「クラスタ情報ベース(CIB)を使用したリソースレベルのフェンシングを含むDRBDの設定」に示すようにDRBD設定ファイルでリソースレベルのフェンシングを有効にします。
resource RESOURCE { net { fencing resource-only; # ... } handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh"; # ... } ... }
DRBDレプリケーションリンクが切断されると、DRBDは以下を実行します。
DRBDはcrm-fence-peer.9.sh
スクリプトを呼び出します。
スクリプトはクラスタマネージャに連絡します。
スクリプトはこのDRBDリソースに関連付けられたPacemakerリソースを判断します。
スクリプトは、このDRBDリソースが他のノードにプロモートされないことを確認します。リソースは現在アクティブなノード上にとどまります。
レプリケーションリンクがもう一度接続され、DRBDがその同期プロセスを完了すると、制限が解除されます。クラスタマネージャは自由にリソースをプロモートできるようになります。
インストールと設定のプロシージャが予期どおりの結果となった場合は、DRBD機能の基本的なテストを実行できます。このテストは、DRDBソフトウェアの機能を理解する上でも役立ちます。
alice上でDRBDサービスをテストします。
端末コンソールを開き、root
としてログインします。
aliceにマウントポイント(/srv/r0
など)を作成します。
root #
mkdir
-p /srv/r0
drbd
デバイスをマウントします。
root #
mount
-o rw /dev/drbd0 /srv/r0
プライマリノードからファイルを作成します。
root #
touch
/srv/r0/from_alice
aliceでディスクをマウント解除します。
root #
umount
/srv/r0
aliceで次のコマンドを入力して、aliceのDRBDサービスを降格します。
root #
drbdadm
secondary r0
bob上でDRBDサービスをテストします。
端末コンソールを開き、bobでroot
としてログインします。
bobで、DRBDサービスをプライマリに昇格します。
root #
drbdadm
primary r0
bobで、bobがプライマリかどうかチェックします。
root #
drbdadm
status r0
bobで、/srv/r0
などのマウントポイントを作成します。
root #
mkdir
/srv/r0
bobで、DRBDデバイスをマウントします。
root #
mount
-o rw /dev/drbd0 /srv/r0
aliceで作成したファイルが存在していることを確認します。
root #
ls
/srv/r0/from_alice
/srv/r0/from_alice
ファイルが一覧に表示されている必要があります。
サービスが両方のノードで稼動していれば、DRBDの設定は完了です。
再度、aliceをプライマリとして設定します。
bobで次のコマンドを入力して、bobのディスクをマウント解除します。
root #
umount
/srv/r0
bobで次のコマンドを入力して、bobのDRBDサービスを降格します。
root #
drbdadm
secondary
aliceで、DRBDサービスをプライマリに昇格します。
root #
drbdadm
primary
aliceで、aliceがプライマリかどうかチェックします。
root #
drbdadm
status r0
サービスを自動的に起動させ、サーバに問題が発生した場合はフェールオーバーさせるためには、Pacemaker/CorosyncでDRBDを高可用性サービスとして設定できます。SUSE Linux Enterprise 12 SP5のインストールと設定については、パートII「設定および管理」を参照してください。
DRBDをチューニングするには、いくつかの方法があります。
メタデータ用には外部ディスクを使用します。これは便利ですが、保守作業は煩雑になります。
sysctl
を介して受信および送信バッファ設定を変更することで、ネットワーク接続を調整します。
DRBD設定でmax-buffers
、max-epoch-size
、またはその両方を変更します。
IOパターンに応じて、al-extents
の値を増やします。
ハードウェアRAIDコントローラとBBU (「バッテリバックアップユニット」)を併用する場合、no-disk-flushes
、no-disk-barrier
、およびno-md-flushes
の設定が有効な場合があります。
ワークロードに従って読み込みバランスを有効にします。詳細については、https://www.linbit.com/en/read-balancing/を参照してください。
DRBDセットアップには、多数のコンポーネントが使用され、別のソースから問題が発生することがあります。以降のセクションでは、一般的なシナリオをいくつか示し、さまざまなソリューションを推奨します。
初期のDRBDセットアップが予期どおりに機能しない場合は、おそらく、環境設定に問題があります。
環境設定の情報を取得するには:
端末コンソールを開き、root
としてログインします。
drbdadm
に-d
オプションを指定して、環境設定ファイルをテストします。入力次のコマンドを入力します。
root #
drbdadm
-d adjust r0
adjust
オプションのドライ実行では、drbdadm
は、DRBDリソースの実際の設定を使用中のDRBD環境設定ファイルと比較しますが、コールは実行しません。出力をレビューして、エラーのソースおよび原因を確認してください。
/etc/drbd.d/*
ファイルとdrbd.conf
ファイルにエラーがある場合は、そのエラーを修正してから続行してください。
パーティションと設定が正しい場合は、drbdadm
を-d
オプションなしで、再度実行します。
root #
drbdadm
adjust r0
このコマンドは、環境設定ファイルをDRBDリソースに適用します。
DRBDの場合、ホスト名の大文字と小文字が区別され(Node0
はnode0
とは異なるホストであるとみなされる)、カーネルに格納されているホスト名と比較されます(uname -n
出力を参照)。
複数のネットワークデバイスがあり、専用ネットワークデバイスを使用したい場合、おそらく、ホスト名は使用されたIPアドレスに解決されません。この場合は、パラメータdisable-ip-verification
を使用します。
システムがピアに接続できない場合は、ローカルファイアウォールに問題のある可能性があります。DRBDは、デフォルトでは、TCPポート7788
を使用して、もう一方のノード にアクセスします。このポートを両方のノード からアクセスできるかどうか確認してください。
DRBDサブシステムが実際のどのデバイスが最新データを保持しているか認識していない場合、スプリットブレイン受験に変更されます。この場合、それぞれのDRBDサブシステムがセカンダリとして起動され、互いに接続しません。この場合、ログ記録データに、次のメッセージが出力されることがあります。
Split-Brain detected, dropping connection!
この状況を解決するには、廃棄するデータを持つノードで、次のコマンドを入力します。
root #
drbdadm
secondary r0
状態がWFconnection
の場合、最初に切断します。
root #
drbdadm
disconnect r0
最新のデータを持つノードで、次のコマンドを入力します。
root #
drbdadm
connect --discard-my-data r0
このコマンドは、あるノードのデータをピアのデータで上書きすることによって問題を解決するため、両方のノードで一貫したビューが得られます。
DRBDについては、次のオープンソースリソースを利用できます。
プロジェクトホームページhttp://www.drbd.org。
詳細については、Article “Highly Available NFS Storage with DRBD and Pacemaker”を参照してください。
http://clusterlabs.org/wiki/DRBD_HowTo_1.0(Linux Pacemaker Cluster Stack Projectによる)。
このディストリビューションで利用できるDRBDのマニュアルページは、drbd(8)
、rbdmeta(8)
、drbdsetup(8)
、drbdadm(8)
、drbd.conf(5)
です。
コメント付きのDRBD設定例が、/usr/share/doc/packages/drbd-utils/drbd.conf.example
にあります。
さらに、クラスタ間のストレージ管理を容易にするために、「DRBD-Manager」(https://www.linbit.com/en/drbd-manager/)に関する最新の通知を参照してください。
クラスタLVM2は、さまざまなツールと連携します。
ロックを通じてcLVMのディスクアクセスとメタデータへのアクセスを調整します。
1つのファイルシステムをいくつかのディスクに柔軟に分散することができます。LVM2は、ディスクスペースの仮想プールを提供します。
すべてのノードが変更を知ることができるように、LVMメタデータへのアクセスを調整します。cLVMは、共有データ自体へのアクセスは調整しません。これをcLVMができるようにするには、OCFS2などのクラスタ対応アプリケーションをcLVMの管理対象ストレージの上に設定する必要があります。
ご使用のシナリオによっては、次のレイヤを使用して、cLVMでRAID 1デバイスを作成することができます。
LVM2: ファイルシステムのサイズを増減したり、物理ストレージを追加したり、ファイルシステムのスナップショットを作成する場合に、高い柔軟性を提供するソリューションです。この方法については、21.2.3項 「シナリオ - SAN上でiSCSIを使用するcLVM」に説明があります。
DRBD: RAID 0 (ストライピング)とRAID 1 (ミラーリング)のみを提供します。最後の方式については、21.2.4項 「シナリオ - DRBDを使用するcLVM」に説明があります。
次の前提条件を満たしていることを確認してください。
共有ストレージデバイス(Fibre Channel、FCoE、SCSI、iSCSI SAN、DRBD*で提供されているデバイスなど)が使用できること
DRBDの場合は、両方のノードがプライマリであること(以降の手順で説明)。
LVM2のロックタイプがクラスタを認識するかどうか確認すること。/etc/lvm/lvm.conf
内のキーワードlocking_type
に値3
が含まれている必要があります(デフォルトは1
です)。必要な場合は、この設定をすべてのノード にコピーします。
cLVMで使用できないため、lvmetad
デーモンが無効になっているかどうかを確認します。/etc/lvm/lvm.conf
で、キーワードuse_lvmetad
が0
に設定される必要があります(デフォルトは1
です)。必要な場合は、この設定をすべてのノード にコピーします。
cLVMを使用するためのクラスタ準備には次の基本的な手順が含まれます。
シェルを起動して、root
としてログインします。
クラスタリソースの現在の設定を確認します。
root #
crm configure show
すでにDLMリソース(および対応するベースグループおよびベースクローン)を設定済みである場合、手順21.2「DLM、CLVM、およびSTONITHの設定」で継続します。
そうでない場合は、手順17.1「DLMのベースグループの設定」で説明されているように、DLMリソース、および対応するベースグループとベースクローンを設定します。
crmライブ設定をexit
で終了します。
クラスタのミラーログ情報を追跡するには、cmirrord
デーモンを使用します。このデーモンが実行されていないと、クラスタはミラーリングできません。
/dev/sda
と/dev/sdb
は、DRBD、iSCSI、その他と同様の共有ストレージデバイスであると想定します。必要な場合は、これらを独自のデバイス名に置き換えます。次の手順に従います。
2つ以上のノードを持つクラスタの作成方法については、『インストールおよびセットアップクイックスタート』を参照してください。
dlm
、clvmd
、およびSTONITHを実行するために、クラスタを構成します。
root #
crm
configurecrm(live)configure#
primitive
clvmd ocf:heartbeat:clvm \ params with_cmirrord=1 \ op stop interval=0 timeout=100 \ op start interval=0 timeout=90 \ op monitor interval=20 timeout=20crm(live)configure#
primitive
dlm ocf:pacemaker:controld \ op start timeout="90" \ op stop timeout="100" \ op monitor interval="60" timeout="60"crm(live)configure#
primitive
sbd_stonith stonith:external/sbd \ params pcmk_delay_max=30crm(live)configure#
group
g-storage dlm clvmdcrm(live)configure#
clone
cl-storage g-storage \ meta interleave="true" ordered=true
exit
でcrmshを終了し、変更内容をコミットします。
手順 21.3を使用してディスクの構成を続行します。
クラスタ化されたボリュームグループ (VG) を作成します。
root #
pvcreate
/dev/sda /dev/sdbroot #
vgcreate
-cy vg1 /dev/sda /dev/sdb
ミラーログの論理ボリューム (LV) をクラスタ内に作成します。
root #
lvcreate
-n lv1 -m1 -l10%VG vg1 --mirrorlog mirrored
lvs
を使用して進捗状況を表示します。パーセンテージの数値が100%に到達したら、ミラーディスクは正しく同期化されたということです。
クラスタ化されたボリューム/dev/vg/lv1
をテストするには、次の手順に従います。
/dev/vg/lv1
を読み込むか、ここに書き込みます。
lvchange
-an
でLVを非アクティブ化します。
lvchange
-ay
でLVをアクティブ化します。
lvconvert
を使用してミラーログをディスクログに変換します。
別のクラスタVGにミラーログのLVを作成します。これは前のものとは別のボリュームグループです。
現在のcLVMは、ミラーサイドごとに1つの物理ボリューム (PV) しか処理できません。1つのミラーが実際には、連結またはストライプ化の必要がある複数のPVで構成されている場合、lvcreate
はこのことを理解できません。このため、lvcreate
およびcmirrord
メタデータは、複数のPVを1つのサイドに「グループ化」することを理解する必要があり、事実上RAID10をサポートすることになります。
cmirrord
に対してRAID10をサポートするには、次の手順を使用します(/dev/sda
、/dev/sdb
、/dev/sdc
、および/dev/sdd
は共有ストレージデバイスだとします)。
ボリュームグループ (VG) を作成します。
root #
pvcreate
/dev/sda /dev/sdb /dev/sdc /dev/sdd Physical volume "/dev/sda" successfully created Physical volume "/dev/sdb" successfully created Physical volume "/dev/sdc" successfully created Physical volume "/dev/sdd" successfully createdroot #
vgcreate
vgtest /dev/sda /dev/sdb /dev/sdc /dev/sdd Clustered volume group "vgtest" successfully created
ファイル/etc/lvm/lvm.conf
を開き、allocation
セクションに移動します。次の行を設定して、ファイルを保存します。
mirror_logs_require_separate_pvs = 1
PVにタグを追加します。
root #
pvchange
--addtag @a /dev/sda /dev/sdbroot #
pvchange
--addtag @b /dev/sdc /dev/sdd
タグは、ストレージオブジェクトのメタデータに割り当てられる順序付けのないキーワードまたは用語です。タグを使用すると、順序付けのないタグのリストをLVM2ストレージオブジェクトのメタデータに添付することによって、それらのオブジェクトのコレクションを有用になるように分類できます。
タグを一覧します。
root #
pvs
-o pv_name,vg_name,pv_tags /dev/sd{a,b,c,d}
次の出力を受信します。
PV VG PV Tags /dev/sda vgtest a /dev/sdb vgtest a /dev/sdc vgtest b /dev/sdd vgtest b
LVM2に関する詳細情報が必要な場合は、『SUSE Linux Enterprise Server 12 SP5 ストレージ管理ガイド』(https://documentation.suse.com/sles-12/html/SLES-all/cha-lvm.html)を参照してください。
次のシナリオでは、iSCSIターゲットをいくつかのクライアントにエクスポートする2つのSANボックスを使用します。一般的なアイデアが、図21.1「cLVMによるiSCSIのセットアップ」で説明されています。
以降の手順を実行すると、ディスク上のデータはすべて破壊されます。
まず、1つのSANボックスだけ設定します。各SANボックスは、そのiSCSIターゲットをエクスポートする必要があります。次の手順に従います。
YaSTを実行し、
› の順にクリックしてiSCSIサーバモジュールを起動します。コンピュータがブートするたびにiSCSIターゲットを起動したい場合は、
を選択し、そうでない場合は、 を選択します。ファイアウォールが実行中の場合は、
を有効にします。タブに切り替えます。認証が必要な場合は、受信または送信(あるいはその両方の)認証を有効にします。この例では、 を選択します。
新しいiSCSIターゲットを追加します。
タブに切り替えます。
をクリックします。
ターゲットの名前を入力します。名前は、次のようにフォーマットされます。
iqn.DATE.DOMAIN
フォーマットに関する詳細は、セクション3.2.6.3.1のタイプ「iqn」(iSCSI修飾名)(http://www.ietf.org/rfc/rfc3720.txt)を参照してください。
より説明的な名前にしたい場合は、さまざまなターゲットで一意であれば、識別子を変更できます。
をクリックします。
にデバイス名を入力し、 を使用します。
を2回クリックします。
警告ボックスで
を選択して確認します。
環境設定ファイル/etc/iscsi/iscsid.conf
を開き、パラメータnode.startup
をautomatic
に変更します。
次の手順に従って、iSCSIイニシエータを設定します。
YaSTを実行し、
› の順にクリックします。コンピュータがブートするたびに、iSCSIイニシエータを起動したい場合は、
を選択し、そうでない場合は、 を選択します。タブに切り替え、 ボタンをクリックします。
自分のIPアドレスとiSCSIターゲットのポートを追加します(手順21.4「iSCSIターゲット(SAN上)を設定する」参照)。通常は、ポートを既定のままにし、デフォルト値を使用できます。
認証を使用する場合は、受信および送信用のユーザ名およびパスワードを挿入します。そうでない場合は、
を選択します。を選択します。検出された接続が一覧されます。
をクリックして続行します。
シェルを開いて、root
としてログインします。
iSCSIイニシエータが正常に起動しているかどうかテストします。
root #
iscsiadm
-m discovery -t st -p 192.168.3.100 192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1
セッションを確立します。
root #
iscsiadm
-m node -l -p 192.168.3.100 -T iqn.2010-03.de.jupiter:san1 Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260] Login to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]: successful
lsscsi
でデバイス名を表示します。
... [4:0:0:2] disk IET ... 0 /dev/sdd [5:0:0:1] disk IET ... 0 /dev/sde
3番目の列にIET
を含むエントリを捜します。この場合、該当するデバイスは、/dev/sdd
と/dev/sde
です。
手順21.5「iSCSIイニシエータを設定する」のiSCSIイニシエータを実行したノードの1つで、root
シェルを開きます。
ディスク/dev/sdd
および/dev/sde
でコマンドpvcreate
を使用して、LVM2用に物理ボリュームを準備します。
root #
pvcreate
/dev/sddroot #
pvcreate
/dev/sde
両方のディスク上でクラスタ対応のボリュームグループを作成します。
root #
vgcreate
--clustered y clustervg /dev/sdd /dev/sde
必要に応じて、論理ボリュームを作成します。
root #
lvcreate
-m1 --name clusterlv --size 500M clustervg
物理ボリュームをpvdisplay
で確認します。
--- Physical volume --- PV Name /dev/sdd VG Name clustervg PV Size 509,88 MB / not usable 1,88 MB Allocatable yes PE Size (KByte) 4096 Total PE 127 Free PE 127 Allocated PE 0 PV UUID 52okH4-nv3z-2AUL-GhAN-8DAZ-GMtU-Xrn9Kh --- Physical volume --- PV Name /dev/sde VG Name clustervg PV Size 509,84 MB / not usable 1,84 MB Allocatable yes PE Size (KByte) 4096 Total PE 127 Free PE 127 Allocated PE 0 PV UUID Ouj3Xm-AI58-lxB1-mWm2-xn51-agM2-0UuHFC
ボリュームグループをvgdisplay
で確認します。
--- Volume group --- VG Name clustervg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable Clustered yes Shared no MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 1016,00 MB PE Size 4,00 MB Total PE 254 Alloc PE / Size 0 / 0 Free PE / Size 254 / 1016,00 MB VG UUID UCyWw8-2jqV-enuT-KH4d-NXQI-JhH3-J24anD
ボリュームを作成してリソースを起動すると、/dev/dm-*
という名前で新しいデバイスが作成されています。LVM2リソースの上でクラスタ化されたファイルシステム(たとえば、OCFS)を使用することをお勧めします。詳細については、「第18章 「OCFS2」」を参照してください。
市、国、または大陸の各所にデータセンターが分散している場合は、次のシナリオを使用できます。
プライマリ/プライマリDRBDリソースを作成する
まず、手順20.1「DRBDの手動設定」の説明に従って、DRBDデバイスをプライマリ/セカンダリとしてセットアップします。ディスクの状態が両方のノードでup-to-date
であることを確認します。drbdadm status
を使用してこれをチェックします。
次のオプションを環境設定ファイル(通常は、/etc/drbd.d/r0.res
)に追加します。
resource r0 { net { allow-two-primaries; } ... }
変更した設定ファイルをもう一方のノードにコピーします。たとえば、次のように指定します。
root #
scp
/etc/drbd.d/r0.res venus:/etc/drbd.d/
両方のノードで、次のコマンドを実行します。
root #
drbdadm
disconnect r0root #
drbdadm
connect r0root #
drbdadm
primary r0
ノードのステータスをチェックします。
root #
drbdadm
status r0
clvmdリソースをペースメーカーの環境設定でクローンとして保存し、DLMクローンリソースに依存させます。詳細については、手順21.1「DLMリソースを作成する」を参照してください。次に進む前に、クラスタでこれらのリソースが正しく機動していることを確認してください。crm status
またはWebインタフェースを使用して、実行中のサービスを確認できます。
pvcreate
コマンドで、LVM2用に物理ボリュームを準備します。たとえば、/dev/drbd_r0
デバイスでは、コマンドは次のようになります。
root #
pvcreate
/dev/drbd_r0
クラスタ対応のボリュームグループを作成します。
root #
vgcreate
--clustered y myclusterfs /dev/drbd_r0
必要に応じて、論理ボリュームを作成します。論理ボリュームのサイズは変更できます。たとえば、次のコマンドで、4GBの論理ボリュームを作成します。
root #
lvcreate
-m1 --name testlv -L 4G myclusterfs
VG内の論理ボリュームは、ファイルシステムのマウントまたはraw用として使用できるようになりました。論理ボリュームを使用しているサービスにコロケーションのための正しい依存性があることを確認し、VGをアクティブ化したら論理ボリュームの順序付けを行います。
このような設定手順を終了すると、LVM2の環境設定は他のスタンドアロンワークステーションと同様に行えます。
複数のデバイスが同じ物理ボリュームの署名を共有していると思われる場合(マルチパスデバイスやdrbdなどのように)、LVM2がPVを走査するデバイスを明示的に設定しておくことをお勧めします。
たとえばコマンドvgcreate
がミラーブロックデバイスの代わりに物理デバイスを使用すると、DRBDは混乱してしまい、DRBDのスプリットブレイン状態が発生する場合があります。
LVM2用の単一のデバイスを非アクティブ化するには、次の手順に従います。
ファイル/etc/lvm/lvm.conf
を編集し、filter
から始まる行を検索します。
そこに記載されているパターンは正規表現として処理されます。冒頭の「a」は走査にデバイスパターンを受け入れることを、冒頭の「r」はそのデバイスパターンのデバイスを拒否することを意味します。
/dev/sdb1
という名前のデバイスを削除するには、次の表現をフィルタルールに追加します。
"r|^/dev/sdb1$|"
完全なフィルタ行は次のようになります。
filter = [ "r|^/dev/sdb1$|", "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "a/.*/" ]
DRBDとMPIOデバイスは受け入れ、その他のすべてのデバイスは拒否するフィルタ行は次のようになります。
filter = [ "a|/dev/drbd.*|", "a|/dev/.*/by-id/dm-uuid-mpath-.*|", "r/.*/" ]
環境設定ファイルを書き込み、すべてのクラスタノードにコピーします。
詳細な情報は、http://www.clusterlabs.org/wiki/Help:ContentsにあるPacemakerメーリングリストから取得できます。
cLVMのFAQのオフィシャルサイトはhttp://sources.redhat.com/cluster/wiki/FAQ/CLVMです。
Cluster MDは、クラスタ環境内のRAID1の使用をサポートします。Cluster MDで使用されるディスクまたはデバイスは、各ノードからアクセスされます。Cluster MDの一方のデバイスに障害が発生した場合、実行時に他方のデバイスに置き換えることができ、同じ量の冗長性を提供するために再同期されます。Cluster MDでは、調整とメッセージングのためにCorosyncと分散ロックマネージャ(DLM)が必要です。
Cluster MDデバイスは、他の通常のMDデバイスのようにブート時に自動的に開始されません。クラスタ化されたデバイスはリソースエージェントを使用して開始し、DLMリソースが開始されていることを確認する必要があります。
Pacemakerを使用して実行中のクラスタ。
DLMのリソースエージェント(DLMの設定方法については、手順17.1「DLMのベースグループの設定」を参照してください)。
少なくても2つの共有ディスクデバイス。デバイス障害の場合は自動的にフェールオーバーするスペアとして追加のデバイスを使用できます。
インストール済みパッケージ cluster-md-kmp-default。
クラスタの各ノードでDLMリソースが稼動していることを確認し、リソース状態を確認するには、次のコマンドを実行します。
root #
crm_resource
-r dlm -W
Cluster MDデバイスを作成します。
既存の通常のRAIDデバイスがない場合、次のコマンドを実行し、DLMリソースが稼動しているノードでCluster MDデバイスを作成します。
root #
mdadm
--create /dev/md0 --bitmap=clustered \ --metadata=1.2 --raid-devices=2 --level=mirror /dev/sda /dev/sdb
Cluster MDはバージョン1.2のメタデータでのみ動作します。このため、--metadata
オプションを使用してバージョンを指定することが推奨されます。他の役立つオプションについては、mdadm
のマニュアルページを参照してください。/proc/mdstat
で再同期の進捗状況を監視します。
既存の通常のRAIDがすでにある場合は、最初に既存のビットマップをクリアしてからクラスタ化されたビットマップを作成します。
root #
mdadm
--grow /dev/mdX --bitmap=noneroot #
mdadm
--grow /dev/mdX --bitmap=clustered
オプションで、自動フェールオーバーのためのスペアデバイスを使用してCluster MDデバイスを作成するには、1つのクラスタノード上で次のコマンドを実行します。
root #
mdadm
--create /dev/md0 --bitmap=clustered --raid-devices=2 \ --level=mirror --spare-devices=1 /dev/sda /dev/sdb /dev/sdc --metadata=1.2
UUIDおよび関連するmdパスを取得します。
root #
mdadm
--detail --scan
このUUIDはスーパーブロックに保存されているUUIDと一致する必要があります。UUIDの詳細については、mdadm.conf
のマニュアルページを参照してください。
/etc/mdadm.conf
を開いて、mdデバイス名とそのデバイス名に関連付けられているデバイスを追加します。前のステップのUUIDを使用します。
DEVICE /dev/sda /dev/sdb ARRAY /dev/md0 UUID=1d70f103:49740ef1:af2afce5:fcf6a489
Csync2の設定ファイル/etc/csync2/csync2.cfg
を開き、/etc/mdadm.conf
を追加します。
group ha_group { # ... list of files pruned ... include /etc/mdadm.conf }
CRMリソースを次のように設定します。
Raid1
プリミティブを作成します。
crm(live)configure#
primitive
raider Raid1 \ params raidconf="/etc/mdadm.conf" raiddev=/dev/md0 \ force_clones=true \ op monitor timeout=20s interval=10 \ op start timeout=20s interval=0 \ op stop timeout=20s interval=0
raider
リソースをDLM用に作成したストレージのベースグループに追加します。
crm(live)configure#
modgroup
g-storage add raider
add
サブコマンドは、デフォルトで新しいグループメンバーを追加します。
まだ実行されてない場合は、g-storage
グループのクローンを作成して、すべてのノードで実行できるようにします。
crm(live)configure#
clone
cl-storage g-storage \ meta interleave=true target-role=Started
show
で変更内容をレビューします。
すべて正しいと思われる場合は、commit
で変更を送信します。
デバイスを既存のアクティブなCluster MDデバイスに追加するには、最初にそのデバイスが各ノード上で「表示可能」であることを、コマンドを実行して確認します(cat /proc/mdstat
)。デバイスが表示できない場合、コマンドは失敗します。
1つのクラスタノード上で次のコマンドを使用します。
root #
mdadm
--manage /dev/md0 --add /dev/sdc
追加された新しいデバイスの動作は、Cluster MDデバイスの状態によって異なります。
ミラーリングされたデバイスの1つのみがアクティブである場合、新しいデバイスはミラーリングされたデバイスの2番目のデバイスになり、回復処理が開始されます。
Cluster MDデバイスの両方のデバイスがアクティブな場合、新たに追加されたデバイスはスペアデバイスになります。
多くの場合、障害は一時的なもので、単一ノードに限定されます。任意のノードでI/O処理中に障害が発生した場合、クラスタ全体のデバイスがfailedとマーク付けされます。
たとえば、あるノードでケーブル障害が発生した場合などに、このようになることがあります。問題を修正した後で、デバイスを再追加できます。新しいパーツを追加してデバイス全体を同期するのではなく、古いパーツのみが同期されます。
デバイスを再追加するには、1つのクラスタノード上で次のコマンドを実行します。
root #
mdadm
--manage /dev/md0 --re-add /dev/sdb
置き換えるために実行時にデバイスを削除する前に、次の操作を実行します。
/proc/mdstat
をイントロスペクトしてデバイスに障害が発生しているか確認します。デバイスの前にある(F)
を探します。
1つのクラスタノード上で次のコマンドを実行して、デバイスに障害発生させます。
root #
mdadm
--manage /dev/md0 --fail /dev/sda
1つのクラスタノード上で次のコマンドを実行して障害が発生したデバイスを削除します。
root #
mdadm
--manage /dev/md0 --remove /dev/sda
TDB (Trivial Database)は、長年にわたって、Sambaによって使用されてきました。TDBでは、複数のアプリケーションが同時に書き込むことができます。すべての書き込み操作を正常に実行し、互いに衝突させないため、TDBは、内部ロッキングメカニズムを使用しています。
CTDB (Cluster Trivial Database)は、既存のTDBの小規模な拡張です。CTDBは、プロジェクトによって、「一時データの保存のために、Sambaなどのプロジェクトによって使用されるTDBデータベースのクラスタ実装」として説明されています。
各クラスタノードは、ローカルCTDBデーモンを実行します。Sambaは、そのTDBに直接書き込むのではなく、そのローカルCTDBデーモンと通信します。それらのデーモンは、ネットワークを介してメタデータを交換しますが、実際の読み取り/書き込み操作は、高速ストレージでローカルコピー上で行われます。CTDBの概念は、図23.1「CTDBクラスタの構造」に表示されています。
CTDBリソースエージェントの現在の実装では、Sambaの管理のためだけにCTDBを設定します。他の機能(IPフェールオーバーなど)はすべて、Pacemakerで設定する必要があります。
CTDBは、完全に同種のクラスタに関してのみサポートされます。たとえば、クラスタのすべてのノードが同じアーキテクチャを持つ必要があります。x86とAMD64/Intel 64を混合することはできません。
クラスタ対応Sambaサーバは、一定のデータを共有する必要があります。
UnixのユーザとグループIDをWindowsのユーザとグループに関連付けるマッピングテーブル。
ユーザデータベースをすべてのノード間で同期する必要があります。
Windowsドメイン内のメンバサーバの参加情報をすべてのノードで利用できる必要があります。
メタデータをすべてのノードで利用できる必要があります(アクティブSMBセッション、共有接続、各ロックなど)。
クラスタ対応SambaサーバがN+1ノードを持っている場合、Nノードだけのサーバより高速になることを目的としています。1つのノードは、クラスタ非対応のSambaサーバより遅くなることはありません。
CTDBリソースエージェントは、自動的に/etc/sysconfig/ctdb
を変更します。crm ra
info CTDB
を使用して、CTDBリソースに指定できるすべてのパラメータを一覧表示してください。
クラスタ対応Sambaサーバをセットアップするには、次の手順に従います。
クラスタを準備します。
次のパッケージがインストールされていることを確認してから進んでください: ctdb
、tdb-tools
、およびsamba
(smb
およびnmb
リソースに必要)。
このガイドのパートII「設定および管理」で説明されているように、クラスタ(Pacemaker、OCFS2)を設定します。
OCFS2などの共有ファイルシステムを設定し、マウントします(たとえば、/srv/clusterfs
にマウント)。詳細については、第18章 「OCFS2」を参照してください。
POSIX ACLをオンにする場合は、それを有効にします。
新しいOCFS2ファイルシステムの場合は、次のコマンドを使用します。
root #
mkfs.ocfs2
--fs-features=xattr ...
既存のOCFS2ファイルシステムの場合は、次のコマンドを使用します。
root #
tunefs.ocfs2
--fs-feature=xattr DEVICE
ファイルシステムリソースには、必ず、acl
オプションを指定します。次のように、crm
シェルを使用します。
crm(live)configure#
primitive
ocfs2-3 ocf:heartbeat:Filesystem params options="acl" ...
ctdb
、smb
、nmb
の各サービスが無効になるようにします。
root #
systemctl
disable ctdbroot #
systemctl
disable smbroot #
systemctl
disable nmb
すべてのノードのファイアウォールのポート4379
を開きます。これは、CTDBが他のクラスタノードと通信するために必要です。
共有ファイルシステムにCTDBロックのディレクトリを作成します。
root #
mkdir
-p /srv/clusterfs/samba/
/etc/ctdb/nodes
に、クラスタ内の各ノードの全プライベートIPアドレスを含むすべてのノードを挿入します。
192.168.1.10 192.168.1.11
Sambaを設定します。/etc/samba/smb.conf
の[global]
セクションに次の行を追加します。「CTDB-SERVER」の代わりに、選択したホスト名を使用します(クラスタ内のすべてのノードは、この名前を持つ1つの大きなノードとして表示されます)。
[global] # ... # settings applicable for all CTDB deployments netbios name = CTDB-SERVER clustering = yes idmap config * : backend = tdb2 passdb backend = tdbsam ctdbd socket = /var/lib/ctdb/ctdb.socket # settings necessary for CTDB on OCFS2 fileid:algorithm = fsid vfs objects = fileid # ...
csync2
を使用して、設定ファイルをすべてのノードにコピーします。
root #
csync2
-xv
詳細については、手順4.6「Csync2による設定ファイルの同期」を参照してください。
CTDBリソースをクラスタに追加します。
root #
crm
configurecrm(live)configure#
primitive
ctdb ocf:heartbeat:CTDB params \ ctdb_manages_winbind="false" \ ctdb_manages_samba="false" \ ctdb_recovery_lock="/srv/clusterfs/samba/ctdb.lock" \ ctdb_socket="/var/lib/ctdb/ctdb.socket" \ op monitor interval="10" timeout="20" \ op start interval="0" timeout="90" \ op stop interval="0" timeout="100"crm(live)configure#
primitive
nmb systemd:nmb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#
primitive
smb systemd:smb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#
group
g-ctdb ctdb nmb smbcrm(live)configure#
clone
cl-ctdb g-ctdb meta interleave="true"crm(live)configure#
colocation
col-ctdb-with-clusterfs inf: cl-ctdb cl-clusterfscrm(live)configure#
order
o-clusterfs-then-ctdb inf: cl-clusterfs cl-ctdbcrm(live)configure#
commit
クラスタ対応のIPアドレスを追加します。
crm(live)configure#
primitive
ip ocf:heartbeat:IPaddr2 params ip=192.168.2.222 \ unique_clone_address="true" \ op monitor interval="60" \ meta resource-stickiness="0"crm(live)configure#
clone
cl-ip ip \ meta interleave="true" clone-node-max="2" globally-unique="true"crm(live)configure#
colocation
col-ip-with-ctdb 0: cl-ip cl-ctdbcrm(live)configure#
order
o-ip-then-ctdb 0: cl-ip cl-ctdbcrm(live)configure#
commit
unique_clone_address
がtrue
に設定されている場合、IPaddr2リソースエージェントはクローンIDを指定のアドレスに追加し、3つの異なるIPアドレスを設定します。これらは通常必要とされませんが、負荷分散に役立ちます。この項目の詳細については、14.2項 「Linux仮想サーバによる負荷分散の設定」を参照してください。
変更をコミットします。
crm(live)configure#
commit
結果を確認します。
root #
crm
status Clone Set: cl-storage [dlm] Started: [ factory-1 ] Stopped: [ factory-0 ] Clone Set: cl-clusterfs [clusterfs] Started: [ factory-1 ] Stopped: [ factory-0 ] Clone Set: cl-ctdb [g-ctdb] Started: [ factory-1 ] Started: [ factory-0 ] Clone Set: cl-ip [ip] (unique) ip:0 (ocf:heartbeat:IPaddr2): Started factory-0 ip:1 (ocf:heartbeat:IPaddr2): Started factory-1
クライアントコンピュータからテストを行います。次のコマンドをLinuxクライアントで実行して、システムからファイルをコピーしたり、システムにファイルをコピーできるかどうか確認します。
root #
smbclient
//192.168.2.222/myshare
Active Directory (AD)は、Windowsサーバシステムのディレクトリサービスです。
次の手順は、CTDBクラスタをActive Directoryドメインに追加する方法を概説しています。
手順23.1「クラスタ対応Sambaサーバの基本セットアップ」の説明に従って、CTDBリソースを作成します。
samba-winbind
パッケージをインストールします。
winbind
サービスを無効にします。
root #
systemctl
disable winbind
winbindクラスタリソースを定義します。
root #
crm
configurecrm(live)configure#
primitive
winbind systemd:winbind \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#
commit
g-ctdb
グループを編集して、nmb
とsmb
リソースの間にwinbind
を挿入します。
crm(live)configure#
edit
g-ctdb
:–w (vim
)でエディタを保存して閉じます。
Active Directoryドメインのセットアップ方法については、Windows Serverのマニュアルを参照してください。この例では、次のパラメータを使用します。
ADおよびDNSサーバ |
win2k3.2k3test.example.com |
ADドメイン |
2k3test.example.com |
クラスタADメンバーのNETBIOS名 |
CTDB-SERVER |
最後に、クラスタをActive Directoryサーバに参加させます。
次のファイルが、すべてのクラスタホストにインストールされるように、Csync2設定に含まれていることを確認します。
/etc/samba/smb.conf /etc/security/pam_winbind.conf /etc/krb5.conf /etc/nsswitch.conf /etc/security/pam_mount.conf.xml /etc/pam.d/common-session
この作業には、YaSTの4.5項 「すべてのノードへの設定の転送」を参照してください。
モジュールを使用することもできます。YaSTを実行し、
エントリから モジュールを開きます。ドメインまたはワークグループの設定を入力して、
をクリックして終了します。クライアント対応Sambaサーバのデバッグには、次のツールを使用できます。これらのツールは、さまざまなレベルで動作します。
ctdb_diagnostics
このツールを実行して、クラスタ対応Sambaサーバを診断します。詳細なデバッグメッセージが出力されるので、発生している問題を追跡するのに役立ちます。
ctdb_diagnostics
コマンドは、次のファイルを検索します。これらのファイルは、すべてのノードで利用できる必要があります。
/etc/krb5.conf /etc/hosts /etc/ctdb/nodes /etc/sysconfig/ctdb /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf /etc/samba/smb.conf /etc/fstab /etc/multipath.conf /etc/pam.d/system-auth /etc/sysconfig/nfs /etc/exports /etc/vsftpd/vsftpd.conf
/etc/ctdb/public_addresses
ファイルと/etc/ctdb/static-routes
ファイルが存在する場合は、それらもチェックされます。
ping_pong
ping_pong
では、ファイルシステムがCTDBに適合しているかどうかチェックできます。このコマンドは、クラスタファイルシステムの一定のテスト(コヒーレンスやパフォーマンスなどのテスト)を実行して(http://wiki.samba.org/index.php/Ping_pong参照)、高負荷の状況下におけるクラスタの動作を示す情報を提供します。
send_arp
ツールおよびSendArp
リソースエージェント
SendArp
リソースエージェントは、/usr/lib/heartbeat/send_arp
(または/usr/lib64/heartbeat/send_arp
)にあります。send_arp
ツールはGratuitous ARP (余計なアドレス解決プロトコル)パケットを送信し、他のマシンのARPテーブルを更新するために使用できます。これは、フェールオーバープロセス後の通信問題の識別に役立ちます。Sambaのクラスタ化されたIPアドレスを表示しているのにも関わらず、ノードに接続またはpingできない場合は、send_arp
コマンドを使用して、ノードはARPテーブルの更新のみが必要であるのかをテストします。
詳細については、http://wiki.wireshark.org/Gratuitous_ARPを参照してください。
クラスタファイルシステムの特定の側面をテストするには、次の手順に従います。
1つのノードでping_pong
コマンドを開始します。プレースホルダNはノード数+1で置き換えます。共有ストレージではABSPATH/data.txt
ファイルが使用可能で、すべてのノード上でアクセスできます(ABSPATHは絶対パスを示しています)。
ping_pong
ABSPATH/data.txt N
1つのノードでだけ実行しているので、ロッキングレートは非常に高いと予想してください。プログラムがロッキングレートを出力しない場合は、クラスタファイルシステムを置き換えます。
同じパラメータを使用して、別のノードでping_pong
の2つ目のコピーを開始します。
ロッキングレートが大幅に下がることを予想できます。使用しているクラスタファイルシステムに次のどれかが当てはまる場合は、クラスタファイルシステムを置き換えます。
ping_pong
がロッキングレート(秒単位)を出力しない。
2つのインスタンスのロッキングレートがほぼ同じではない。
2つ目のインスタンスの開始後にロッキングレートが下がらなかった。
ping_pong
の3つ目のコピーを開始します。もう1つノードを追加し、ロッキングレートの変化に注目します。
ping_pong
コマンドを1つずつ終了させます。単一ノードの状態に戻るまで、ロッキングレートの増加が観察されるはずです。予想したような振る舞いが見られなかった場合には、第18章 「OCFS2」に記されている詳細を参照してください。
以降のセクションでは、障害復旧の一般的な概念を述べ、Rearを使用した復旧を実現するために必要となる基本的な手順について説明します。また、Rearの要件に関するいくつかの指針、知っておくべき制限事項、およびシナリオとバックアップツールについても紹介します。
Rearの複雑な機能を理解することは、ツールでの作業を意図したように行うために重要です。したがって障害が発生する前に、この章を注意深く読んで、Rearについての理解を深めてください。また、Rearの既知の制限事項を認識し、システムをあらかじめテストする必要もあります。
最悪のシナリオが発生する前に、ITインフラストラクチャに重大なリスクがあるかどうかの分析、予算の見積もり、障害復旧プランの作成などの対応策を講じます。障害復旧プランを手元に用意していない場合は、以下の手順ごとに情報を入手します。
リスクの分析: インフラの確かなリスク分析を実施します。可能性のあるすべての脅威を一覧表示し、深刻度を評価します。これらの脅威が発生する可能性を判断し、優先順位を設定します。可能性と影響の簡単な分類を使用することを推奨します。
予算のプラニング: 分析結果には、どのリスクが耐えうるもので、どれがビジネスにとって致命的であるかを全般的に示します。リスクを最小限にする方法およびそれに要するコストを自問して検討します。会社の規模に応じて、IT予算全体の2~15%を障害復旧に使用します。
障害復旧プランの作成: チェックリストの作成、手順のテスト、優先順位の設定と割り当て、ITインフラのインベントリ調査を行います。インフラのサービスが失敗した際、問題に対処する方法を定義します。
テスト: 念入りなプランを定義したら、それをテストします。最低でも1年に1度テストします。ご使用のメインITインフラと同じテストハードウェアを使用します。
運用環境に存在するシステムが、ハードウェアの損傷、誤設定、ソフトウェア上の問題など、原因がどのようなものであっても破損した場合は、システムを再作成する必要があります。再作成は、同じハードウェア上または互換性のある代替ハードウェア上で実行できます。バックアップからファイルを復元するだけでは、システムを再作成することにはなりません。システムの再作成では、パーティション、ファイルシステム、マウントポイントの面からのシステムのストレージ作成や、ブートローダの再インストールなどの作業も必要になります。
システムが正常に稼働しているときに、ファイルのバックアップを作成し、復旧メディア上に復旧システムを作成します。復旧システムには、復旧インストーラが収められています。
システムが破損した場合は、損傷したハードウェアを必要に応じて交換し、復旧メディアから復旧システムをブートして復旧インストーラを起動します。復旧インストーラによるシステムの再作成では、まず、ストレージにパーティション、ファイルシステム、マウントポイントを作成し、続いてバックアップからファイルを復元します。最後に、ブートローダを再インストールします。
Rearを使用するには、運用環境を実行するマシンおよびそれと同一のテストマシンが必要です。つまり、同一のシステムが2台以上必要になります。ここでいう「同一」とは、たとえば、ネットワークカードを、同じカーネルドライバを使用する他のネットワークカードに置き換えることができるということです。
運用環境のドライバと同じドライバを使用していないハードウェアコンポーネントは、Rearでは同一のコンポーネントとは見なされません。
よい古いバージョンのサービスパックと互換性を持つために、SUSE Linux Enterprise High Availability Extension 12 SP5には、異なるRearバージョン: 1.16 (RPMパッケージ rear116の一部)、1.17.2.a (rear1172a)、1.18a (rear118a), および2.4 (rear23a)が付属しています。最新バージョンには、アップストリームGitHubプロジェクトからの、若干の最新の拡張が含まれます。
バグ修正、非互換性、および他の問題に関する情報はすべて、パッケージの変更ログで検索できます。障害復旧手順を再検証する必要がある場合は、Rearのより最新のパッケージバージョンも確認することをお勧めします。
Rearには次の問題がありますので注意してください。
UEFIシステムで障害復旧を許可するには、バージョン1.18.aおよびパッケージ ebisoが必要です。このバージョンのみが新しいヘルパーツール/usr/bin/ebiso
をサポートします。このヘルパーツールは、UEFIブート可能RearシステムISOイメージの作成に使用されます。
特定のRearバージョンによる障害復旧手順をテスト済みで、その手順が十分に機能しているのであれば、Rearを更新しないでください。Rearパッケージをそのまま保持し、障害復旧手法を変更しないようにします。
Rearの各バージョン更新は、インストール済みのバージョンが誤って別のバージョンに置き換えられることがないよう、相互に意図的に衝突する別個のパッケージとして提供されています。
次の場合に、既存の障害復旧手順を完全に再検証する必要があります。
Rearバージョンの更新ごとに。
Rearを手動で更新する場合。
Rearで使用されるソフトウェアごとに。
parted
、btrfs
、などの低レベルのシステムコンポーネントを更新する場合。
Btrfsを使用する場合は次の制限事項が発生します。
Rearバージョン1.17.2.a以上が必要です。このバージョンは、スナップショットのサブボリュームが存在しない「通常の」Btrfsサブボリューム構造の再作成をサポートしています。
ファイルベースのバックアップソフトウェアでは、Btrfsスナップショットのサブボリュームを通常どおりにはバックアップできず、復元することもできません。
Btrfsにはコピーオンライト機能があることから、Btrfsファイルシステム上にある最近のスナップショットサブボリュームはディスク容量をほとんど必要としません。一方、ファイルベースのバックアップソフトウェアを使用すると、これらのファイルは完全なファイルとしてバックアップされます。最終的に、これらのファイルはその本来のファイルサイズで2回バックアップされることになります。したがって、元のシステム上に以前に存在していたときと同じ状態にスナップショットを復元することができません。
SLE12 GA、SLE12 SP1、およびSLE12 SP2の設定には、いくつかの不適合Btrfsのデフォルト構造があります。そのため、適合するRear設定ファイルを使用することはたいへん重要です。/usr/share/rear/conf/examples/SLE12*-btrfs-example.conf
のサンプルファイルを参照してください。
Rearでは、ハードディスク、フラッシュディスク、DVD/CD-RなどのローカルメディアからのブートやPXEを介したブートが可能な障害復旧システム(システム固有の復旧インストーラなど)を作成できます。バックアップデータは、例 24.1に説明があるNFSなどのネットワークファイルシステムに保存できます。
Rearは、ファイルのバックアップに取って代わるツールではなく、それを補完するツールです。Rearは、汎用的なtar
コマンドのほか、いくつかのサードパーティのバックアップツールをデフォルトでサポートしています。このようなバックアップツールとして、Tivoli Storage Manager、QNetix Galaxy、Symantec NetBackup、EMC NetWorker、HP DataProtectorなどがあります。バックアップツールとしてEMC NetWorkerを使用したRearの設定例については例 24.2を参照してください。
障害発生時にRearを使用して効果的な復旧を実現するには、以下の基本手順を実行する必要があります。
この手順では、Rear設定ファイルの編集、Bashスクリプトの調整、使用するバックアップソリューションの設定などのタスクを実行します。
保護対象のシステムが稼働しているときに、rear mkbackup
コマンドを使用して、ファイルのバックアップを作成し、システム固有のRear復旧インストーラなどの復旧システムを生成します。
Rearを使用して障害復旧メディアを作成した場合は、その障害復旧プロセスを必ず十分にテストしておくようにします。ここでは、運用環境を構成するハードウェアと同一のハードウェアを備えたテストマシンの使用が不可欠です。詳細については、24.1.4項 「Rearの要件」を参照してください。
障害が発生した場合は、必要に応じて損傷したハードウェアを交換します。続いて、Rear復旧システムをブートし、rear recover
コマンドで復旧インストーラを起動します。
Rearをセットアップするには、少なくともRear設定ファイル/etc/rear/local.conf
を編集する必要があります。さらに、Rearフレームワークを構成するBashスクリプトも必要に応じて編集します。
特に、Rearが実行する以下のタスクの定義が必要です。
システムをUEFIを使用してブートする場合:
システムをUEFIブートローダを使用してブートする場合は、パッケージ
ebiso をインストールし、次の行を/etc/rear/local.conf
に追加します。
ISO_MKISOFS_BIN=/usr/bin/ebiso
ファイルをバックアップする方法および障害復旧システムを作成して保存する方法:
これは、/etc/rear/local.conf
で設定する必要があります。
正確な再作成を必要とする対象(パーティション、ファイルシステム、マウントポイントなど):
これは、/etc/rear/local.conf
で定義できます(たとえば、除外対象を定義できます)。標準とは異なるシステムを再作成するには、Bashスクリプトの拡張が必要になることがあります。
復旧プロセスの仕組み: Rearで復旧インストーラを生成する方法の変更やRear復旧インストーラによる実行タスクとの適合を可能にするには、Bashスクリプトの編集が必要です。
Rearを設定するには、/etc/rear/local.conf
設定ファイルに目的のオプションを追加します(これまで使用されてきた設定ファイル/etc/rear/sites.conf
は、パッケージから削除されました。なお、このファイルを前回のセットアップから引き継いでいる場合、Rearでは引き続きこのファイルが使用されます)。
すべてのRear設定変数とそのデフォルト値は、/usr/share/rear/conf/default.conf
に設定されています。/etc/rear/local.conf
などで設定されているユーザ設定に合わせたサンプルファイルのいくつか(*example.conf
)は、examples
サブディレクトリ下にあります。詳細については、Rearのマニュアルで該当のページを参照してください。
適合するサンプル設定ファイルをまずはテンプレートとして使用し、必要に応じて修正することで、個別の設定ファイルを作成します。いくつかのサンプル設定ファイルからさまざまなオプションをコピーし、システムに適合した特定の/etc/rear/local.conf
ファイルにそれらをペーストします。特定の構成向けに利用できる変数の概要などが含まれるため、元のサンプル設定ファイルをそのまま使用しないでください。
Rear設定ファイルを変更した場合は、次のコマンドを実行して、その出力を確認します。
rear dump
Rearはさまざまなシナリオで使用できます。以下の例では、ファイルのバックアップを収めるストレージとしてNFSサーバを使用しています。
『SUSE Linux Enterprise Server 12 SP5管理ガイド』(https://documentation.suse.com/sles-12/html/SLES-all/cha-nfs.html)の説明に従って、YaSTでNFSサーバを設定します。
目的のNFSサーバの設定を/etc/exports
ファイルで定義します。NFSサーバ上でバックアップデータの保存先とするディレクトリに、適切なマウントオプションが設定されていることを確認します。次に例を示します。
/srv/nfs *([...],rw,no_root_squash,[...])
/srv/nfs
をNFSサーバ上のバックアップデータへのパスに置き換えて、マウントオプションを調整します。バックアップデータにアクセスするには、no_root_squash
の指定が必要になることが普通です。これは、rear mkbackup
コマンドがroot
として実行されるためです。
さまざまな BACKUP
パラメータ(設定ファイル/etc/rear/local.conf
に記述されています)を調整して、該当のNFSサーバ上にRearからファイルのバックアップを保存できるようにします。この例は、インストールしたシステムの/usr/share/rear/conf/examples/SLE12-*-example.conf
にあります。
tar
の代わりにサードパーティのバックアップツールを使用するには、Rear設定ファイルを適切に設定する必要があります。
以下は、EMC NetWorkerを使用する場合の設定例です。この設定スニペットを/etc/rear/local.conf
に追加し、それぞれのセットアップに応じて調整します。
BACKUP=NSR OUTPUT=ISO BACKUP_URL=nfs://host.example.com/path/to/rear/backup OUTPUT_URL=nfs://host.example.com/path/to/rear/backup NSRSERVER=backupserver.example.com RETENTION_TIME="Month"
24.2項の説明に従ってRearを設定した後、Rear復旧インストーラを持つ復旧インストールシステムを作成したうえで、以下のコマンドを使用してファイルのバックアップを作成します。
rear -d -D mkbackup
このコマンドでは以下の手順が実行されます。
ターゲットシステムを分析し、ディスクのレイアウト(パーティション、ファイルシステム、マウントポイント)やブートローダに関する情報を中心として必要な情報を収集する。
最初の手順で収集した情報を使用して、ブート可能な復旧システムを作成する。ここで得られるRear復旧インストーラは、障害から保護する個々のシステム専用のインストーラです。このインストーラは、この固有のシステムを再作成する目的でのみ使用できます。
設定済みのバックアップツールを呼び出し、システムとユーザファイルをバックアップする。
復旧システムを作成した後、運用マシンと同一のハードウェアを備えたテストマシンで復旧プロセスをテストします。24.1.4項 「Rearの要件」も参照してください。テストマシンの設定が適切で、メインマシンの代わりとして機能できることを確認します。
マシン上で障害復旧プロセスを十分にテストする必要があります。復旧手順を定期的にテストし、すべてが想定どおりに機能することを確認します。
障害が発生した場合には、必要に応じて損傷したハードウェアを取り替えます。次に、手順 24.1の説明に従って、修復したマシンまたは元のシステムの代替として機能することをテスト済みの同一構成のマシンを使用して手順を進めます。
rear recover
コマンドでは以下の手順が実行されます。
ディスクのレイアウト(パーティション、ファイルシステム、およびマウントポイント)を復元する。
バックアップからシステムとユーザファイルを復元する。
ブートローダを復元する。
rear
マニュアルページ
/usr/share/doc/packages/rear/README
時として理解しにくい奇妙な問題が発生することがあります。High Availabilityでの実験を開始したときには、特にそうです。それでも、High Availabilityの内部プロセスを詳しく調べるために使用できる、いくつかのユーティリティがあります。この章では、さまざまなソリューションを推奨します。
このガイドでは、クラスタノードと名前、クラスタリソース、および制約に次の命名規則を使用します。
High Availability Extensionには、クラスタをコマンドラインから管理する際に役立つ、包括的なツールセットが付属しています。この章では、CIBおよびクラスタリソースでのクラスタ構成を管理するために必要なツールを紹介します。リソースエージェントを管理する他のコマンドラインツールや、セットアップのデバッグ(およびトラブルシューティング)に使用するツールについては、付録A トラブルシューティングで説明されています。
root
アクセスなしでのクラスタレポートの実行
すべてのクラスタノードはSSHによって互いにアクセスできる必要があります。crm report
(トラブルシューティング用)などのツールおよびHawk2の は、ノード間でパスワード不要のSSHアクセスを必要とします。それがない場合、現在のノードからしかデータを収集できません。
パッケージのインストールやクラスタのオンライン化では、次のように問題をトラブルシュートします。
クラスタの構成を管理に必要なパッケージは、High Availability Extensionで使用できるHigh Availability
インストールパターンに付属しています。
High Availability Extensionが各クラスタノードにSUSE Linux Enterprise Server 12 SP5の拡張としてインストールされているか、 パターンが『インストールおよびセットアップクイックスタート』で説明するように各マシンにインストールされているか、確認します。
相互に通信するため、第4章 「YaSTクラスタモジュールの使用」で説明するように、同じクラスタに属するすべてのノードは同じbindnetaddr
、mcastaddr
、mcastport
を使用する必要があります。
/etc/corosync/corosync.conf
で設定されている通信チャネルとオプションがすべてのクラスタノードに関して同一かどうか確認します。
暗号化通信を使用する場合は、/etc/corosync/authkey
ファイルがすべてのクラスタノードで使用可能かどうかを確認します。
すべてのcorosync.conf
設定(nodeid
以外)が同一で、すべてのノードのauthkey
ファイルが同一でなければなりません。
mcastport
による通信が許可されているかクラスタノード間の通信に使用されるmcastportがファイアウォールでブロックされている場合、ノードは相互に認識できません。第4章 「YaSTクラスタモジュールの使用」と『インストールおよびセットアップクイックスタート』で説明されているように、YaSTまたはブートストラップスクリプトで初期セットアップを設定しているときに、ファイアウォール設定は通常、自動的に調整されます。
mcastportがファイアウォールでブロックされないようにするには、各ノードの/etc/sysconfig/SuSEfirewall2
の設定を確認します。または、各クラスタノードのYaSTファイアウォールモジュールを起動します。 › をクリックして、mcastportを許可された のリストに追加し、変更を確定します。
通常、Pacemakerを開始すると、Corosyncサービスも開始します。両方のサービスが実行されているかどうかを確認するには、次のコマンドを実行します。
root #
systemctl
status pacemaker corosync
両方のサービスが実行されていない場合は、次のコマンドを実行して開始します。
root #
systemctl
start pacemaker
Pacemakerログファイルの場合は、/etc/corosync/corosync.conf
のlogging
セクションで指定されている設定を参照してください。ここで指定したログファイルをPaceacemakerで無視する場合は、Pacemaker独自の設定ファイル/etc/sysconfig/pacemaker
のログ記録設定を確認してください。PCMK_logfile
がそこで設定されている場合、Pacemakerはこのパラメータで定義したパスを使用します。
すべての関連ログファイルを表示するクラスタ全体のレポートが必要な場合は、詳細についてすべてのクラスタノードの分析を含むレポートを作成するにはどうしたらよいですか。を参照してください。
lrmd
デーモンは、エラーが発生しない限り、複数の監視操作はログに記録しません。複数の監視操作をすべてログ記録すると、多量のノイズが発生してしまいます。そのため、複数の監視操作は、1時間に1度だけ記録されます。
failed
メッセージだけが出ました。詳細情報を取得できますか。
コマンドに--verbose
パラメータを追加してください。これを複数回行うと、デバッグ出力が非常に詳細になります。役立つヒントについては、ログ記録データ(sudo journalctl -n
)を参照してください。
crm_mon
コマンドを使用してください。次のコマンドは、リソース操作履歴(-o
オプション)と非アクティブなリソース(-r
)を表示します。
root #
crm_mon
-o -r
表示内容は、ステータスが変わると、更新されます(これをキャンセルするには、Ctrl– C を押します)。次に例を示します
Last updated: Fri Aug 15 10:42:08 2014 Last change: Fri Aug 15 10:32:19 2014 Stack: corosync Current DC: bob (175704619) - partition with quorum Version: 1.1.12-ad083a8 2 Nodes configured 3 Resources configured Online: [ alice bob ] Full list of resources: my_ipaddress (ocf:heartbeat:Dummy): Started bob my_filesystem (ocf:heartbeat:Dummy): Stopped my_webserver (ocf:heartbeat:Dummy): Stopped Operations: * Node bob: my_ipaddress: migration-threshold=3 + (14) start: rc=0 (ok) + (15) monitor: interval=10000ms rc=0 (ok) * Node alice:
『 Explained (Pacemaker )』PDF (http://www.clusterlabs.org/doc/から入手可能)では、「How are OCF Return Codes Interpreted?」セクションで3つの異なる復元タイプを説明しています。
クラスタで発生している現象をより詳しく表示するには、次のコマンドを使用します。
root #
crm
history log [NODE]
NODEは、調べたいノードに置き換えるか、空のままにします。詳細については、A.5項 「履歴」を参照してください。
次のコマンドを使用してください。
root #
crm
resource list crm resource cleanup rscid [node]
ノードを指定しないと、すべてのノードでリソースがクリーンアップされます。詳細については、8.5.3項 「リソースのクリーンアップ」を参照してください。
コマンドcrm_resource list
を使用して、現在のリソースの情報を表示できます。
OCFスクリプトを確認するには、たとえば、次のocf-tester
コマンドを使用します。
ocf-tester -n ip1 -o ip=YOUR_IP_ADDRESS \ /usr/lib/ocf/resource.d/heartbeat/IPaddr
パラメータを増やすには、-o
を複数回使用します。必須パラメータとオプションパラメータのリストは、crm
ra
info
AGENTの実行によって取得できます。たとえば、次のようにします。
root #
crm
ra info ocf:heartbeat:IPaddr
ocf-testerを実行する場合は、その前に、リソースがクラスタで管理されていないことを確認してく ださい。
終端ノードはunclean(アンクリーン)と考えられる場合があります。その場合には、それをフェンシングする必要があります。STONITHリソースが動作していない、または存在しない場合、残りのノードはフェンシングが実行されるのを待機することになります。フェンシングのタイムアウトは通常長いので、問題の兆候がはっきりと現れるまでには(仮に現れたとしても)、かなり長い時間がかかることがあります。
さらに別の可能性としては、単にこのノードでのリソースの実行が許可されていないという場合があります。このことは、過去にエラーが発生し、それが正しく「解決」されていないために生じることがあります。または、以前に行った管理上の操作が原因である場合もあります。つまり、負のスコアを持つ場所の制約のためです。そのような場所の制約は、たとえば、crm resource migrate
コマンドによって挿入されることがあります。
リソースに対して場所の制約が設定されていない場合、その配置は、(ほとんど)ランダムなノード選択によって決まります。どのノードでリソースを実行することが望ましいか、常に明示的に指定することをお勧めします。このことは、すべてのリソースに対して、場所の初期設定を行う必要があるという意味ではありません。関連する(コロケーション)リソースのセットに対して優先指定を設定すれば十分です。ノードの優先指定は次のようになります。
location rsc-prefers-alice rsc 100: alice
開始(または有効化)操作には、デバイスのステータスのチェックが含まれます。デバイスの準備ができていない場合、STONITHリソースの開始は失敗します。
同時に、STONITHプラグインは、ホストリストを生成するように要求されます。リストが空の場合、STONITHリソースが対象にできるものがないことになるので、いずれにせよシューティングは行われません。STONITHが動作しているホストの名前は、リストから除外されます。ノードが自分自身をシューティングすることはできないからです。
停電デバイスのような、シングルホスト管理デバイスを使用する場合、フェンシングの対象とするデバイスではSTONITHリソースの動作を許可しないようにしてください。-INFINITYの、ノードの場所優先設定(制約)を使用してください。クラスタは、STONITHリソースを、起動できる別の場所に移動します。その際にはそのことが通知されます。
それぞれのSTONITHリソースは、ホストリストを持つ必要があります。このリストは、手動でSTONITHリソースの設定に挿入される場合、またはデバイス自体から取得される場合があります(たとえば出力名から)。この点は、STONITHプラグインの性質に応じて決まります。stonithd
は、このリストを基に、どのSTONITHリソースがターゲットノードのフェンシングを行えるかを判断します。ノードがリストに含まれている場合に限って、STONITHリソースはノードのシューティング(フェンシング)を行えます。
stonithd
は、動作しているSTONITHリソースから提供されたホストリスト内にノードを見つけられなかった場合、他のノードのstonithd
インスタンスに問い合わせます。他のstonithd
インスタンスのホストリストにもターゲットノードが含まれていなかった場合、フェンシング要求は、開始ノードでタイムアウトのために終了します。
ブロードキャストトラフィックが多すぎると、電源管理デバイスが機能しなくなることがあります。監視操作を少なくして、余裕を持たせてください。フェンシングが一時的にのみ必要な場合(必要が生じないのが最善ですが)、デバイスのステータスは数時間に1回チェックすれば十分です。
また、この種のデバイスの中には、同時に複数の相手と通信するのを拒否するものもあります。このことは、ユーザが端末またはブラウザセッションを開いたままにしていて、クラスタがステータスのテストを行おうとした場合には、問題となり得ます。
history
コマンド、およびそのサブコマンドresource
を使用します。
root #
crm
history resource NAME1
これにより、指定したリソースのみの完全な遷移ログが得られます。ただし、複数のリソースを調査することも可能です。その場合、最初のリソース名の後に目的のリソース名を追加します。
一定の命名規則(を参照してください)に従っていれば、resource
コマンドでリソースのグループを調査するのが容易になります。たとえば、次のコマンドは、db
で始まるすべてのプリミティブを調査します。
root #
crm
history resource db*
/var/cache/crm/history/live/alice/ha-log.txt
のログファイルを表示します。
history
コマンドには、次の2つのオプションがあります。
exclude
を使用する
timeframe
を使用する
exclude
コマンドを使用すると、追加の正規表現を設定して、ログから特定のパターンを除外できます。たとえば、次のコマンドは、SSH、systemd、およびカーネルのメッセージをすべて除外します。
root #
crm
history exclude ssh|systemd|kernel.
timeframe
コマンドを使用して、出力を特定の範囲に制限します。たとえば、次のコマンドは、8月23日12:00~12:30のイベントをすべて表示します。
root #
crm
history timeframe "Aug 23 12:00" "Aug 23 12:30"
詳しい調査を要するバグまたはイベントが発生した場合、現在のすべての設定を保存しておくと役に立ちます。このファイルをサポートに送信したり、bzless
で表示したりできます。次に例を示します。
crm(live)history#
timeframe
"Oct 13 15:00" "Oct 13 16:00"crm(live)history#
session
save tux-testcrm(live)history#
session
pack Report saved in '/root/tux-test.tar.bz2'
Hawk2の最初の起動で自己署名証明書に関する警告が発行されるのを避けるには、自動生成された証明書を、独自の証明書または公式認証局(CA)によって署名された証明書で置き換えてください。
/etc/hawk/hawk.key
を秘密鍵で置き換えます。
/etc/hawk/hawk.pem
をHawk2が提供する証明書で置き換えます。
root:haclient
にファイルの所有権を変更して、そのファイルがグループにアクセスできるようにします。
chown root:haclient /etc/hawk/hawk.key /etc/hawk/hawk.pem chmod 640 /etc/hawk/hawk.key /etc/hawk/hawk.pem
この作業を実行するには、pssh
コマンドを使用します。必要であれば、pssh
をインストールしてください。ファイル(たとえばhosts.txt
)を作成し、その中に操作する必要のあるノードのIPアドレスまたはホスト名を含めます。ssh
を使用してhosts.txt
ファイルに含まれている各ホストにログインしていることを確認します。準備ができたら、pssh
を実行します。hosts.txt
ファイルを(オプション-h
で)指定し、対話モードを使用してください(オプション-i
)。次のようになります。
pssh -i -h hosts.txt "ls -l /corosync/*.conf" [1] 08:28:32 [SUCCESS] root@venus.example.com -rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf [2] 08:28:32 [SUCCESS] root@192.168.2.102 -rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
クラスタの現在のステータスを確認するには、crm_mon
かcrm
status
のどちらかを使用します。これによって、現在のDCと、現在のノードに認識されているすべてのノードとリソースが表示されます。
これにはいくつかの理由が考えられます。
まず設定ファイル/etc/corosync/corosync.conf
を調べます。マルチキャストまたはユニキャストアドレスがクラスタ内のすべてのノードで同一かどうか確認します(キーmcastaddr
を含むinterface
セクションを調べてください)。
ファイアウォール設定を確認します。
スイッチがマルチキャストまたはユニキャストアドレスをサポートしているか確認します。
ノード間の接続が切断されていないかどうか確認します。その原因の大半は、ファイアウォールの設定が正しくないことです。また、これはスプリットブレインの理由にもなり、クラスタがパーティション化されます。
ログメッセージ(sudo journalctl -n
)に次の行があるか確認してください。
Jan 12 09:58:55 alice lrmd: [3487]: info: RA output: [...] ERROR: Could not load ocfs2_stackglue Jan 12 16:04:22 alice modprobe: FATAL: Module ocfs2_stackglue not found.
この場合、カーネルモジュールocfs2_stackglue.ko
がありません。インストールしたカーネルに応じて、パッケージocfs2-kmp-default
、ocfs2-kmp-pae
、またはocfs2-kmp-xen
をインストールします。
crmシェルで、crm report
を使用してレポートを作成します。このツールは以下を収集します。
クラスタ全体のログファイル
パッケージ状態
DLM/OCFS2状態
システム情報
CIB履歴
コアダンプレポートの解析(debuginfoパッケージがインストールされている場合)
通常は、次のコマンドでcrm report
を実行します。
root #
crm report
-f 0:00 -n alice -n bob
このコマンドは、ホストaliceおよびbob上の午前0時以降のすべての情報を抽出し、現在のディレクトリにcrm_report-
DATE.tar.bz2という名前の*.tar.bz2
アーカイブを作成します(例: crm_report-Wed-03-Mar-2012
)。特定のタイムフレームのみを対象とする場合は、-t
オプションを使用して終了時間を追加します。
crm report
ツールは、CIBと入力ファイルから機密の情報を削除しようと試みますが、完全に削除できるわけではありません。他にも機密の情報が含まれている場合には、付加的なパターンを指定してください。ログファイルとcrm_mon
、ccm_tool
、およびcrm_verify
の出力は、フィルタされません。
データをいずれの方法でも共有する前に、アーカイブをチェックして、公表したくない情報があればすべて削除してください。
さらに追加のオプションを使用して、コマンドの実行をカスタマイズします。たとえば、Pacemakerクラスタがある場合は、確実にオプション-A
を追加する必要があるでしょう。別のユーザがクラスタに対するパーミッションを持っている場合は、(root
およびhacluster
に加えて)-u
オプションを使用してこのユーザを指定します。非標準のSSHポートを使用する場合は、-X
オプションを使用して、ポートを追加します(たとえば、ポート3479では、-X "-p 3479"
を使用)。その他のオプションは、crm report
のマニュアルページに記載されています。
crm report
で、関連するすべてのログファイルを分析し、ディレクトリ(またはアーカイブ)を作成したら、ERROR
という文字列(大文字)があるかどうかログファイルをチェックします。レポートの最上位ディレクトリにある最も重要なファイルは次のとおりです。
analysis.txt
すべてのノードで同一である必要があるファイルを比較します。
corosync.txt
Corosync設定ファイルのコピーを格納します。
crm_mon.txt
crm_mon
コマンドの出力を格納します。
description.txt
ノード上のすべてのクラスタパッケージのバージョンを格納します。ノード固有のsysinfo.txt
ファイルもあります。これは最上位ディレクトリにリンクしています。
このファイルは、発生した問題を説明してhttps://github.com/ClusterLabs/crmsh/issuesに送信するためのテンプレートとして使用できます。
members.txt
すべてのノードのリストです。
sysinfo.txt
関連するすべてのパッケージ名とそのバージョンのリストが記述されています。さらに、元のRPMパッケージとは異なる設定ファイルのリストもあります。
ノード固有のファイルは、ノードの名前を持つサブディレクトリに保存されます。ここには、それぞれのノードのディレクトリ/etc
のコピーが保存されます。
クラスタリソースの設定、およびHigh Availabilityクラスタの管理とカスタマイズなど、Linuxの高可用性に関するその他の情報については、http://clusterlabs.org/wiki/Documentationを参照してください。
このガイドでは、クラスタノードと名前、クラスタリソース、および制約に次の命名規則を使用します。
クラスタノードは名を使用します:
alice、bob、charlie、doro、およびeris
クラスタサイトには、都市の名前が付けられます:
アムステルダム、ベルリン、キャンベラ、福岡、ギザ、ハノイ、およびイスタンブール
プリミティブ |
プレフィックスなし |
グループ |
プレフィックス |
クローン |
プレフィックス |
マルチステートリソース |
プレフィックス |
順序の制約 |
プレフィックス |
場所の制約 |
プレフィックス |
コロケーション制約 |
プレフィックス |
High Availability Extensionには、クラスタをコマンドラインから管理する際に役立つ、包括的なツールセットが付属しています。この章では、CIBおよびクラスタリソースでのクラスタ構成を管理するために必要なツールを紹介します。リソースエージェントを管理する他のコマンドラインツールや、セットアップのデバッグ(およびトラブルシューティング)に使用するツールについては、付録A トラブルシューティングで説明されています。
これは、エキスパート専用のツールです。通常、crmシェル(crmsh)を使用したクラスタ管理が推奨されている方法です。
次のリストは、クラスタ管理に関連するいくつかの作業を示しており、これらの作業を実行するために使用するツールを簡単に説明しています。
crm_mon
コマンドでは、クラスタのステータスと設定を監視できます。出力には、ノード数、uname、uuid、ステータス、クラスタで設定されたリソース、それぞれの現在のステータスが含まれます。crm_mon
の出力は、コンソールに表示したり、HTMLファイルに出力したりできます。statusセクションのないクラスタ設定ファイルが指定された場合、crm_mon
はファイルに指定されたノードとリソースの概要を作成します。このツールの使用法およびコマンド構文に関する詳細については、crm_mon
マニュアルページを参照してください。
cibadmin
コマンドは、CIBを操作するための低レベル管理コマンドです。CIBのすべてまたは一部のダンプ、CIBのすべてまたは一部の更新、すべてまたは一部の変更、CIB全体の削除、その他のCIB管理操作に使用できます。このツールの使用法およびコマンド構文に関する詳細については、cibadmin
マニュアルページを参照してください。
crm_diff
コマンドは、XMLパッチの作成と適用をサポートします。クラスタの環境設定の2つのバージョンの違いを視覚的に確認する場合や、変更を保存しておき、後でcibadmin
を使用して適用する場合には便利です。このツールの使用法およびコマンド構文に関する詳細については、crm_diff
マニュアルページを参照してください。
crm_attribute
コマンドで、CIBで使用されているノード属性およびクラスタ設定オプションを問い合わせて操作できます。このツールの使用法およびコマンド構文に関する詳細については、crm_attribute
マニュアルページを参照してください。
crm_verify
コマンドは、設定データベース(CIB)の整合性およびその他の問題を確認します。設定を含むファイルを確認したり、実行中のクラスタに接続したりできます。2種類の問題を報告します。エラーを解決しないと High Availability Extensionが正常に機能できず、警告の解決は管理者が担当します。cm_verify
は新規または変更された設定の作成を支援します。実行中のクラスタのCIBのローカルコピーを作成し、編集し、crm_verify
を使用して検証し、新規設定をcibadmin
を使用して適用できます。このツールの使用法およびコマンド構文に関する詳細については、crm_verify
マニュアルページを参照してください。
crm_resource
コマンドは、クラスタ上でリソース関連のさまざまなアクションを実行します。設定されたリソースの定義の変更、リソースの始動と停止、リソースの削除およびノード間でのマイグレートを実行できます。このツールの使用法およびコマンド構文に関する詳細については、crm_resource
マニュアルページを参照してください。
crm_failcount
コマンドは、所定のノードのリソースごとの失敗回数を問い合わせます。このツールは、失敗回数のリセットにも使用でき、リソースが頻繁に失敗したノード上で再度実行できるようにします。このツールの使用法およびコマンド構文に関する詳細については、crm_failcount
マニュアルページを参照してください。
crm_standby
コマンドは、ノードのスタンバイ属性を操作します。スタンバイモードのノードはすべて、リソースをホストすることができず、そのノードにあるリソースは削除する必要があります。スタンバイモードはカーネルの更新などの保守作業を行う場合に便利です。ノードを再びクラスタの完全にアクティブなメンバーにするには、ノードからスタンバイ属性を削除します。このツールの使用法およびコマンド構文に関する詳細については、crm_standby
マニュアルページを参照してください。
root
アクセスなしでのクラスタレポートの実行 #
すべてのクラスタノードはSSHによって互いにアクセスできる必要があります。crm report
(トラブルシューティング用)などのツールおよびHawk2の は、ノード間でパスワード不要のSSHアクセスを必要とします。それがない場合、現在のノードからしかデータを収集できません。
パスワード不要のSSH root
アクセスが規定要件を順守しない場合は、次善策を使用してクラスタレポートを実行できます。これは次の基本手順で構成されます。
専用のローカルユーザアカウント(crm report
実行用)を作成する。
できれば標準以外のSSHポートを使用して、そのユーザアカウントにパスワード不要のSSHアクセスを設定する。
そのユーザにsudo
を設定する。
そのユーザとしてcrm report
を実行する。
デフォルトでは、crm report
を実行すると、まずroot
としてリモートノードへのログインを試行し、続いてユーザhacluster
としてログインを試行します。ただし、ローカルセキュリティポリシーによってSSHを使用したroot
ログインが禁止されている場合、スクリプトの実行はすべてのリモートノードで失敗します。ユーザhacluster
としてスクリプトを実行しようとしても失敗します。これはサービスアカウントであり、そのシェルはログインが禁止されている/bin/false
に設定されているためです。High Availabilityクラスタのすべてのノードでcrm report
スクリプトを正常に実行する唯一のオプションは、専用のローカルユーザを作成することだけです。
次の例では、コマンドラインからhareport
という名前のローカルユーザを作成します。パスワードは、セキュリティ要件を満たしていれば何でも構いません。または、YaSTでユーザアカウントを作成してパスワードを設定することもできます。
シェルを起動し、ホームディレクトリ/home/hareport
を持つユーザhareport
を作成します。
root #
useradd
-m -d /home/hareport -c "HA Report" hareport
ユーザのパスワードを設定します。
root #
passwd hareport
プロンプトが表示されたら、ユーザのパスワードを入力し、確認のために再度入力します。
すべてのノードで同じユーザアカウントを作成するため、各ノードで上の手順を繰り返してください。
デフォルトでは、SSHデーモンおよびSSHクライアントはポート22
で通信およびリスンします。ネットワークセキュリティガイドラインによって、デフォルトのSSHポートを大きい番号の別のポートに変更することが要求されている場合は、デーモンの設定ファイル/etc/ssh/sshd_config
を変更する必要があります。
デフォルトポートを変更するには、ファイルでPort
行を検索してコメント解除し、目的に応じて編集します。たとえば、次のように設定します。
Port 5022
組織においてroot
ユーザが他のサーバにアクセスすることが許可されていない場合、このファイルでPermitRootLogin
エントリを検索してコメント解除し、no
に設定します。
PermitRootLogin no
または、次のコマンドを実行して、各行をファイルの末尾に追加します。
root #
echo “PermitRootLogin no” >> /etc/ssh/sshd_configroot #
echo “Port 5022” >> /etc/ssh/sshd_config
/etc/ssh/sshd_config
を変更したら、SSHデーモンを再起動して新しい設定を有効にします。
root #
systemctl restart sshd
各クラスタノードで、このSSHデーモンの設定を繰り返してください。
クラスタ内のすべてのノードでSSHポートを変更する場合、SSH設定ファイル/etc/ssh/sshd_config
を変更するのが便利です。
デフォルトポートを変更するには、ファイルでPort
行を検索してコメント解除し、目的に応じて編集します。たとえば、次のように設定します。
Port 5022
または、次のコマンドを実行して、各行をファイルの末尾に追加します。
root #
echo “Port 5022” >> /etc/ssh/ssh_config
このSSHクライアントの設定は、クラスタレポートを実行するノードでのみ必要です。
または、-X
オプションを使用してカスタムSSHポートでcrm report
を実行することも、crm report
がデフォルトでカスタムSSHポートを使用するように設定することもできます。詳細については、手順D.5「カスタムSSHポートを使用したクラスタレポートの生成」を参照してください。
パスワードを要求されずに、SSHを使用して他のサーバにアクセスできます。これは一見、安全ではないように見えますが、ユーザは自身の公開鍵が共有されているサーバにしかアクセスできないため、実際は非常に安全なアクセス方法です。共有鍵は、その鍵を使用するユーザとして作成する必要があります。
クラスタレポートの実行用に作成したユーザアカウントでノードの1つにログインします(上の例では、このユーザアカウントはhareport
です)。
新しい鍵を生成します。
hareport >
ssh-keygen –t rsa
このコマンドは、デフォルトで2,048ビットの鍵を生成します。鍵のデフォルトの場所は~/.ssh/
です。鍵にパスフレーズを設定するよう求められます。ただし、パスワードなしでログインする場合は、鍵にパスフレーズがあってはならないため、パスフレーズを入力しないでください。
鍵が生成されたら、公開鍵を他の「それぞれの」ノードにコピーします(鍵を作成したノードを「含む」)。
hareport >
ssh-copy-id -i ~/.ssh/id_rsa.pub HOSTNAME_OR_IP
このコマンドでは、各サーバのDNS名、エイリアス、またはIPアドレスを使用できます。コピー中に、各ノードのホスト鍵を受諾するよう求められるので、hareport
ユーザアカウントのパスワードを入力する必要があります(パスワードを入力する必要があるのは、ここだけです)。
鍵をすべてのクラスタノードと共有したら、パスワード不要のSSHを使用して、ユーザhareport
として他のノードにログインできるかどうかをテストします。
hareport >
ssh HOSTNAME_OR_IP
証明書の受諾やパスワードの入力を要求されることなく、自動的にリモートサーバに接続されます。
毎回同じノードからクラスタレポートを実行する場合は、上の手順は、このノードでのみ実行すれば十分です。そうでない場合は、各ノードでこの手順を繰り返します。
sudo
の設定 #
sudo
コマンドは、通常のユーザを素早くroot
にしてコマンドを発行できるようにします。パスワードの入力は、必要な場合と不要な場合があります。すべてのルートレベルのコマンドにsudoアクセスを付与することも、特定のコマンドにのみ付与することもできます。一般的には、sudoはエイリアスを使用してコマンド文字列全体を定義します。
sudoを設定するには、visudo
(viでは「ありません」)またはYaSTを使用します。
コマンドラインからsudoを設定するには、visudo
を使用して、root
としてsudoersファイルを編集する必要があります。他のエディタを使用すると、構文エラーやファイルパーミッションエラーが発生し、sudoを実行できないことがあります。
root
としてログインします。
/etc/sudoers
ファイルを開くため、「visudo
」と入力します。
カテゴリHost alias specification
、User alias specification
、Cmnd alias specification
、およびRunas alias specification
を探します。
次のエントリを/etc/sudoers
内のそれぞれのカテゴリに追加します。
Host_Alias CLUSTER = alice,bob,charlie 1 User_Alias HA = hareport 2 Cmnd_Alias HA_ALLOWED = /bin/su, /usr/sbin/crm report *3 Runas_Alias R = root 4
ホストエイリアスは、sudoユーザがコマンド発行権利を持つサーバ(またはサーバの範囲)を定義します。ホストエイリアスでは、DNS名またはIPアドレスを使用するか、ネットワーク範囲全体を指定できます(例: | |
ユーザエイリアスでは、複数のローカルユーザアカウントを1つのエイリアスに追加できます。ただし、この場合、使用するアカウントは1つだけであるため、エイリアスの作成を避けることができます。上の例では、クラスタレポート実行用に作成した | |
コマンドエイリアスは、ユーザが実行できるコマンドを定義します。これは、非ルートユーザが | |
runasエイリアスは、コマンドの実行に使用するアカウントを指定します。この場合は、 |
次の2行を検索します。
Defaults targetpw ALL ALL=(ALL) ALL
これらは、作成したい設定と衝突するため、無効にします。
#Defaults targetpw #ALL ALL=(ALL) ALL
User privilege specification
を探します。
上のエイリアスを定義したら、そこに次のルールを追加できます。
HA CLUSTER = (R) NOPASSWD:HA_ALLOWED
NOPASSWORD
オプションは、ユーザhareport
がパスワードを入力せずにクラスタレポートを実行できるようにします。
クラスタ内のすべてのノードでこのsudo設定を行う必要があります。sudoに他の変更は必要なく、再起動が必要なサービスもありません。
上で行った設定でクラスタレポートを実行するには、ノードの1つにユーザhareport
としてログインする必要があります。クラスタレポートを起動するには、crm report
コマンドを使用します。次に例を示します。
root #
crm report
-f 0:00 -n "alice bob charlie"
このコマンドは、指定したノード上の午前0時
以降の情報をすべて抽出し、現在のディレクトリにpcmk-DATE.tar.bz2
という名前の*.tar.bz2
アーカイブを作成します。
カスタムSSHポートを使用する場合、crm report
で-X
を使用して、クライアントのSSHポートを変更します。たとえば、カスタムSSHポートが5022
の場合、次のコマンドを使用します。
root #
crm report -X "-p 5022" [...]
crm report
のカスタムSSHポートを永続的に設定するには、crm対話型シェルを開始します。
crm options
次のように入力します。
crm(live)options#
set core.report_tool_options "-X -oPort=5022"
AutoYaSTは、ユーザの介入なしで、1つ以上のSUSE Linux Enterpriseシステムを自動的にインストールするためのシステムです。
Corosyncエグゼクティブのバインド先のネットワークアドレス。
Geoクラスタ内のそれぞれの参加クラスタおよびアービトレータが、サービスであるboothd
を実行します。これは、別のサイトで実行しているブースデーモンに接続し、接続性の詳細を交換します。
CCMは、どのノードがクラスタを設定するか決定し、この情報をクラスタで共有します。ノードまたはクォーラムの新規追加および損失は、CCMによって通知されます。CCMモジュールはクラスタの各ノード上で実行されます。
クラスタの設定とステータス(クラスタオプション、ノード、リソース、制約、相互の関係性)の全体的な表現。XMLで作成され、メモリに常駐します。マスタCIBは、DC (指定コーディネータ)で保持および保守され、他のノードに複製されます。CIBに対する通常の読み書き操作は、マスタCIBによってシリアルに処理されます。
カーネル内の接続トラッキングシステムとやり取りできるようにして、iptablesでのステートフルなパケット検査を可能にします。High Availability Extensionによって、クラスタノード間の接続ステータスを同期化するために使用されます。
すべての非ローカルインタラクションの調整に責任を負う主要管理エンティティ。High Availability Extensionでは、PacemakerをCRMとして使用します。 クラスタの各ノードにはノード独自のCRMインスタンスがありますが、DC上で実行されるCRMインスタンスは、決定を他の非ローカルCRMに中継し、それらからの入力を処理するために選択されたものです。CRMは、いくつかのコンポーネント(CRM自身のノードとその他のノード両方のローカルリソースマネージャ、非ローカルCRM、管理コマンド、フェンシング機能、メンバーシップ層、およびブース)と対話します。
CRMは、crmdというデーモンとして実装されます。 crmdは各クラスタノード上にインスタンスを持ちます。マスタとして動作するcrmdインスタンスを1つ選択することにより、クラスタのすべての意思決定が一元化されます。選択したcrmdプロセス(またはそのプロセスが実行されているノード)で障害が発生したら、新しいcrmdプロセスが確立されます。
コマンドラインユーティリティcrmshは、クラスタ、ノード、およびリソースを管理します。
詳細については、第8章 「クラスタリソースの設定と管理(コマンドライン)」を参照してください。
クラスタ内のすべてのノード、およびGeoクラスタ全体に設定ファイルを複製するために使用できる同期ツールです。
クラスタ内のCRMは、指定コーディネータ(DC)として選択されます。DCは、ノードのフェンシングやリソースの移動など、クラスタ全体におよぶ変更が必要かどうかを判断できる、クラスタ内で唯一のエンティティです。DCは、CIBのマスターコピーが保持されるノードでもあります。その他すべてのノードは、現在のDCから設定とリソース割り当て情報を取得します。DCは、メンバーシップの変更後、クラスタ内のすべてのノードから選抜されます。
DLMは、クラスタファイルシステムのディスクアクセスを調整し、ファイルロッキングを管理して、パフォーマンスと可用性を向上します。
DRBD®は、高可用性クラスタを構築するためのブロックデバイスです。ブロックデバイス全体が専用ネットワーク経由でミラーリングされ、ネットワークRAID-1として認識されます。
それぞれにローカルクラスタを持つ、複数の地理的に離れたサイトで構成されます。サイトはIPによって交信します。サイト全体のフェールオーバーはより高いレベルのエンティティ(ブース)によって調整されます。Geoクラスタは限られたネットワーク帯域幅および高レイテンシに対応する必要があります。ストレージは同期的にレプリケートされます。
詳細については、Geoクラスタを参照してください。
リソースに対する操作の実行を担当します。リソースエージェントスクリプトを使用してこれらの操作を実行します。LRMはポリシーを認識していないという点で、「ダム」です。何をすべきか認識させるにはDCが必要です。
Corosyncエグゼクティブによるマルチキャストに使用されるIPアドレス。このIPアドレスはIPv4またはIPv6のいずれかに設定できます。
クラスタ通信に使用されるポート。
ネットワーク内で一対多数の通信に使用される技術で、クラスタ通信に使用できます。Corosyncはマルチキャストとユニキャストの両方をサポートしています。
ポリシーエンジンはCIBでのポリシー変更を実装するために必要な処理を計算します。PEは(リソース)アクションのリストと、次のクラスタ状態に移るために必要な依存性を含む遷移グラフも作成します。PEは常にDC上で実行されます。
プロキシとして機能してリソースを管理する(リソースの開始、停止、監視などを行う)スクリプト。High Availability Extensionは、OCF (Open Cluster Framework)、LSB (Linux Standard Base initスクリプト)、およびHeartbeatという3種類のリソースエージェントをサポートしています。詳細については、6.3.2項 「サポートされるリソースエージェントクラス」を参照してください。
障害復旧イメージを作成するための管理ツールセット。
ネットワーク障害の一部または全体に対する災害耐性のために、複数の冗長ローカルエリアネットワークが使用できるようになります。この方法では、ひとつのネットワークが作動中である限り、クラスタ通信を維持できます。Corosyncはトーテム冗長リングプロトコルをサポートします。
共有ブロックストレージ(SAN、iSCSI、FCoEなど)を介したメッセージの交換を通じて、ノードフェンシングメカニズムを提供します。ディスクレスモードでも使用できます。動作異常のノードが本当に停止したかどうかを確認するために、各ノードではハードウェアまたはソフトウェアのウォッチドッグが必要です。
SFEXはSANにおけるストレージ保護機能を提供します。
失敗するとクラスタ全体の障害をトリガしてしまう、クラスタのコンポーネント。
「Shoot the other node in the head」の略です。動作異常のノードをシャットダウンすることでクラスタに問題を発生させないようにするフェンシングメカニズムを指しています。
サービスがノード上で実行される方法の概念。アクティブ/パッシブシナリオでは、1つ以上のサービスがアクティブノード上で実行され、パッシブノードはアクティブノードの失敗を待機します。アクティブ/アクティブでは、各ノードがアクティブであると同時にパッシブです。たとえば、一部のサービスは実行されていますが、それ以外のサービスは他のノードから引き継ぐことができます。DRBDのプライマリ/セカンダリとデュアルプライマリに類似しています。
Geoクラスタ内の追加インスタンスで、サイト間にまたがるリソースのフェールオーバーなどの決定に関する合意の形成を手助けします。アービトレータは専用モードで1つまたは複数のブースインスタンスを実行する単一のマシンです。
クラスタでは、クラスタパーティションは、ノード(投票)の過半数を保有する場合、クォーラムを持つ(「定足数に達している」)と定義されます。クォーラムはただ1つのパーティションで識別されます。複数の切断されたパーティションまたはノードが処理を続行してデータおよびサービスが破損されないようにする、アルゴリズムの一部です(スプリットブレイン)。クォーラムはフェンシングの前提条件で、このためクォーラムは一意になります。
「ハイパフォーマンス」クラスタは、結果を早く出すためにアプリケーション負荷を共有するコンピュータ(実際または仮想のコンピュータ)のグループです。高可用性クラスタは、サービスの可用性を最大にすることを第一に設計されています。
1つ以上のノードとその他のクラスタ間で通信が失敗した場合は、常にクラスタパーティションが発生します。クラスタのノードはパーティションに分割されますが、アクティブなままです。これらは同じパーティション内のノードのみと通信可能で、切り離されたノードは認識しません。つまり、他のパーティションのノードの損失は確認できないため、スプリットブレインシナリオが作成されます(スプリットブレインも参照)。
クラスタ内の他のノードへの、予定されたオンデマンドのサービス移動。詳細については、フェールオーバーを参照してください。
クラスタノードが(ソフトウェアまたはハードウェア障害によって)互いに認識しない2つ以上のグループに分割される場合のシナリオです。STONITHによって、スプリットブレインがクラスタ全体に悪影響をおよぼさなくなります。「パーティションされたクラスタ」シナリオとも呼ばれます。
スプリットブレインという用語は、DRBDでも使用されますが、2つのノードに異なるデータが含まれることを意味します。
Geoクラスタで使用されるコンポーネント。チケットは指定のクラスタサイトの特定のリソースを実行する権利を付与します。チケットは1度に1つのサイトだけが所有できます。リソースを特定のチケットに依存させることができます。定義されたチケットがサイトで使用できる場合のみそれぞれのリソースが始動します。その逆に、チケットが削除されると、そのチケットに依存するリソースが自動的に停止します。
クラスタのメンバで、ユーザには見えない(実際または仮想の)コンピュータ。
Corosyncの代替機能である、バージョン3のCCM。3つ以上の通信パスはサポートするが、クラスタファイルシステムはサポートしません。
孤立または失敗したクラスタメンバーによる共有リソースへのアクセス防止の概念を示しています。クラスタノードが失敗した場合は、シャットダウンまたはリセットすることで問題の発生を防止します。つまり、ステータスが不明なノードからリソースがロックアウトされます。
リソースまたはノードが1台のマシンで失敗し、影響を受けるリソースが別のノードで起動されたときに発生します。
ノード障害の発生時にクラスタサービスを実行することができる、指定されたクラスタノードのサブセット。
Geoクラスタのサイト間のフェールオーバープロセスを管理するインスタンス。その目的は、1つのサイトのみでマルチサイトリソースをアクティブにすることです。これは、サイトをダウンする必要のある場合、クラスタサイト間のフェールオーバードメインとして処理される、いわゆるチケットを使用することで可能になります。
すべてのサイトがファイバチャネルで接続された、複数の建物またはデータセンターにわたってストレッチできる単一のクラスタ。ネットワークの遅延時間は通常は短くなります(約20マイルの距離で<5ms)。 ストレージは頻繁にレプリケートされます(ミラーリングまたは同期レプリケーション)
ひとつのあて先ネットワークにメッセージを送信する技術Corosyncはマルチキャストとユニキャストの両方をサポートしています。Corosyncでは、ユニキャストはUDP-unicast (UDPU)として実装されます。
Pacemakerに認識されている、任意のタイプのサービスまたはアプリケーション。IPアドレス、ファイルシステム、データベースなどです。
「リソース」という用語は、DRBDでも使用されており、レプリケーション用の一般的な接続を使用しているブロックデバイスのセットの名前を表します。
1つのロケーション内の単一のクラスタ(たとえば、すべてのノードが1つのデータセンターにある)。ネットワークの遅延時間は無視できます。ストレージは通常、すべてのノードに同時にアクセスされます。
クラスタ内の1つのノードだけで実行する必要があるリソースが、複数のノード上で実行されています。
「既存のクラスタ」という用語は、1つ以上のノードで構成されるクラスタを指すものとして使用されます。既存のクラスタは、通信チャネルを定義する基本的なCorosync設定を持ちますが、必ずしもリソース設定を持つとは限りません。
複数のサーバを同じサービスに参加させて、同じ作業を行わせる機能。
自然、人、ハードウェアのエラー、ソフトウェアのバグなどによって引き起こされる重要なインフラストラクチャの想定外の障害
障害復旧は、障害発生後、ビジネス機能を通常どおりの、安定した状態に修復するプロセスです。
ITインフラストラクチャへの影響を最小限に抑えながら障害から復旧する戦略。
This appendix contains the GNU Free Documentation License version 1.2.
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
State on the Title page the name of the publisher of the Modified Version, as the publisher.
Preserve all the copyright notices of the Document.
Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
Include an unaltered copy of this License.
Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.
Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:
with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.