目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SAP HANAシステムレプリケーションのスケールアップ - パフォーマンス最適化シナリオ
SUSE Linux Enterprise Server for SAP Applications 15-SP1

SAP HANAシステムレプリケーションのスケールアップ - パフォーマンス最適化シナリオ

Authors
Fabian Herschel, Distinguished Architect SAP, SUSE
Bernd Schubert, SAP Solution Architect, SUSE
Lars Pinne, System Engineer, SUSE
Image
日にち: 2020-03-19
日にち: March 19, 2020
SUSE® Linux Enterprise Server for SAP Applicationsは、SAP *アプリケーション向けにさまざまな方法で最適化されています。このガイドは、パフォーマンス最適化シナリオにおけるSAP HANAシステムレプリケーションに向けた、SUSE Linux Enterprise Server for SAP Applicationsのインストールとカスタマイズに関する詳細情報を提供します。本ドキュメントは、すでにインストールされて稼働しているSAP HANAをシステムレプリケーションと統合する手順に焦点を当てています。

1 このガイドについて

1.1 はじめに

SUSE® Linux Enterprise Server for SAP Applicationsは、SAP *アプリケーション向けにさまざまな方法で最適化されています。このガイドは、パフォーマンス最適化シナリオにおけるSAP HANAシステムレプリケーションに向けた、SUSE Linux Enterprise Server for SAP Applicationsのインストールとカスタマイズに関する詳細情報を提供します。

Pierre Audoin Consultants(PAC)社が最近実施した市場調査によって得られた結論は、「SAPの顧客はSAP HANAに投資する」と言うことでした。ドイツでは、半数の企業が、SAP HANAはSAP環境において支配的なデータベースプラットフォームになると予想しています。「SAP HANA *を活用したSAP Business Suite *」のシナリオについては、既に具体的な協議が盛んに行われています。

SUSEは、この開発に対してもSUSE Linux Enterprise Server for SAP Applicationsを提供することで対応しています。この製品は、SAP HANAに対して推奨されサポートされているOSです。SUSEは、SAPとハードウェアパートナーとの連携を密にして、SAP HANAシステムレプリケーションの高可用性を確保するための2つのリソースエージェントをお客様に提供しています。

1.1.1 概要

このガイドでは、高可用性ソリューションシナリオ「SAP HANAスケールアップシステムレプリケーションのパフォーマンス最適化」に基づき、SUSE Linux Enterprise Server for SAP Applicationsの計画、設定、基本的なテストについて解説します。

アプリケーションの観点からは、以下のさまざまな構成を網羅しています。

  • 単純なシステムレプリケーション

  • セカンダリサイトの読み取り可能なシステムレプリケーション

  • マルチティア(チェーン)システムレプリケーション

  • マルチターゲットシステムレプリケーション

  • 上記すべてに対するマルチテナントデータベースコンテナ

インフラストラクチャの観点からは、以下の構成をカバーしています。

  • ディスクベースのSBDを搭載した2ノードクラスター

  • ディスクレスSBDを搭載した3ノードクラスター

1.1.2 スケール-アップとスケール-アウト

最初の一連のシナリオには、 スケールアップ ソリューションのアーキテクチャと開発が含まれます。

hana sr in cluster
図 1: クラスター内のSAP HANAシステムレプリケーションのスケールアップ

SUSEは、これらのシナリオに対応するために、スケールアップリソースエージェントパッケージ SAPHanaSRを開発しました。システムレプリケーションは、1台のコンピューターから別のコンピューターにデータベースのデータを複製することで、データベースの障害を回復するのに役立ちます(シングルボックスレプリケーション)。

2番目の一連のシナリオには、スケールアウト ソリューションのアーキテクチャと開発が含まれます(マルチボックスレプリケーション)。SUSEは、これらのシナリオに対応するために、スケールアップリソースエージェントパッケージ SAPHanaSR-ScaleOutを開発しました。

SAPHanaSR ScaleOut Cluster
図 2: クラスター内のSAP HANAシステムレプリケーションのスケールアウト

この運用モードでは、内部のSAP HANA高可用性(HA) メカニズムとリソースエージェントは、互いに連携して協調動作する必要があります。SAP HANAシステムレプリケーションのスケールアウト自動化については、SUSEのドキュメンテーションWebページ https://documentation.suse.com/sbp/all/から入手できるドキュメントに説明されています。スケールアウトに関するドキュメントのタイトルは「SAP HANAシステムレプリケーションのスケールアウト - パフォーマンス最適化シナリオ」です。

1.1.3 スケールアップシナリオとリソースエージェント

SUSEは、SAP HANAデータベースのインスタンスを実際にチェックする SAPHana リソースエージェント(RA)を使用して、スケールアップシナリオを実装しています。このRAはマスター/スレーブリソースとして構成されます。スケールアップシナリオでは、マスターがプライマリモードで実行されているSAP HANAデータベースに対して責任を負います。一方で、スレーブは同期(セカンダリ)ステータスで動作するインスタンスに責任を負います。

クラスターの構成をできるだけシンプルにするために、SUSEは SAPHanaTopology リソースエージェントも開発しました。このRAは、SUSE Linux Enterprise Server for SAP Applicationsクラスターのすべてのノードで実行され、SAP HANAシステムレプリケーションのステータスと構成に関する情報を収集します。これは、標準の(ステートレス)クローンとして設計されています。

スケールアップに対するSAP HANAシステムレプリケーションは、以下のシナリオまたはユースケースでサポートされています。

  • パフォーマンス最適化 (A ⇒ B).このシナリオと設定については、 本ドキュメントで説明しています。

    SAPHanaSR ScaleUP perfOpt
    図 3: クラスター内のSAP HANAシステムレプリケーションのスケールアップ - パフォーマンス最適化

    パフォーマンス最適化シナリオでは、SAP HANA RDBMSサイトAは、2番目のノードのSAP HANA RDBMSサイトBと同期しています。2番目のノードのHANA RDBMSはテーブルをプリロードするように構成されているため、通常テイクオーバー時間は非常に短くて済みます。

    SAP HANAのパフォーマンス最適化シナリオが大きく進化した点のひとつは、セカンダリデータベースサイトで読み取りアクセスが可能になったことです。この読み取り可能な read enabled シナリオをサポートするために、2番目の仮想IPアドレスがクラスターに追加され、システムレプリケーションのセカンダリロールにバインドされます。

  • コスト最適化 (A ⇒ B, Q).このシナリオと設定は、SUSEのドキュメンテーションWebページ (https://documentation.suse.com/sbp/all/)から入手できる別のドキュメントで説明されています。コスト最適化のドキュメントのタイトルは「SAP HANA SRコスト最適化インフラストラクチャの設定」です。

    SAPHanaSR ScaleUP costOpt2
    図 4: クラスター内のSAP HANAシステムレプリケーションのスケールアップ - パフォーマンス最適化

    コスト最適化シナリオでは、2番目のノードも 本稼働環境以外のSAP HANA RDBMSシステム(QASやTSTなど)で使用されます。テイクオーバーが必要な場合は、常に本稼働環境以外のシステムを最初に停止する必要があります。このノードにある本稼働環境のセカンダリシステムは、システムリソースの使用を制限する必要があるため、テーブルのプリロードを必ずオフにしてください。テイクオーバーは、パフォーマンスが最適化されたユースケースよりも長時間になる恐れがあります。

    コスト最適化シナリオでのセカンダリは、メモリ消費量を削減した構成で実行する必要があります。このため、このシナリオでは read enabled を有効にしないでください。

  • マルチティア (A ⇒ B → C) およびマルチターゲット (B ⇐ A ⇒ C).

    SAPHanaSR ScaleUP Chain
    図 5: クラスター内のSAP HANAシステムレプリケーションのスケールアップ - パフォーマンス最適化チェーン

    A マルチティア システムレプリケーションには、追加のターゲットがあります。かつては、この3つ目のノードはセカンダリ(チェーントポロジー)に接続されている必要がありました。現在のSAP HANAバージョンでは、SAPにより マルチターゲットトポロジー も許可され可能としています。

    SAPHanaSR ScaleUP MultiTarget
    図 6: クラスター内のSAP HANAシステムレプリケーションのスケールアップ - パフォーマンス最適化マルチターゲット

    マルチティアおよびマルチターゲットシステムは、本ドキュメントで説明されている方法で実装されます。最初の複製ペア(AとB)だけがクラスター自身によって処理されます。単純なパフォーマンス最適化シナリオとの主な違いは、自動登録をオフに設定する必要があることです。

  • マルチテナンシー またはマルチテナントデータベースコンテナ(MDC)

    マルチテナンシーは、上記のすべてのシナリオとユースケースでサポートされています。このシナリオはSAP HANA SPS09以降でサポートされています。クラスターから見た設定と構成は、マルチテナンシーもシングルコンテナも同様です。したがって、上記のドキュメントは両方のシナリオに適用できます。

1.1.4 パフォーマンス最適化シナリオの概念

ノード1(ノードまたはデータベースインスタンス)のプライマリSAP HANAに障害が発生した場合、クラスターは最初にテイクオーバープロセスを開始しようとします。これにより、既にセカンダリサイトにロードされているデータを使用することができます。通常、このテイクオーバーはローカルでの再起動よりもはるかに高速です。

このリソース処理プロセスを自動化するには、SAPHanaSRに含まれるSAP HANAリソースエージェントを使用する必要があります。本稼働環境のデータベースのシステムレプリケーションは、SAPHanaとSAPHanaTopologyにより自動化されます。

クラスターは、SAP HANAシステムレプリケーションがプライマリサービスの停止時点まで同期していた場合にのみ、セカンダリサイトへのテイクオーバーを許可します。これにより、プライマリサイトで処理された最後のコミットが、確実にセカンダリサイトで利用可能になります。

SAPは、SAP HANAとクラスターフレームワークなどの外部ソフトウェア間のインタフェースを改善しました。この改善には、サービスまたはシステムレプリケーションチャネルのステータス変更など、特別なイベントが発生した場合のSAP HANA呼び出しの実装も含まれています。これらの呼び出しは、HA/DRプロバイダーとも呼ばれます。このインタフェースは、Pythonで記述されたSAP HANAフックを実装することで使用できます。SUSEは、SAPHanaSRパッケージを改善し、クラスターインタフェースを最適化するためのSAP HANAフックを含めました。本ドキュメントで述べたSAP HANAフックを使用すると、SAP HANAシステムレプリケーションが機能停止した場合、即座にクラスターに通知することができます。SAP HANAフックステータスに加えて、クラスターはシステムレプリケーションステータスを定期的にポーリングします。

AUTOMATED_REGISTERパラメータを変更することにより、自動化のレベルを設定できます。自動化された登録が有効な場合、クラスタは新しいセカンダリになる元の障害発生プライマリの登録も自動で行います。

重要
重要

このソリューションは、HAWKまたは他のクラスタークライアントコマンドを使用して、プライマリまたはセカンダリインスタンスを手動で「migrate」するようには設計されていません。管理セクションでは、SAPおよびクラスターコマンドを使用して、プライマリをセカンダリサイトに「migrate」する方法について説明しています。

1.1.5 完全なパッケージを提供

SAPHanaとSAPHanaTopologyリソースエージェントを使用すると、SAP HANAシステムレプリケーションをクラスターに統合することができます。これには、企業がビジネスクリティカルなSAPシステムだけでなく、SAP HANAデータベースも中断することなく使用できるメリットがあり、必要とする予算を大幅に節減できます。SUSEはベストプラクティスのドキュメントとともに拡張ソリューションを提供します。

自社独自のSAP HANA高可用性ソリューションを持っていないSAPパートナーやハードウェアパートナーも、SUSEのこの開発から恩恵を受けることができます。

1.2 その他のドキュメントとリソース

このマニュアルの各章には、システムまたはインターネットから入手可能なその他のドキュメントリソースへのリンクが掲載されています。

最新のドキュメントについては、http://documentation.suse.com/を参照してください。

SUSE Linux Enterprise Server for SAP Applicationsのベストプラクティスが掲載されたWebページ:https://documentation.suse.com/sbp/all/には、多数のホワイトペーパー、ベストプラクティス、設定ガイドなどもあります。

また、SUSEはSAPと高可用性に関するブログ記事も公開しています。ハッシュタグ#TowardsZeroDowntimeを使用して、ぜひご参加ください。次のリンクからアクセスしてください。https://www.suse.com/c/tag/TowardsZeroDowntime/.

1.3 正誤表

小さくとも緊急の修正や重要な情報をタイムリーに提供するために、本設定ガイドに関わる技術情報ドキュメント(TID)は頻繁に更新、保守、公開されます。

他のソリューションについては、本ガイドに加えてSUSE SAPベストプラクティスガイド正誤表をご確認ください (https://www.suse.com/support/kb/doc/?id=7023713).

1.4 フィードバック

複数のフィードバックチャネルが利用可能です。

バグと機能強化のリクエスト

お使いの製品で利用できるサービスとサポートオプションについては、 http://www.suse.com/support/を参照してください。

製品コンポーネントのバグを報告するには、https://scc.suse.com/support/リクエストにアクセスしてログインし、 Submit New SR (Service Request)を選択します。

メール

本製品のドキュメントへのフィードバックについては、doc-team@suse.com宛てにメールを送信してください。ドキュメントのタイトル、製品のバージョン、ドキュメントの発行日を必ず記載してください。エラーを報告したり機能拡張を提案するには、問題の簡潔な説明と共に、該当するセクション番号とページ(またはURL)を記載してください。

2 サポートするシナリオと前提条件

SAPHanaSRリソースエージェントソフトウェアパッケージでは、スケールアップ(シングルボックスからシングルボックスへ)システムレプリケーションを、以下の構成とパラメータに限定してサポートします。

  • 標準は2ノードクラスターです。3番目のノードにもリソースエージェントをインストールする場合は、3ノードクラスターでも構いません。ただし、3番目のノードではSAP HANAリソースを実行しないことをクラスターで定義してください。この場合、3番目のノードは、クラスターを分離する場合に、追加の意思決定者になります。

  • クラスターには、有効なSTONITH手段が含まれている必要があります。

    • SUSE Linux Enterprise 15 High Availability Extension(SDB、IPMIなど)でサポートされているすべてのSTONITHメカニズムがSAPHanaSRでサポートされています。

    • 本ガイドでは、ハードウェアに依存しないことからSBDフェンシングメソッドに焦点を当てています。

    • フェンシングメカニズムとしてディスクベースのSBDを使用する場合は、1台以上の共有ドライブが必要になります。本稼働環境では、SBDデバイスを複数使用することをお勧めします。ディスクベースSBDの詳細については、SUSE Linux Enterprise High Availability Extensionの製品ドキュメントと、本マニュアルのページsbd.8およびstonith_sbd.8を参照してください。

    • ディスクレスSBDの場合は、少なくとも3クラスターノードが必要になります。ディスクレスSBDメカニズムには、フェンシング用の共有ドライブが不要となるメリットがあります。

  • 2つのノードは、同一のネットワークセグメント(レイヤー2)にあります。オーバーレイIPアドレスやロードバランサー機能などは、クラウド環境から提供される同様の機能でも構いません。クラウド独自のガイドに従って、SUSE Linux Enterprise Server for SAP Applicationsクラスターを設定します。

  • <sid>admなどのテクニカルユーザーとグループは、Linuxシステムにローカルで定義されます。

  • クラスターノードと仮想IPアドレスの名前解決は、すべてのクラスターノードでローカルに実行する必要があります。

  • ネットワークタイムプロトコル(NTP) などのクラスターノード間の時刻同期。

  • プライマリとセカンダリのSAP HANAインスタンスのSAP識別子(SID)とインスタンス番号はどちらも同じです。

  • 各クラスターノードが異なるデータセンターやデータセンターエリア内にインストールされている場合、それらの環境は、SUSE Linux Enterprise High Availability Extensionクラスター製品の要件と一致する必要があります。ここで特に懸念されるのは、ネットワーク遅延とノード間の推奨最大距離です。これらの推奨事項については、SUSE Linux Enterprise High Availability Extensionの製品ドキュメントで確認してください。

  • 停止したプライマリに対する、テイクオーバー後の自動登録。

    • プロジェクトを適切に初期構成するために、停止したプライマリの自動登録をオフにすることをお勧めします。AUTOMATED_REGISTER="false"がデフォルトの設定になります。この場合、停止したプライマリは、テイクオーバー後に手動で登録する必要があります。SAP HANAコックピットやhdbnsutil.などのSAPツールを使用してください。

    • 最適な自動化には、 AUTOMATED_REGISTER="true"に設定することをお勧めします。

  • システム起動中のSAP HANAインスタンスの自動起動はオフにする必要があります。

  • マルチテナンシーデータベースコンテナ(MDC)をサポートします。

    • マルチテナンシーデータベースは、他のすべての設定(パフォーマンスベース、コスト最適化、マルチティア)と組み合わせて使用することができます。

    • MDC構成において、SAP HANA RDBMSはすべてのデータベースコンテナを含む単一システムとして扱われます。したがって、クラスターのテイクオーバーの決定は、個々のデータベースコンテナのステータスには関係なく、専らRDBMSのステータスに基づいて行われます。

    • SAP HANA 1.0の場合、本稼働中にテナントを停止し、クラスターが引き継げるようにするためには、バージョンSPS10 rev3、SPS11以降が必要になります。SAP HANAのバージョンがそれより古い場合は、テナントを停止させるとシステムレプリケーションは失敗とマークされます。

    • マルチテナンシーデータベースでのテストは、テナント間の独立性が強いを強力に分離させている場合、別のテスト手順を強いられる可能性があります。例として、 HDB killを使用してSAP HANAインスタンスをすべて停止することはできません。各テナントが異なるLinuxユーザーUIDで実行されているためです。<sidadm>は、他のテナントユーザーのプロセスを終了させることはできません。

少なくともSAPHanaSRバージョン0.153が必要で、SUSE Linux Enterprise Server for SAP Applications 15 SP1以降が最善です。SAP HANA 1.0は、SPS09 (095)以降に定義されているすべての設定でサポートされています。SAP HANA 2.0は、すべての既知のSPSバージョンでサポートされています。

重要
重要

有効なSTONITH手段がない場合は、クラスターのすべてはサポートされないため、正しく動作しません。

別のシナリオを実装する必要がある場合は、SUSEと共にPoC(概念実証)を規定することを強くお勧めします。PoCは、そのシナリオにおける既存ソリューションのテストに焦点を当てます。上記の制限を付けた理由は、慎重にテストする必要があるためです。

SAP HANAの他に、SAPホストエージェントをシステムにインストールする必要があります。

3 本ドキュメントのスコープ

本ドキュメントは、クラスターを設定して、システムレプリケーションシナリオにおいてSAP HANAを制御する方法を説明します。このドキュメントでは、すでにインストールされて稼働しているSAP HANAをシステムレプリケーションと統合する手順に焦点を当てています。

ここで説明している設定例では、Walldorf(WDF)とRot(ROT)にある2つのデータセンターで、2つのSLES for SAP 15 SP1システムにインストールされたSAP HANA HAクラスターを構築します。

hana sr scaleup perfopt
図 7: SAP HANA SRを使用したクラスター - パフォーマンス最適化

クラスターの設定は、YaSTウィザードを使用することも、手動で行うことも、また、所有されている自動化機能を利用することもできます。

YaSTウィザードを使用する場合は、ショートカットyast sap_haからモジュールを起動することができます。YaSTを使用してSAPHanaSRを設定する手順については、SUSE Linux Enterprise Server for SAP Applicationsの製品ドキュメントのセクションSAP HANAクラスターを設定するに記載されており、https://documentation.suse.com/sles-sap/15-SP1/single-html/SLES4SAP-guide/#cha-s4s-clusterから入手できます。

Yast SAP HA
図 8: YaST Module sap_haでのSAP HANAのシナリオ選択

本ガイドは、クラスターの手動による設定に焦点を当てて詳細を説明し、独自の自動化機能を構築できるよう支援します。

設定手順は以下のように主に7段階に分かれています。

SAPHanaSR ScaleOut Plan Phase0

4 インストレーションの計画

SAPHanaSR ScaleOut Plan Phase1

SAP HANAクラスターを正しく設定するには、インストレーションの計画が不可欠です。

事前に用意するものは以下のとおりです。

  • SUSEのソフトウェア: SUSE Linux Enterprise Server for SAP Applicationsのインストールメディア、有効なサブスクリプション、およびアップデートチャネルへのアクセス

  • SAPのソフトウェア: SAP HANAインストールメディア

  • ディスクを含む物理または仮想システム

  • 記載済みのパラメータシート (以下の 4.2項 「パラメータシート」を参照)

4.1 ラボの最小要件と前提条件

注記
注記

ここで説明しているラボの最小要件は、SAPのサイジング情報ではありません。これらのデータは、ここで述べたクラスターをテスト目的でラボに再構築するためにのみ提供されます。たとえテストであっても、そのシナリオによっては要件が増える場合があります。本稼働システムについては、ハードウェアベンダーに問い合わせるか、公式のSAPサイジングツールやサービスをご利用ください。

注記
注記

許容されるストレージ構成とファイルシステムについては、SAP HANA TDIドキュメントを参照してください。

サイトごとに1つのSAPインスタンスが必要 (1 : 1) - マジョリティメーカーなし(2ノードクラスター):

  • 各々32GB RAMを備えた2つのVM、システムに対して50GBのディスク容量

  • 10MBのディスク空き容量を備えたSBD用の共有ディスク1台

  • SAP HANA用に各々96GB容量のデータディスク2台(各サイト1台)

  • テイクオーバー用の1つの追加IPアドレス

  • 読み取り可能な設定用の1つのオプションIPアドレス

  • HAWK管理GUI用の1つのオプションIPアドレス

サイトごとに1つのSAPインスタンスが必要 (1 : 1) - マジョリティメーカー有(3ノードクラスター):

  • 各々32GB RAMを備えた2つのVM、システムに対して50GBのディスク空き容量

  • 2GB RAMを備えた1つのVM、システムに対して50GBのディスク空き容量

  • SAP HANA用に各々96GB容量のデータディスク2台(各サイト1台)

  • テイクオーバー用の1つの追加IPアドレス

  • Read-enabled設定用の1つのオプションIPアドレス

  • HAWK管理GUI用の1つのオプションIPアドレス

4.2 パラメータシート

2つのSAP HANAサイトを編成するクラスターの設定が非常に簡単な場合でも、インストレーションは適切に計画する必要があります。SID、IPアドレスを含め、必要なすべてのパラメータを用意する必要があります。最初にパラメータシートに記入してからインストレーションを開始することをお勧めします。

表 1: 計画用パラメータシート
パラメータロール

ノード1

 

クラスターノード名とIPアドレス

ノード2

 

クラスターノード名とIPアドレス

SID

 

SAPシステム識別子

インスタンス番号

 

SAP HANAデータベースの数。システムレプリケーションでは、インスタンス番号+1もブロックされます。

ネットワークマスク

  

vIPプライマリ

 

プライマリSAP HANAサイトに割り当てられる仮想IPアドレス。

vIPセカンダリ

 

読み取り可能なセカンダリSAP HANAサイトに割り当てられる仮想IPアドレス(オプション)。

ストレージ

 

HDBデータとログファイル用のストレージは「ローカル」に接続されています(ノードごと、非共有)。

SBD

 

STONITHデバイス(2台は本稼働用)

HAWKポート

7630

 

NTPサーバー

 

タイムサーバーのアドレスまたは名前

表 2: NTPサーバー
パラメータロール

ノード1

suse01, 192.168.1.11

クラスターノード名とIPアドレス

ノード2

suse02, 192.168.1.12

クラスターノード名とIPアドレス

SID

HA1

SAPシステム識別子。

インスタンス番号

10

SAP HANAデータベースの数。システムレプリケーションでは、インスタンス番号+1もブロックされます。

ネットワークマスク

255.255.255.0

 

vIPプライマリ

192.168.1.20

 

vIPセカンダリ

192.168.1.21

(オプション)

ストレージ

 

HDBデータとログファイル用のストレージは「ローカル」に接続されています(ノードごと、非共有)。

SBD

/dev/disk/by-id/SBDA

STONITHデバイス(2台は本稼働用)

HAWKポート

7630

 

NTPサーバー

pool pool.ntp.org

タイムサーバーのアドレスまたは名前

5 OSの設定

SAPHanaSR ScaleOut Plan Phase2

このセクションには、OSのインストール中に考慮すべき情報が含まれています。

本ドキュメントのスコープでは、最初にSUSE Linux Enterprise Server for SAP Applicationsをインストールして構成します。次に、システムレプリケーションを含むSAP HANAデータベースを設定します。最後に、クラスターを伴う自動化を設定して構成します。

5.1 SUSE Linux Enterprise Server for SAP Applicationsのインストール

さまざまな理由により、サーバーの設定には各々の方法があり、すでに複数のインストレーションガイドが公開されています。これらのガイドを入手できる場所を以下に示します。さらに、システムを適切に動作させるために検討すべき重要な詳細情報も入手できます。

5.1.1 ベースOSをインストールする

使用するインフラストラクチャとハードウェアに応じて、インストレーションを調整する必要があります。サポートされているすべてのインストレーション方法と最小要件は、導入ガイド (https://documentation.suse.com/sles/15-SP1/html/SLES-all/book-sle-deployment.html)で説明されています。自動インストールの場合は、 AutoYaSTガイド (https://documentation.suse.com/sles/15-SP1/html/SLES-all/book-autoyast.html)で詳細情報を確認できます。SAP HANAのすべての要件に適合するSUSE Linux Enterprise Server for SAP Applicationsの主要インストレーションガイドは、SAPノートから入手できます。

  • 2578899 SUSE LINUX Enterprise Server 15: インストレーションノート、および

  • 2684254 SAP HANA DB: SLES 15 / SLES for SAP Applications 15向けに推奨されるOS設定。

5.1.2 追加ソフトウェアのインストール

SUSEは、SUSE Linux Enterprise Server for SAP Applicationsと共に、SAP HANA用の特別なリソースエージェントを提供します。sap-hanaパターンを使用すると、SAP HANAスケールアップに対するリソースエージェントがインストールされます。スケールアウトのシナリオでは、特別なリソースエージェントが必要になります。SAPノート1984787に基づいてシステムをインストールした場合は、各ノードで以下の指示に従ってください。ハイアベイラビリティ パターンは、 すべての ノードにインストールすることが推奨されるツールを余すことなく要約したものです。これにはマジョリティメーカーも含まれます。

例 1: HAクラスター用の追加ソフトウェアのインストール
  1. すべてのノードのHigh Availability パターン

    suse01:~> zypper in --type pattern ha_sles
  2. すべてのノードに SAPHanaSR リソースエージェントをインストールする

    suse01:~> zypper in SAPHanaSR SAPHanaSR-doc

詳細については、SUSE Linux Enterprise High Availability Extensionのインストレーションと基本設定をご覧ください。

6 両方のクラスターノードへのSAP HANAデータベースのインストール

SAPHanaSR ScaleOut Plan Phase3

本ドキュメントでは、インストール済みのSAP HANAと、すでにPacemakerクラスターに設定されているシステムレプリケーションとの統合に焦点を当てていますが、この章では、テスト環境の概要を説明します。SAP HANAをインストールしたり、システムレプリケーションを設定する際は、必ずSAPの公式ドキュメントを参照してください。

6.1 両方のクラスターノードへのSAP HANAデータベースのインストール

事前準備
  • SAP マーケットプレースから入手したSAPインストレーションおよび設定マニュアルを理解します。

  • SAP マーケットプレースからSAP HANAソフトウェアをダウンロードします。

実行手順
  1. SAP HANAサーバーのインストレーションガイドの説明に従って、SAP HANAデータベースをインストールします。

  2. SAPホストエージェントがすべてのクラスターノードにインストールされていることを確認します。このSAPサービスがインストールされていない場合は、今すぐインストールしてください。

  3. 両方のデータベースが稼働しており、これらのすべてのプロセスが正しく実行されていることを確認します。

Linux<sid>admユーザー として、 HDBコマンドラインツールを使用して、実行中のHANAプロセスの概要を取得します。HDB infoの出力は、以下のように表示されます。

suse02:ha1adm> HDB info
USER          PID     PPID  ... COMMAND
ha1adm      13017    ... -sh
ha1adm      13072    ...  \_ /bin/sh /usr/sap/HA1/HDB10/HDB info
ha1adm      13103    ...      \_ ps fx -U ha1adm -o user:8,pid:8,ppid:8,pcpu:5,vsz:10,rss:10,args
ha1adm       9268    ... hdbrsutil  --start --port 31003 --volume 2 --volumesuffix mnt00001/hdb00002.00003 --identifier 1580897137
ha1adm       8911    ... hdbrsutil  --start --port 31001 --volume 1 --volumesuffix mnt00001/hdb00001 --identifier 1580897100
ha1adm       8729    ... sapstart pf=/hana/shared/HA1/profile/HA1_HDB10_suse02
ha1adm       8738    ...  \_ /usr/sap/HA1/HDB10/suse02/trace/hdb.sapHA1_HDB10 -d -nw -f /usr/sap/HA1/HDB10/suse02/daemon.ini pf=/usr/sap/HA1/SYS/profile/HA1_HDB10_suse02
ha1adm       8756    ...      \_ hdbnameserver
ha1adm       9031    ...      \_ hdbcompileserver
ha1adm       9034    ...      \_ hdbpreprocessor
ha1adm       9081    ...      \_ hdbindexserver -port 31003
ha1adm       9084    ...      \_ hdbxsengine -port 31007
ha1adm       9531    ...      \_ hdbwebdispatcher
ha1adm       8574    ... /usr/sap/HA1/HDB10/exe/sapstartsrv pf=/hana/shared/HA1/profile/HA1_HDB10_suse02 -D -u ha1adm

7 SAP HANAシステムレプリケーションの設定

SAPHanaSR ScaleOut Plan Phase4

詳細については、SAP HANA管理ガイドのシステムレプリケーションの設定セクションをご覧ください。

実行手順

  1. プライマリデータベースをバックアップします。

  2. プライマリデータベースを有効にします。

  3. セカンダリデータベースを登録します。

  4. システムレプリケーションを確認します。

7.1 プライマリデータベースをバックアップする

SAP HANA管理ガイドのSAP HANAデータベースのバックアップとリカバリーセクションの説明に従って、プライマリデータベースをバックアップします。SQLコマンドを使用した例を示します。これらのバックアップコマンドは、バックアップインフラストラクチャに適合させて使用する必要があります。

例 2: 1回のバックアップコールでシステムデータベースとすべてのテナントを簡単にバックアップする

<sidadm>ユーザーとして、次のコマンドを入力します。

hdbsql -u SYSTEM -d SYSTEMDB \
   "BACKUP DATA FOR FULL SYSTEM USING FILE ('backup')"

以下の(または同様の)コマンド出力が表示されます。

0 rows affected (overall time 15.352069 sec; server time 15.347745 sec)
例 3: 単一コンテナ(非MDC)データベースの単純なバックアップ

<sidadm>ユーザーとして、以下のコマンドをとして入力します。

hdbsql -i <instanceNumber> -u <dbuser> \
   "BACKUP DATA USING FILE ('backup')"
重要
重要

有効なバックアップがない場合は、SAP HANAをシステムレプリケーション構成にすることができません。

7.2 プライマリノードを有効にする

Linux の<sid>adm ユーザーとして、プライマリノードでシステムレプリケーションを有効にします。サイト名(例: WDF)を定義する必要があります。このサイト名は、システムレプリケーションを介して接続されているすべてのSAP HANAデータベースで一意にしなければなりません。したがって、セカンダリは異なるサイト名にしてください。

注記
注記

「primary」や「secondary」 などの文字列はサイト名に使用しないでください。

例 4:

-sr_enableオプションを使用してプライマリを有効にします。

suse01:~> hdbnsutil -sr_enable --name=WDF
checking local nameserver:
checking for active nameserver ...
nameserver is running, proceeding ...
configuring ini files ...
successfully enabled system as primary site ...
done.
例 5: プライマリを有効にする

hdbnsutil -sr_stateConfigurationコマンドを使用して、プライマリのSR構成を確認します。

suse01:~> hdbnsutil -sr_stateConfiguration --sapcontrol=1
SAPCONTROL-OK: <begin>
mode=primary
site id=1
site name=WDF
SAPCONTROL-OK: <end>
done.

モードが「none」から「primary」 に変更され、サイトにサイト名とサイトIDが追加されました。

7.3 セカンダリノードを登録する

セカンダリ側のSAP HANAデータベースインスタンスは、システムレプリケーションに登録する前に一旦停止する必要があります。HDBsapcontrolなどのお好みの方法でインスタンスを停止します。データベースインスタンスが正常に停止すれば、hdbnsutilを使用してインスタンスを登録することができます。再び、Linux の<sid>admユーザーを使用します。

例 6: セカンダリを停止する

コマンドラインツールのHDBを使用して、セカンダリを停止することができます。

suse02:~> HDB stop
例 7: CKEYおよびKEY-DATAファイルをプライマリからセカンダリサイトにコピーする

SAP HANA 2.0から、システムレプリケーションは暗号化されています。そのため、鍵ファイルをプライマリサイトからセカンダリサイトにコピーする必要があります。

cd /usr/sap/<SID>/SYS/global/security/rsecssfs
rsync -va {,<node1-siteB>:}$PWD/data/SSFS_<SID>.DAT
rsync -va {,<node1-siteB>:}$PWD/key/SSFS_<SID>.KEY
例 8: セカンダリを登録する

セカンダリの登録は、 hdbnsutil -sr_register …​を呼び出すことによってトリガーされます。

...
suse02:~> hdbnsutil -sr_register --name=ROT \
     --remoteHost=suse01 --remoteInstance=10 \
     --replicationMode=sync --operationMode=logreplay
adding site ...
checking for inactive nameserver ...
nameserver suse02:30001 not responding.
collecting information ...
updating local ini files ...
done.

この例では、 remoteHost がプライマリノードであり、remoteInstance はデータベースインスタンス番号です(ここでは10)。

次に、データベースインスタンスを再起動し、システムレプリケーションステータスを確認します。セカンダリノードでは、このモードは「SYNC」または「SYNCMEM」のいずれかである必要があります。レプリケーションモードとしては"ASYNC" も可能ですが、 自動化されたクラスターテイクオーバーではサポートされません。.このモードは、セカンダリの登録中に定義されたsync オプションに依存します。

例 9: セカンダリを起動してSR構成を確認する

新たなセカンダリを起動するには、HDBコマンドラインツールを使用します。次に、 hdbnsutil -sr_stateConfigurationを使用してSRシステムレプリケーション構成を確認します。

suse02:~> HDB start
...
suse02:~> hdbnsutil -sr_stateConfiguration --sapcontrol=1
SAPCONTROL-OK: <begin>
mode=sync
site id=2
site name=ROT
active primary site=1
primary masters=suse01
SAPCONTROL-OK: <end>
done.

SAP HANAクラスター全体のレプリケーションステータスを表示するには、 プライマリノードで<sid>admユーザーとして、以下のコマンドを使用します。

例 10: システムレプリケーションステータスの詳細を確認する

systemReplicationStatus.py スクリプトは、現在のシステムレプリケーションに関する詳細情報を提供します。

suse01:~> HDBSettings.sh systemReplicationStatus.py --sapcontrol=1
...
site/2/SITE_NAME=ROT1
site/2/SOURCE_SITE_ID=1
site/2/REPLICATION_MODE=SYNC
site/2/REPLICATION_STATUS=ACTIVE
site/1/REPLICATION_MODE=PRIMARY
site/1/SITE_NAME=WDF1
local_site_id=1
...

7.4 SAP HANA SRシステムレプリケーションのテイクオーバーの手動テスト

SAP HANAシステムレプリケーションをクラスターに統合する前に、手動でテイクオーバーを実行することが不可欠です。クラスターを使用しないテストは、基本動作(テイクオーバーと登録)が想定どおりに機能していることを確認するのに役立ちます。

  • ノード1でSAP HANAを停止します。

  • SAP HANAをノード2にテイクオーバーします。

  • ノード1をセカンダリとして登録します。

  • ノード1のSAP HANAを起動します。

  • 同期ステータスがアクティブになるまで待機します。

7.5 オプションSAP HANA SRを手動で元の状態に再構築する

システムを元の状態に戻します。

  • ノード2のSAP HANAを停止します。

  • SAP HANAをノード1にテイクオーバーします。

  • ノード2をセカンダリとして登録します。

  • ノード2でSAP HANAを起動します。

  • 同期ステータスがアクティブになるまで待機します。

8 SAP HANA HA/DRプロバイダーの設定

SAPHanaSR ScaleOut Plan Phase5

この手順は、セカンダリの同期が失われた場合に、直ちにクラスターに通知する際に必須になります。このフックは、セカンダリが非同期になった時点で、HA/DRプロバイダーインタフェースを使用してSAP HANAによって呼び出されます。一般的には、最初のコミット保留が解除されたケースに該当します。システムレプリケーションが復帰したときに、SAP HANAによってフックが再び呼び出されます。

実行手順

  1. SAPHanaSR Pythonフックを実装します。

  2. システムレプリケーション運用モードを構成します。

  3. <sidadm>からクラスターへのアクセスを許可します。

  4. SAP HANAを起動します。

  5. フックの統合をテストします。

8.1 SAPHanaSR Pythonフックを実装する

この手順は両方のサイトで実行する必要があります。SAP HANAがHA/DRフックスクリプトを起動時に統合できるようにするには、SAP HANAを停止してglobal.iniを変更する必要があります。

  • HA/DRフックスクリプトを読み取り/書き込み可能なディレクトリにインストールします。

  • フックをglobal.iniに統合します(オフラインで実行するためにSAP HANAを停止する必要があります)

  • 起動時にフックの統合を確認します。

SAPHanaSRパッケージ(バージョン0.153以降で使用可能)のフックを使用してください。必要に応じて、/ hana / share / myHooksなどのお好みのディレクトリにコピーします。フックは、すべてのSAP HANAクラスターノードで使用できる必要があります。

例 11: SAP HANAを停止

HDB またhsapcontrolを使用して、SAP HANAを停止します。

sapcontrol -nr <instanceNumber> -function StopSystem
例 12: global.ini によりSAPHanaSRを追加する
[ha_dr_provider_SAPHanaSR]
provider = SAPHanaSR
path = /usr/share/SAPHanaSR
execution_order = 1

[trace]
ha_dr_saphanasr = info

8.2 システムレプリケーション運用モードを構成する

システムがSAPHanaSRターゲットとして接続されている場合、 global.ini内に、運用モードを定義するエントリーを見つけることができます。 現時点では、以下のモードが利用できます。 現時点では、以下のモードが利用できます。

  • delta_datashipping

  • logreplay

  • logreplay_readaccess

反対方向にテイクオーバーして再登録されるまで、プライマリサイトにおける運用モードのエントリーは失われたままです。当初、利用可能な運用モードはdelta_datashippingでした。現在におけるHAでの推奨モードは、logreplayまたはlogreplay_readaccessです。logreplay運用モードを使用すると、SAP HANAシステムレプリケーションのセカンダリサイトがホットスタンバイシステムになります。すべての運用モードの詳細については、「SAP HANAのシステムレプリケーションを実行する方法」などのSAPドキュメントをご覧ください。

例 13: 動作モードを確認する

両方のglobal.iniファイルを確認し、必要に応じて運用モードを追加します。

セクション

[ system_replication ]

エントリー

operation_mode = logreplay

global.iniのパス: /hana/shared//global/hdb/custom/config/

[system_replication]
operation_mode = logreplay

8.3 <sidadm>にクラスターへのアクセスを許可する

SAPHanaSR pythonフックの現在のバージョンは、sudoコマンドを使用することにより、<sidadm>ユーザーがクラスター属性にアクセスできるようにします。Linuxでは、visudoを使用して、/etc/sudoers構成ファイルのviエディタを起動できます。

<sidadm>ユーザーは、hana__sid_site_srHook_ *クラスター属性を設定できる必要があります。SAP HANAシステムレプリケーションフックには、パスワード不要のフリーアクセスが求められます。次の例では、sudoアクセスを限定し、必要な属性を正確に設定することだけにしています。

<sid>を小文字の SAPシステムID( ha1など)に置き換えます。

例 14: sudo permissions /etc/sudoers ファイルのエントリー

<sidadm>にsrHookの使用を許可する基本的なsudoersエントリー。

# SAPHanaSR-ScaleUp entries for writing srHook cluster attribute
<sidadm> ALL=(ALL) NOPASSWD: /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_*

高度なセキュリティレベルを達成するためのより詳細なsudoersエントリー。すべてのCmnd_Aliasエントリーは、それぞれ1行のエントリーとして定義する必要があります。次の例では、1行にドキュメントの書式設定によって強制された改行が含まれています。この例では、Cmnd_Aliasエントリーに4つの別々の行があり、1行は<sidadm>ユーザー用で、それ以外がコメント用です。

# SAPHanaSR-ScaleUp entries for writing srHook cluster attribute
Cmnd_Alias SOK_SITEA   = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_<siteA> -v SOK   -t crm_config -s SAPHanaSR
Cmnd_Alias SFAIL_SITEA = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_<siteA> -v SFAIL -t crm_config -s SAPHanaSR
Cmnd_Alias SOK_SITEB   = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_<siteB> -v SOK   -t crm_config -s SAPHanaSR
Cmnd_Alias SFAIL_SITEB = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_<siteB> -v SFAIL -t crm_config -s SAPHanaSR
<sidadm> ALL=(ALL) NOPASSWD: SOK_SITEA, SFAIL_SITEA, SOK_SITEB, SFAIL_SITEB

9 クラスターの構成

SAPHanaSR ScaleOut Plan Phase6

この章では、SUSE Linux Enterprise Server for SAP ApplicationsとSAP HANA Database Integrationの一部である、SUSE Linux Enterprise High Availability Extensionクラスターソフトウェアの構成について解説します。

実行手順
  1. 基本的なクラスター構成。

  2. クラスターのプロパティとリソースを構成します。

9.1 基本的なクラスター構成

最初のステップは、基本的なクラスターフレームワークを設定することです。便宜上、YaST2またはha-cluster-initスクリプトを使用してください。2番目のCorosysncリングを追加し、UCAST通信に変更して、環境に合わせてタイムアウト値を調整することを強くお勧めします。

9.1.1 「ストレージベースフェンシング」のウォッチドッグを設定する

SBDフェンシングメカニズム(ディスクレスまたはディスクベース)を使用する場合は、ウォッチドッグも設定する必要があります。ウォッチドッグは、システムがSBD(ディスクレスまたはディスクベース)にアクセスできなくなった場合に、ノードをリセットするために必要になります。ウォッチドッグドライバーをロードするようにLinuxシステムを構成することが必須になります。hpwdt、iTCO_wdtなどの、ハードウェアの#アシスタンスト(ほとんどの最新システムで利用可能)を備えたウォッチドッグを使用することを強くお勧めします。次善の策として、softdogモジュールを使用できます。

例 15: ウォッチドッグに対する設定
重要
重要

ウォッチドッグタイマーへのアクセス: 他のソフトウェアがウォッチドッグタイマーにアクセスすることはできません。常に1つのプロセスだけがアクセスできます。一部のハードウェアベンダーは、システムリセットにウォッチドッグを使用するシステム管理ソフトウェアを提供しています(例: HP ASRデーモン)。ウォッチドッグをSBDで使用する場合は、このようなソフトウェアを無効にする必要があります。

最適なウォッチドッグモジュールを選択します。または、カーネルバージョンと共にインストールされているドライバーのリストを調べる方法もあります。

ls -l /lib/modules/$(uname -r)/kernel/drivers/watchdog

ウォッチドッグモジュールがすでにロードされているかどうかを確認します。

lsmod | egrep "(wd|dog|i6|iT|ibm)"

結果が表示された場合は、システムにはウォッチドッグがすでにロードされています。そのウォッチドッグがウォッチドッグデバイスに対応していない場合は、そのモジュールをアンロードする必要があります。

モジュールを安全にアンロードするには、まずアプリケーションがウォッチドッグデバイスを使用しているかどうかを確認します。

lsof /dev/watchdog
rmmod <wrong_module>

ウォッチドッグモジュールを有効にして永続化します。以下の例ではsoftdogが使われていますが、いくつか制約がありますので他のオプションを優先してください。

echo softdog > /etc/modules-load.d/watchdog.conf
systemctl restart systemd-modules-load

ウォッチドッグモジュールが正しくロードされていることを確認します。

lsmod | grep dog
ls -l /dev/watchdog

ウォッチドッグのテストは、簡単な手順で実行できます。ウォッチドッグは、正規の手順を踏まずにシステムを強制的にリセット/シャットダウンするため、必ず最初にSAP HANAを切り替えてください。

ハードウェアウォッチドッグの場合は、ウォッチドッグがタイムアウトした後のアクションを事前に定義します。ウォッチドッグモジュールがロードされていて、他のアプリケーションによって制御されていない場合は、次の手順を実行します。

重要
重要

ウォッチドッグを継続的に更新せずに、ウォッチドッグをトリガーして、システムをリセットするか電源をオフにします。これが意図されたメカニズムです。次のコマンドは、システムのリセットまたは電源オフを強制します。

touch /dev/watchdog

softdogモジュールが使用されている場合は、以下のアクションを実行できます。

echo 1> /dev/watchdog

テストが成功した場合は、すべてのクラスターメンバーにウォッチドッグを実装する必要があります。

9.1.2 ha-cluster-initを使用したクラスターの初期設定

詳細については、SUSE Linux Enterprise High Availability Extensionの自動クラスター設定を参照してください。

初期設定を作成するには、ha-cluster-initコマンドを使用してダイアログに従ってください。これは、最初のクラスターノードだけに実行してください。

suse01:~> ha-cluster-init -u -s <sbddevice>

このコマンドは、以下を含む基本的なクラスターフレームワークを構成します。

  • SSH鍵

  • 構成ファイルを転送するためのcsync2

  • SBD(1台以上のデバイス)

  • corosync(1つ以上のリング)

  • HAWK Webインタフェース

重要
重要

ha-cluster-init の要求に基づいて、haclusterユーザーのパスワードを変更します。

9.1.3 CorosyncとSBD構成を適用する

2番目のcorosyncリングを追加することをお勧めします。-uオプションを使用してha-cluster-initを開始しなかった場合は、corosyncを変更してUCAST通信を使用する必要があります。UCASTに変更するには、 systemctl stop pacemakerを使用して、すでに稼働しているクラスターを停止します。corosync構成とSBDパラメータを設定した後に、クラスターを再起動します。

9.1.3.1 Corosync の構成

/etc/corosync/corosync.confファイルにある以下のブロックを確認します。また、本ドキュメントの最後に掲載されている例も参照してください。

totem {
    ...

    interface {
        ringnumber: 0
        mcastport:  5405
        ttl:        1
    }
    #Transport protocol
    transport:      udpu

}
nodelist {
        node {
        #ring0 address
        ring0_addr:     192.168.1.11
        nodeid: 1

        }
    }
9.1.3.2 SBD構成を適用する

SBDデバイスを使用していない場合は、このセクションをスキップできますが、サポートされている別のフェンシングメカニズムを必ず実装してください。

詳細については、マニュアルのページsbd.8およびstonith_sbd.7をご覧ください。

表 3: /etc/sysconfig/SBDファイルのSBDオプション
パラメータ説明

SBD_WATCHDOG_DEV

ウォッチドッグデバイスを定義します。ウォッチドッグの使用は必須です。SBDは、ウォッチドッグがないと信頼性が低くなります。ウォッチドッグの設定については、SLESマニュアルとSUSE TIDs 7016880を参照してください。

SBD_WATCHDOG_TIMEOUT

タイムアウトは秒単位で定義します。定義しなければ、ウォッチドッグはノードがパニックに陥るまで待機したままになります。

このパラメータは、使用中のストレージ環境と整合している必要があります。仮にストレージが30秒間ハングすることが予想される場合は、このパラメータをより長い値に設定する必要があります。一般的な設定は5秒ですが、本稼働環境では意欲的な値になり得ます。

このパラメータは、Pacemaker クラスターのstonith-watchdog-timeoutプロパティにも整合させる必要があります。stonith-watchdog-timeoutプロパティは、SBD_WATCHDOG_TIMEOUTの値以上に設定する必要があります。

stonith-watchdog-timeout を負の値に設定すると、Pacemakerはこのタイムアウトを自動的に計算し、SUSE Linux Enterprise High Availability Extension 15以降の SBD_WATCHDOG_TIMEOUT の値の2倍に設定します。

SBD_STARTMODE

起動モード。cleanに設定されている場合、sbdはノードが以前クリーンにシャットダウンされたか、またはスロットが空の場合にのみ起動します。

SBD_PACEMAKER

Pacemakerクォーラムとノードに異常がないかをチェックをします。

以下では、/dev/disk/by-id/SBDA、および/dev/disk/by-id/SBDBを実際のsbdデバイス名に置き換えます。この例では、SBD_WATCHDOG_TIMEOUTは15秒に設定されており、一般的な5秒に比べると意欲的な値ではありません。

# /etc/sysconfig/sbd
SBD_DEVICE="/dev/disk/by-id/SBDA;/dev/disk/by-id/SBDB"
SBD_WATCHDOG_DEV="/dev/watchdog"
SBD_WATCHDOG_TIMEOUT=15
SBD_PACEMAKER="yes"
SBD_STARTMODE="clean"
SBD_OPTS=""
重要
重要

タイムアウトの計算に関して、詳しくは次のSUSE製品ドキュメントもご覧ください。https://documentation.suse.com/sle-ha/15-SP1/single-html/SLE-HA-guide/#sec-ha-storage-protect-watchdog-timings

9.1.3.3 SBDデバイスを確認する

SBDデバイスを使用していない場合は、このセクションをスキップできますが、サポートされているフェンシングメカニズムを必ず実装してください。

両方のノードからSBDデバイスにアクセスでき、有効なレコードが含まれているか確認することをお勧めします。これを/etc/sysconfig/sbdで構成されているすべてのデバイスに対して確認してください。

suse01:~ # sbd -d /dev/disk/by-id/SBDA dump
==Dumping header on disk /dev/disk/by-id/SBDA
Header version     : 2.1
UUID               : 0f4ea13e-fab8-4147-b9b2-3cdcfff07f86
Number of slots    : 255
Sector size        : 512
Timeout (watchdog) : 20
Timeout (allocate) : 2
Timeout (loop)     : 1
Timeout (msgwait)  : 40
==Header on disk /dev/disk/by-id/SBDA is dumped

サンプルのタイムアウト値は初期値に過ぎませんので、ご使用の環境に合わせて調整してください。

さまざまなクラスターノードの現在のSBDエントリーを確認するには、sbd listを使用します。すべてのエントリーがclearされている場合、SBDデバイスにはフェンシングタスクがマークされません。

suse01:~ # sbd -d /dev/disk/by-id/SBDA list
0     suse01      clear

SBD構成パラメータの詳細については、 SUSE Linux Enterprise High-Availability Extension、およびTIDsが 7016880と7008216のストレージベースフェンシングセクションをご覧ください。

ここで、最初のノードでクラスターを再起動します(systemctl start pacemaker)。

9.1.4 2番目のノードのクラスター構成

2ノードクラスターの2番目のノードは、ha-cluster-joinコマンドを実行して統合することができます。このコマンドは、IPアドレスか最初のクラスターノードの名前を要求します。必要なすべての構成ファイルがコピーされます。その結果、クラスターは両方のノードで起動されます。

# ha-cluster-join -c <host1>

9.1.5 初めてクラスターを確認する

これで、初めて両方のノードでクラスターを確認し、オプションでクラスターを起動する時がきました。

suse01:~ # systemctl status pacemaker
suse01:~ # systemctl status sbd
suse02:~ # systemctl status pacemaker
suse01:~ # systemctl start pacemaker
suse02:~ # systemctl status sbd
suse02:~ # systemctl start pacemaker

crm_monを使用してクラスターのステータスを確認します。「-r」オプションを使用して、構成済みで停止しているリソースも表示します。

# crm_mon -r

このコマンドは、空のクラスターを表示し、以下のような画面出力を表示します。ここで最も興味深い情報は、「online」オンラインステータスの2つのノードがある点と、「partition with quorum」というメッセージです。

Stack: corosync
Current DC: suse01 (version 2.0.1+20190417.13d370ca9-3.6.1-2.0.1+20190417.13d370ca9) - partition with quorum
Last updated: Wed Feb  5 15:06:35 2020
Last change: Wed Feb  5 15:04:42 2020 by hacluster via crmd on suse02
2 nodes configured
1 resource configured
Online: [ suse01 suse02 ]
Full list of resources:
 stonith-sbd    (stonith:external/sbd): Started suse01

9.2 クラスターのプロパティとリソースを構成する

このセクションでは、crm configure シェルコマンドを使用して、制約、リソース、ブートストラップ、STONITHを構成する方法について説明します。このコマンドは、SUSE Linux Enterprise High Availability Extensionドキュメントの クラスターリソースの構成・管理(コマンドライン)セクションで説明されています。

crm コマンドを使用して、オブジェクトをCRMに追加します。以下の例をローカルファイルにコピーし、ファイルを編集して、その構成をCIBにロードしてください。

suse01:~ # vi crm-fileXX
suse01:~ # crm configure load update crm-fileXX

9.2.1 クラスターブートストラップなど

最初の例では、クラスターのブートストラップオプション、リソース、運用のデフォルトを定義します。stonith-timeoutは、SBD msgwaitタイムアウトの1.2倍よりも大きくする必要があります。

suse01:~ # vi crm-bs.txt
# enter the following to crm-bs.txt
property $id="cib-bootstrap-options" \
              stonith-enabled="true" \
              stonith-action="reboot" \
              stonith-timeout="150s"
rsc_defaults $id="rsc-options" \
              resource-stickiness="1000" \
              migration-threshold="5000"
op_defaults $id="op-options" \
                 timeout="600"

次に、この構成をクラスターに追加します。

suse01:~ # crm configure load update crm-bs.txt

9.2.2 STONITHデバイス

ディスクレスSBDを使用している場合は、このセクションをスキップしてください。

以下の構成では、SBDディスクのSTONITHリソースを定義します。

# vi crm-sbd.txt
# enter the following to crm-sbd.txt
primitive stonith-sbd stonith:external/sbd \
    params pcmk_delay_max="15"

再び、この構成をクラスターに追加します。

suse01:~ # crm configure load update crm-sbd.txt

IPMI/ILOによるフェンシングについては、 セクション9.2.3項 「IPMIをフェンシングメカニズムとして使用する」をご覧ください。

9.2.3 IPMIをフェンシングメカニズムとして使用する

IPMI/ILOフェンシングの詳細については、クラスター製品ドキュメント (https://documentation.suse.com/sle-ha/15-SP1/single-html/SLE-HA-guide/)をご覧ください。IPMI STONITHリソースの例は、本ドキュメントのセクション13.4項 「IPMI STONITH手段の例」に掲載されています。

IPMIを使用するには、リモートマネジメントボードがIPMI標準と互換性を有している必要があります。

IPMIベースフェンシングでは、クラスターノードごとにプリミティブを設定する必要があります。各リソースは、1つのクラスターノードを確実にフェンスする役割を果たします。リモートマネジメントボードのIPアドレスとログインユーザー/パスワードをSTONITHリソースエージェントに適合させる必要があります。リモートマネジメントボードへのrootアクセスを提供する代わりに、特別なSTONITHユーザーを作成することをお勧めします。ロケーションルールは、ホストが独自のSTONITHリソースを実行しないことを保証する必要があります。

9.2.4 他のフェンシングメカニズムを使用する

STONITHメカニズムとして、SBDを最初の選択肢、IPMIを2番目の選択肢として使用することをお勧めします。SUSE Linux Enterprise High Availability製品は、本書では取り上げていないその他のフェンシングメカニズムもサポートしています。

フェンシングの詳細については、SUSE Linux Enterprise High Availabilitガイドをご覧ください。

9.2.5 SAPHanaTopology

次に、HANAインスタンスが起動する前に、必要なリソースのグループを定義します。crm-saphanatop.txtのようなテキストファイルで変更の準備をし、以下のコマンドと共にロードします。

crm configure load update crm-saphanatop.txt

# vi crm-saphanatop.txt
# enter the following to crm-saphanatop.txt
primitive rsc_SAPHanaTopology_HA1_HDB10 ocf:suse:SAPHanaTopology \
        op monitor interval="10" timeout="600" \
        op start interval="0" timeout="600" \
        op stop interval="0" timeout="300" \
        params SID="HA1" InstanceNumber="10"
clone cln_SAPHanaTopology_HA1_HDB10 rsc_SAPHanaTopology_HA1_HDB10 \
        meta clone-node-max="1" interleave="true"

すべてのパラメータに関する追加情報は、以下のコマンドを使って検索することができます。

man ocf_suse_SAPHanaTopology

再び、この構成をクラスターに追加します。

suse01:~ # crm configure load update crm-saphanatop.txt

ここで最も重要なパラメータはSIDとインスタンス番号です。これはSAP環境では自明のことです。これらのパラメータの他に、タイムアウト値や、開始、監視、停止の各動作は、いずれも典型的な調整可能なものです。

9.2.6 SAPHana

次に、HANAインスタンスが起動する前に、必要なリソースのグループを定義します。crm-saphana.txtのようなテキストファイルで変更内容を編集して、 以下のコマンドと共にロードします。

crm configure load update crm-saphana.txt

表 4: さまざまなシナリオにおける一般的なリソースエージェントパラメータの設定
パラメータパフォーマンス最適化コスト最適化マルチティア

PREFER_SITE_TAKEOVER

true

false

false / true

AUTOMATED_REGISTER

false / true

false / true

false

DUPLICATE_PRIMARY_TIMEOUT

7200

7200

7200

表 5: 重要なリソースエージェントパラメータの説明
パラメータ説明

PREFER_SITE_TAKEOVER

停止したプライマリをローカルで再起動する代わりに、RAがセカンダリインスタンスへのテイクオーバーを優先するかどうかを定義します。

AUTOMATED_REGISTER

以前のプライマリを自動的に登録して、新しいプライマリのセカンダリにするかどうかを定義します。このパラメータを使用すると、システムレプリケーションの自動化のレベルを調整できます。

false に設定した場合は、以前のプライマリを手動で登録する必要があります。クラスターは、プライマリが2重に稼働する状況を回避するために、登録されるまでこのSAP HANA RDBMSを起動しません。

DUPLICATE_PRIMARY_TIMEOUT

デュアルプライマリの状況が発生した場合は、2つのプライマリのタイムスタンプの間に時間差が必要になります。時間差が時間間隔よりも小さい場合、クラスターは一方または両方のインスタンスを「WAITING」ステータスに維持します。これは、管理者がフェイルオーバーに対応する機会を与えるためです。以前のプライマリのノードが完全にクラッシュした場合、以前の プライマリは、時間差が経過した後に登録されます。SAP HANA RDBMS「だけ」がクラッシュした場合は、以前のプライマリが直ちに登録されます。この新たなプライマリへの登録後、すべてのデータはシステムレプリケーションによって上書きされます。

すべてのパラメータに関する追加情報は、次のコマンドで検索することができます。

man ocf_suse_SAPHana

# vi crm-saphana.txt
# enter the following to crm-saphana.txt
primitive rsc_SAPHana_HA1_HDB10 ocf:suse:SAPHana \
        op start interval="0" timeout="3600" \
        op stop interval="0" timeout="3600" \
        op promote interval="0" timeout="3600" \
        op monitor interval="60" role="Master" timeout="700" \
        op monitor interval="61" role="Slave" timeout="700" \
        params SID="HA1" InstanceNumber="10" PREFER_SITE_TAKEOVER="true" \
        DUPLICATE_PRIMARY_TIMEOUT="7200" AUTOMATED_REGISTER="false"
ms msl_SAPHana_HA1_HDB10 rsc_SAPHana_HA1_HDB10 \
        meta clone-max="2" clone-node-max="1" interleave="true"

その構成をクラスターに追加します。

suse01:~ # crm configure load update crm-saphana.txt

ここでも、最も重要なパラメータは、やはりSIDとインスタンス番号です。これらのパラメータの他に、開始、昇格、監視、停止の各動作におけるタイムアウト値は、典型的な調整可能なパラメータです。

9.2.7 プライマリサイトの仮想IPアドレス

クラスターに追加される最後のリソースは、仮想IPアドレスをカバーします。

# vi crm-vip.txt
# enter the following to crm-vip.txt

primitive rsc_ip_HA1_HDB10 ocf:heartbeat:IPaddr2 \
        op monitor interval="10s" timeout="20s" \
        params ip="192.168.1.20"

このファイルをクラスターにロードします。

suse01:~ # crm configure load update crm-vip.txt

ほとんどのインストレーションでは、ipパラメータのみをクライアントシステムに提供する仮想IPアドレスに設定する必要があります。

9.2.8 制約

2つの制約により、クライアントデータベースアクセス用の仮想IPアドレスの正しい配置と、SAPHanaとSAPHanaTopologyの2つのリソースエージェント間の開始順序が調整されます。

# vi crm-cs.txt
# enter the following to crm-cs.txt

colocation col_saphana_ip_HA1_HDB10 2000: rsc_ip_HA1_HDB10:Started \
    msl_SAPHana_HA1_HDB10:Master
order ord_SAPHana_HA1_HDB10 Optional: cln_SAPHanaTopology_HA1_HDB10 \
    msl_SAPHana_HA1_HDB10

このファイルをクラスターにロードします。

suse01:~ # crm configure load update crm-cs.txt

9.2.9 アクティブ/アクティブ読み取り可能なシナリオ

この手順はオプションです。読み取り可能なセカンダリによるアクティブ/アクティブSAP HANAシステムレプリケーションがある場合は、必要となる2番目の仮想IPアドレスをクラスターに統合することが可能です。これは、2番目の仮想IPアドレスリソースと、そのアドレスをセカンダリサイトにバインドする場所の制約を追加することによって行われます。

# vi crm-re.txt
# enter the following to crm-re.txt

primitive rsc_ip_HA1_HDB10_readenabled ocf:heartbeat:IPaddr2 \
        op monitor interval="10s" timeout="20s" \
        params ip="192.168.1.21"
colocation col_saphana_ip_HA1_HDB10_readenabled 2000: \
    rsc_ip_HA1_HDB10_readenabled:Started msl_SAPHana_HA1_HDB10:Slave

10 クラスターのテスト

SAPHanaSR ScaleOut Plan Phase7

テストのリストは、本ドキュメントの次回の更新時に改訂される予定です。

どのようなクラスターにおいても、テストは極めて重要です。顧客の要望に基づくすべてのテストケースが実施され、完全に適合していることを確認してください。これを怠ると、本稼働環境でプロジェクトが失敗する可能性があります。

テストの前提条件は、特に断りがない限り、両方のノードが起動され、クラスターの通常のメンバーとHANA RDBMSが実行されていることです。また、システムレプリケーションは同期している状態(SOK)です。

10.1 半自動化テストケース

このテストでは、次の想定をしています。PREFER_SITE_TAKEOVER="true" およびAUTOMATED_REGISTER="false".

注記
注記

以下のテストは順番に実行されるように設計されており、テスト結果は終了ステータスによって異なります。

10.1.1 テスト: サイトA(ノード1)のプライマリデータベースを停止する

例 16: STOP_PRIMARY_SITE_Aをテストする
コンポーネント:
  • プライマリデータベース

説明:
  • プライマリHANAデータベースを通常のクラスター動作中に停止します。

テスト手順:
  1. <sid>admとして、プライマリHANAデータベースを 正しい手順で停止します。

    suse01# HDB stop
リカバリー手順:
  1. <sid>admとして、テイクオーバー後(ノード2で)に古いプライマリ(ノード1の)を新しいプライマリに手動で登録します。

    suse01# hdbnsutil -sr_register --remoteHost=suse02 --remoteInstance=10 \
              --replicationMode=sync --operationMode=logreplay \
              --name=WDF
  2. ルートとして、ノード1でHANAデータベース(現在はセカンダリ)を再起動します。

    suse01# crm resource refresh rsc_SAPHana_HA1_HDB10 suse01
期待される動作:
  1. クラスターは、プライマリHANAデータベース(ノード1)が停止したことを検出し、リソースを失敗としてマークします。

  2. クラスターは、(ノード2の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  3. クラスターは、IPアドレスを(ノード2の)新しいプライマリに移行します。

  4. その後しばらくすると、クラスターは(ノード1で)失敗したプライマリのsync_stateをSFAILとして表示します。

  5. AUTOMATED_REGISTER="false"であることから、クラスターは失敗したHANAデータベースを再起動したり、新しいプライマリに登録することはしせん。

  6. 手動での登録とリソースの更新後、システムとレプリケーションのペアは同期ステータス(SOK)としてマークされます。

  7. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.2 テスト: サイトB(ノード2)のプライマリデータベースを停止する

例 17: STOP_PRIMARY_DB_SITE_Bをテストする
コンポーネント:

プライマリデータベース

説明:

プライマリHANAデータベースを通常のクラスター動作中に停止します。

テスト手順:
  1. <sid>admとして、データベースを正しい手順で停止します。

    suse02# HDB stop
リカバリー手順:
  1. <sid>admとして、テイクオーバー後(ノード1で)に古いプライマリ(ノード2の)を新しいプライマリに手動で登録します。

    suse02# hdbnsutil -sr_register --remoteHost=suse01 --remoteInstance=10 \
                   --replicationMode=sync --operationMode=logreplay \
                   --name=ROT
  2. ルートとして、ノード1でHANAデータベース(現在はセカンダリ)を再起動します。

    suse02# crm resource refresh rsc_SAPHana_HA1_HDB10 suse02
期待される動作:
  1. クラスターは(ノード2で)停止したプライマリHANAデータベースを検出し、リソースを失敗としてマークします。

  2. クラスターは、(ノード1の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  3. クラスターは、IPアドレスを(ノード1の)新しいプライマリに移行します。

  4. その後しばらくすると、クラスターは(ノード2で)失敗したプライマリのsync_stateをSFAILとして表示します。

  5. AUTOMATED_REGISTER="false"であることから、クラスターは失敗したHANAデータベースを再起動したり、新しいプライマリに登録することはしせん。

  6. 手動での登録とリソースの更新後、システムとレプリケーションのペアは同期ステータス(SOK)としてマークされます。

  7. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.3 テスト: サイトA(ノード1)のプライマリデータベースをクラッシュさせる

例 18: CRASH_PRIMARY_DB_SITE_Aをテストする
コンポーネント:

プライマリデータベース

説明:

プライマリデータベースシステムの完全停止をシミュレートします。

テスト手順:
  1. <sid>admとして、シグナルを使用してプライマリデータベースシステムを強制終了します。

    suse01# HDB kill-9
リカバリー手順:
  1. <sid>admとして、テイクオーバー後(ノード2で)に古いプライマリ(ノード1の)を新しいプライマリに手動で登録します。

    suse01# hdbnsutil -sr_register --remoteHost=suse02 --remoteInstance=10 \
                   --replicationMode=sync  --operationMode=logreplay \
                   --name=WDF
  2. ルートとして、ノード1でHANAデータベース(現在はセカンダリ)を再起動します。

    suse01# crm resource refresh rsc_SAPHana_HA1_HDB10 suse01
期待される動作:
  1. クラスターは(ノード1で)停止したプライマリHANAデータベースを検出し、リソースを失敗としてマークします。

  2. クラスターは、(ノード2の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  3. クラスターは、IPアドレスを(ノード2の)新しいプライマリに移行します。

  4. その後しばらくすると、クラスターは(ノード1で)失敗したプライマリのsync_stateをSFAILとして表示します。

  5. AUTOMATED_REGISTER="false"であることから、クラスターは失敗したHANAデータベースを再起動したり、新しいプライマリに登録することはしせん。

  6. 手動での登録とリソースの更新後、システムとレプリケーションのペアは同期ステータス(SOK)としてマークされます。

  7. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.4 テスト: サイトB(ノード2)のプライマリデータベースをクラッシュさせる

例 19: CRASH_PRIMARY_DB_SITE_B をテストする
コンポーネント:

プライマリデータベース

説明:

プライマリデータベースシステムの完全停止をシミュレートします。

テスト手順:
  1. <sid>admとして、シグナルを使用してプライマリデータベースシステムを強制終了します。

    suse02# HDB kill-9
リカバリー手順:
  1. <sid>admとして、テイクオーバー後(ノード1で)に古いプライマリ(ノード2の)を新しいプライマリに手動で登録します。

    suse02# hdbnsutil -sr_register --remoteHost=suse01 --remoteInstance=10 \
                   --replicationMode=sync  --operationMode=logreplay \
                   --name=ROT
  2. ルートとして、ノード1でHANAデータベース(現在はセカンダリ)を再起動します。

    suse02# crm resource refresh rsc_SAPHana_HA1_HDB10 suse02
期待される動作:
  1. クラスターは(ノード2で)停止したプライマリHANAデータベースを検出し、リソースを失敗としてマークします。

  2. クラスターは、(ノード1の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  3. クラスターは、IPアドレスを(ノード1の)新しいプライマリに移行します。

  4. その後しばらくすると、クラスターは(ノード2で)失敗したプライマリのsync_stateをSFAILとして表示します。

  5. AUTOMATED_REGISTER="false"であることから、クラスターは失敗したHANAデータベースを再起動したり、新しいプライマリに登録することはしせん。

  6. 手動での登録とリソースの更新後、システムとレプリケーションのペアは同期ステータス(SOK)としてマークされます。

  7. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.5 テスト: サイトA(ノード1)のプライマリデータベースをクラッシュさせる

例 20: CRASH_PRIMARY_NODE_SITE_Aをテストする
コンポーネント:

プライマリサイトのクラスターノード

説明:

プライマリHANAデータベースを実行しているプライマリサイトノードのクラッシュをシミュレートします。

テスト手順:
  1. 「fast-reboot」システムリクエストを送信して、プライマリノードをクラッシュさせます。

    suse01# echo 'b' > /proc/sysrq-trigger
リカバリー手順:
  1. SBDフェンシングが使用されていると、pacemakerはフェンスされた後、自動的に再起動しません。この場合は、すべてのSBDデバイスのフェンシングフラグをクリアしてから、pacemakerを起動します。

    suse01# sbd -d /dev/disk/by-id/SBDA message suse01 clear
    suse01# sbd -d /dev/disk/by-id/SBDB message suse01 clear
    ...
  2. クラスターフレームワークを開始します。

    suse01# systemctl start pacemaker
  3. <sid>admとして、テイクオーバー後(ノード2で)に古いプライマリ(ノード1の)を新しいプライマリに手動で登録します。

    suse01# hdbnsutil -sr_register --remoteHost=suse02 --remoteInstance=10 \
                   --replicationMode=sync  --operationMode=logreplay \
                   --name=WDF
  4. ルートとして、ノード1でHANAデータベース(現在はセカンダリ)を再起動します。

    suse01# crm resource refresh rsc_SAPHana_HA1_HDB10 suse01
期待される動作:
  1. クラスターは、失敗したノード(ノード1)を検出し、それをUNCLEANと宣言し、セカンダリノード(ノード2)を「partition WITHOUT quorum」ステータス に設定します。

  2. クラスターは失敗したノード(ノード1)をフェンスします。

  3. クラスターは、失敗したノード(ノード1)をOFFLINEとして宣言します。

  4. クラスターは、(ノード2の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  5. クラスターは、IPアドレスを(ノード2の)新しいプライマリに移行します。

  6. その後しばらくすると、クラスターは(ノード2で)失敗したプライマリのsync_stateをSFAILとして表示します。

  7. SBDフェンシングが使用されている場合は、手動のリカバリー手順を使用し、そのノードのフェンシングフラグをクリアしてpacemakerを再起動します。

  8. AUTOMATED_REGISTER="false"であることから、クラスターは失敗したHANAデータベースを再起動したり、新しいプライマリに登録することはしせん。

  9. 手動での登録とリソースの更新後、システムとレプリケーションのペアは同期ステータス(SOK)としてマークされます。

  10. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.6 テスト: サイトB(ノード2)のプライマリノードをクラッシュさせる

例 21: CRASH_PRIMARY_NODE_SITE_Bをテストする
コンポーネント:

セカンダリサイトのクラスターノード

説明:

プライマリHANAデータベースを実行しているセカンダリサイトノードのクラッシュをシミュレートします。

テスト手順:
  1. 「fast-reboot」システムリクエストを送信して、セカンダリノードをクラッシュさせます。

    suse02# echo 'b' > /proc/sysrq-trigger
リカバリー手順:
  1. SBDフェンシングが使用されていると、pacemakerはフェンスされた後、自動的に再起動しません。この場合は、すべてのSBDデバイスのフェンシングフラグをクリアしてから、pacemakerを起動します。

    suse02# sbd -d /dev/disk/by-id/SBDA message suse02 clear
    suse02# sbd -d /dev/disk/by-id/SBDB message suse02 clear
    ...
  2. クラスターフレームワークを起動します。

    suse02# systemctl start pacemaker
  3. <sid>admとして、テイクオーバー後(ノード1で)に古いプライマリ(ノード2の)を新しいプライマリに手動で登録します。

    suse02# hdbnsutil -sr_register --remoteHost=suse01 --remoteInstance=10 \
                   --replicationMode=sync  --operationMode=logreplay \
                   --name=ROT
  4. ルートとして、ノード2でHANAデータベース(現在はセカンダリ)を再起動します。

    suse02# crm resource refresh rsc_SAPHana_HA1_HDB10 suse02
期待される動作:
  1. クラスターは、セカンダリノード(ノード2)が失敗したことを検出し、UNCLEANと宣言して、プライマリノード(ノード1)を「partition WITHOUT quorum」ステータス に設定します。

  2. クラスターは、失敗したノード(ノード2)をフェンスします。

  3. クラスターは、障害が発生したノード(ノード2)をOFFLINEとして宣言します。

  4. クラスターは、(ノード1の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  5. クラスターは、IPアドレスを(ノード1の)新しいプライマリに移行します。

  6. その後しばらくすると、クラスターは(ノード2で)停止したセカンダリのsync_stateをSFAILとして表示します。

  7. SBDフェンシングが使用されている場合は、手動のリカバリー手順を使用し、そのノードのフェンシングフラグをクリアしてpacemakerを再起動します。

  8. AUTOMATED_REGISTER="false"であることから、クラスターは失敗したHANAデータベースを再起動したり、新しいプライマリに登録することはしせん。

  9. 手動での登録とリソースの更新後、システムとレプリケーションのペアは同期ステータス(SOK)としてマークされます。

  10. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.7 テスト: サイトB(ノード2)のセカンダリデータベースを停止する

例 22: STOP_SECONDARY_DB_SITE_Bをテストする
コンポーネント:

セカンダリHANAデータベース

説明:

セカンダリHANAデータベースを通常のクラスター動作中に停止します。

テスト手順:
  1. <sid>admとして、セカンダリHANAデータベースを正しい手順で停止します。

    suse02# HDB stop
リカバリー手順:
  1. ルートとして、セカンダリHANAデータベース(ノード2)の失敗したリソースのステータスを更新します。

    suse02# crm resource refresh rsc_SAPHana_HA1_HDB10 suse02
期待される動作:
  1. クラスターは、セカンダリデータベース(ノード2)が停止したことを検出し、リソースを失敗としてマークします。

  2. クラスターはシステムレプリケーションの障害を検出し、失敗(SFAIL)としてマークします。

  3. クラスターは、同じノード(ノード2)でセカンダリHANAデータベースを再起動します。

  4. クラスターは、システムレプリケーションが再び同期していることを検出し、それをok(SOK)としてマークします。

  5. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.8 テスト: サイトB(ノード2)のセカンダリデータベースをクラッシュさせる

例 23: CRASH_SECONDARY_DB_SITE_B をテストする
コンポーネント:

セカンダリHANAデータベース

説明:

セカンダリデータベースシステムの完全停止をシミュレートします。

テスト手順:
  1. <sid>adm.として、シグナルを使用してセカンダリデータベースシステムを強制終了します。

    suse02# HDB kill-9
リカバリー手順:
  1. ルートとして、セカンダリHANAデータベース(ノード2)の失敗したリソースステータスをクリーンアップします。

    suse02# crm resource refresh rsc_SAPHana_HA1_HDB10 suse02
期待される動作:
  1. クラスターは、セカンダリデータベース(ノード2)が停止したことを検出し、リソースを失敗としてマークします。

  2. クラスターはシステムレプリケーションの障害を検出し、失敗(SFAIL)としてマークします。

  3. クラスターは、同じノード(ノード2)でセカンダリHANAデータベースを再起動します。

  4. クラスターは、システムレプリケーションが再び同期していることを検出し、それをok(SOK)としてマークします。

  5. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.1.9 テスト: サイトB(Node2)のセカンダリノードをクラッシュさせる

例 24: CRASH_SECONDARY_NODE_SITE_B をテストする
コンポーネント:

セカンダリサイトのクラスターノード

説明:

セカンダリHANAデータベースを実行しているセカンダリサイトノードのクラッシュをシミュレートします。

テスト手順:
  1. 「fast-reboot」システムリクエストを送信して、セカンダリノードをクラッシュさせます。

    suse02# echo 'b' > /proc/sysrq-trigger
リカバリー手順:
  1. SBDフェンシングが使用されていると、pacemakerはフェンスされた後、自動的に再起動しません。この場合は、すべてのSBD デバイスのフェンシングフラグをクリアしてから、pacemakerを起動します。

    suse02# sbd -d /dev/disk/by-id/SBDA message suse02 clear
    suse02# sbd -d /dev/disk/by-id/SBDB message suse02 clear
    ...
  2. クラスターフレームワークを起動します。

    suse02# systemctl start pacemaker
期待される動作:
  1. クラスターは、セカンダリノード(ノード2)が失敗したことを検出し、UNCLEANと宣言して、プライマリノード(ノード1)を「partition WITHOUT quorum」ステータス に設定します。

  2. クラスターは、失敗したノード(ノード2)をフェンスします。

  3. クラスターは、障害が発生したノード(ノード2)をOFFLINEとして宣言します。

  4. その後しばらくすると、クラスターは(ノード2で)停止したセカンダリのsync_stateをSFAILとして表示します。

  5. SBDフェンシングが使用されている場合は、手動のリカバリー手順を使用し、そのノードのフェンシングフラグをクリアしてpacemakerを再起動します。

  6. フェンスされたノード(ノード2)がクラスターに復帰すると、以前のセカンダリHANAデータベースが自動的に起動します。

  7. クラスターは、システムレプリケーションが再び同期していることを検出し、それをok(SOK)としてマークします。

10.1.10 テスト: レプリケーションLANの障害

例 25: FAIL_NETWORK_SRをテストする
コンポーネント:

レプリケーションLAN

説明:

プライマリノードとセカンダリノード間のレプリケーションLAN接続の切断。

テスト手順:
  1. レプリケーションLAN上のクラスターノード間の接続を切断します。

リカバリー手順:
  1. レプリケーションLAN上のクラスターノード間の接続を再確立します。

期待される動作:
  1. その後しばらくすると、クラスターはセカンダリ(ノード2)のsync_stateをSFAILとして表示します。

  2. プライマリHANAデータベース(ノード1)「HDBSettings.sh systemReplicationStatus.py」は 「CONNECTION TIMEOUT」を示し、セカンダリHANAデータベース(ノード2)はプライマリデータベース(ノード1)に接続できません。

  3. プライマリHANAデータベースは引き続き「normal」として動作しますが、システムレプリケーションは実行されないため、有効なテイクオーバー先ではなくなります。

  4. LAN接続が再確立されると、HDBはHANAデータベース間の接続を自動的に検出して、システムレプリケーションプロセスを再起動します。

  5. クラスターは、システムレプリケーションが再び同期していることを検出し、それをok(SOK)としてマークします。

10.2 完全自動化のテストケース

以降のテスト説明では、PREFER_SITE_TAKEOVER="true」 およびAUTOMATED_REGISTER="true".を前提にしています。

注記
注記

以下のテストは順番に実行されるように設計されており、テスト結果は終了ステータスによって異なります。

10.2.1 テスト: サイトAのプライマリデータベースを停止する

例 26: STOP_PRIMARY_DB_SITE_Aをテストする
コンポーネント:
  • プライマリデータベース

説明:
  • プライマリHANAデータベースを通常のクラスター動作中に停止します。

テスト手順:
  • <sid>admとして、プライマリHANAデータベースを 正しい手順で停止します。

suse01# HDB stop
リカバリー手順:
  1. すべて自動化されていますので手動操作は不要です。

  2. ルートとして、ノード1のクラスターリソースを更新します。

suse01# crm resource refresh rsc_SAPHana_HA1_HDB10 suse01
期待される動作:
  1. クラスターは(ノード1で)停止したプライマリHANAデータベースを検出し、リソースを失敗としてマークします。

  2. クラスターは、(ノード2の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  3. クラスターは、IPアドレスを(ノード2の)新しいプライマリに移行します。

  4. その後しばらくすると、クラスターは(ノード1で)失敗したプライマリのsync_stateをSFAILとして表示します。

  5. AUTOMATED_REGISTER="true" により、クラスターは失敗したHANAデータベースを再起動し、新しいプライマリに登録します。

  6. 自動的に登録され、リソースが更新された後、システムレプリケーションペアは同期ステータス(SOK)としてマークされます。

  7. クラスターの「failed actions」は、リカバリー手順に従ってクリーンアップされます。

10.2.2 テスト: サイトB(ノード2)のプライマリノードをクラッシュさせる

例 27: CRASH_PRIMARY_NODE_SITE_Bをテストする
コンポーネント:
  • サイトBのクラスターノード

説明:
  • プライマリHANAデータベースを実行しているサイトBノードのクラッシュをシミュレートします。

テスト手順:
  • 「fast-reboot」システムリクエストを送信して、セカンダリノードをクラッシュさせます。

suse02# echo 'b' > /proc/sysrq-trigger
リカバリー手順:
  • SBDフェンシングが使用されていると、pacemakerはフェンスされた後、自動的に再起動しません。この場合は、すべてのSBD デバイスのフェンシングフラグをクリアしてから、pacemakerを起動します。

suse02# sbd -d /dev/disk/by-id/SBDA message suse02 clear
suse02# sbd -d /dev/disk/by-id/SBDB message suse02 clear
...
  • クラスターフレームワークを起動します。

suse02# systemctl start pacemaker
  • ルートとして、ノード2のクラスターリソースを更新します。

suse02# crm resource refresh rsc_SAPHana_HA1_HDB10 suse02
期待される動作:
  1. クラスターは、失敗したプライマノード(ノード2)を検出し、それをUNCLEANと宣言し、プライマリノード(ノード2)を「partition WITHOUT quorum」ステータス に設定します。

  2. クラスターは、失敗したプライマリノード)ノード2)をフェンスします。

  3. クラスターは、障害が発生したプライマリノード(ノード2)をOFFLINEとして宣言します。

  4. クラスターは、(ノード1の)セカンダリHANAデータベースを昇格させ、プライマリとして引き継ぎます。

  5. クラスターは、IPアドレスを(ノード1の)新しいプライマリに移行します。

  6. その後しばらくすると、クラスターは(ノード2で)停止したセカンダリのsync_stateをSFAILとして表示します。

  7. SBDフェンシングが使用されている場合は、手動のリカバリー手順を使用し、そのノードのフェンシングフラグをクリアしてpacemakerを再起動します。

  8. フェンスされたノード(ノード2)がクラスターに復帰すると、以前のプライマリがセカンダリになります。

  9. AUTOMATED_REGISTER="true" により、クラスターは失敗したHANAデータベースを再起動し、新しいプライマリに登録します。

  10. クラスターは、システムレプリケーションが再び同期していることを検出し、それをok(SOK)としてマークします。

11 管理

11.1 注意事項

プロジェクトでは以下を必ず実行してください。

  • クラスターに他のリソースを追加する前にSTONITHを定義する。

  • 集中的にテストする。

  • SAP HanaおよびSAPHanaTopologyの動作のタイムアウトを調整する。

  • PREFER_SITE_TAKEOVER ="true"、AUTOMATED_REGISTER ="false"およびDUPLICATE_PRIMARY_TIMEOUT ="7200"の設定で開始する。

プロジェクトでは以下を避けてください。

  • クラスター構成の性急な変更/再変更: ノードをスタンバイしてオンラインに再設定したり、マスター/スレーブリソースを停止/開始すること。

  • 適切な時間に同期をしなかったり、ホスト、ユーザー、グループの名前を解決しないままクラスターを作成すること。

  • クローン、マスター/スレーブ、あるいはIPリソースのロケーションルールを追加すること。本設定ガイドで説明されているロケーションルールだけが許可されています。

  • crm-shell、HAWK、またはその他のツールでリソースを「migrate」または「move」すると、クライアント優先のロケーションルールが追加されるため、このアクティビティが完全に禁止されます。

11.2 監視とツール

クラスターのステータスリクエストには、High Availability Web Console (HAWK)、SAP HANA Studiなど、さまざまコマンドラインツールを使用することができます。

11.2.1 HAWK – クラスターステータスなど

インターネットブラウザを使用して、クラスターのステータスを確認できます。

SAPHanaSR ScaleUp HAWK Status SLE12
図 9: HAWKのクラスターステータス

Ha-cluster-initを使用してクラスターを設定し、上記で述べたようにすべてのパッケージをインストールすると、システムは非常に便利なWebインタフェースを提供してくれます。このグラフィカルなWebインタフェースを使用して、完全なクラスターステータスの概要を取得したり、管理タスクを実行したり、リソースとクラスターブートストラップのパラメータを構成することができます。この強力なユーザーインタフェースを網羅した製品マニュアルをご覧ください。

11.2.2 SAP HANA Studio

データベース固有の管理とチェックは、SAP HANA Studioを使用して行うことができます。

hana studio landscape
図 10: SAP HANA Studio – ランドスケープ

11.2.3 クラスターコマンドラインツール

簡単な概要は、 crm_monを呼び出すことで取得できます。-rを使用すると、停止している構成済みのリソースも表示されます。-1オプションは、crm_monに対して、定期的にではなく1回だけステータスを出力するように指定します。

Stack: corosync
Current DC: suse01 (version 2.0.1+20190417.13d370ca9-3.6.1-2.0.1+20190417.13d370ca9) - partition with quorum
Last updated: Thu Feb  6 12:20:03 2020
Last change: Thu Feb  6 12:19:43 2020 by root via crm_attribute on suse01

2 nodes configured
6 resources configured

Online: [ suse01 suse02 ]

Full list of resources:

 stonith-sbd    (stonith:external/sbd): Started suse01
 Clone Set: cln_SAPHanaTopology_HA1_HDB10 [rsc_SAPHanaTopology_HA1_HDB10]
     Started: [ suse01 suse02 ]
 Clone Set: msl_SAPHana_HA1_HDB10 [rsc_SAPHana_HA1_HDB10] (promotable)
     Masters: [ suse01 ]
     Slaves: [ suse02 ]
 rsc_ip_HA1_HDB10       (ocf::heartbeat:IPaddr2):       Started suse01

詳細については、本マニュアルのページcrm_mon(8) を参照してください。

11.2.4 SAPHanaSRコマンドラインツール

一部のSAPHanaまたはSAPHanaTopologyリソースエージェントの内部値を表示するには、SAPHanaSR-showAttrプログラムを呼び出します。内部値、保存場所、およびそれらのパラメータ名は、次期バージョンで変更される可能性があります。SAPHanaSR-showAttrコマンドは、常に正しい保管場所から値をフェッチします。

crm_attributeのようなクラスターコマンドを使用して、クラスターから直接値をフェッチしないでください。このようなコマンドを使用すると、属性を別の保管場所やクラスターの外部に移す際にメソッドが壊れてしまいます。SAPHanaSR-showAttrは、最初はテストプログラムだけに使用し、自動システム監視には使用しないでください。

 suse01:~ # SAPHanaSR-showAttr
 Host \ Attr clone_state remoteHost roles       ... site    srmode sync_state ...
 ---------------------------------------------------------------------------------
 suse01      PROMOTED    suse02     4:P:master1:... WDF      sync  PRIM       ...
 suse02      DEMOTED     suse01     4:S:master1:... ROT      sync  SOK        ...

SAPHanaSR-showAttr は、scriptなど他の出力形式もサポートしています。スクリプト形式は、フィルターを実行できるようにすることを目的としています。バージョン0.153以降の SAPHanaSRパッケージは、SAPHanaSR-filterフィルターエンジンも提供します。出力形式スクリプトを伴ったSAPHanaSR-showAttrSAPHanaSR-filterを組み合わせると効果的なクエリを定義できます。

suse01:~ # SAPHanaSR-showAttr --format=script | \
   SAPHanaSR-filter --search='remote'
Thu Feb  6 12:28:10 2020; Hosts/suse01/remoteHost=suse02
Thu Feb  6 12:28:10 2020; Hosts/suse02/remoteHost=suse01

SAPHanaSR-replay-archive は、hb_report (crm_report)アーカイブからのSAPHanaSR属性値の分析に役立ちます。これにより、事後分析が可能になります。

この例では、管理者はHDB kill-9コマンドを使用してプライマリSAP HANAインスタンスを強制終了しました。この発生時刻は午後9:10頃です。

suse01:~ # hb_report -f 19:00
INFO: suse01# The report is saved in ./hb_report-1-11-11-2019.tar.bz2
INFO: suse01# Report timespan: 11/11/19 19:00:00 - 11/11/19 21:05:33
INFO: suse01# Thank you for taking time to create this report.
suse01:~ # SAPHanaSR-replay-archive --format=script \
    ./hb_report-1-11-11-2019.tar.bz2 | \
    SAPHanaSR-filter --search='roles' --filterDouble
Mon Nov 11 20:38:01 2019; Hosts/suse01/roles=4:P:master1:master:worker:master
Mon Nov 11 20:38:01 2019; Hosts/suse02/roles=4:S:master1:master:worker:master
Mon Nov 11 21:11:37 2019; Hosts/suse01/roles=1:P:master1::worker:
Mon Nov 11 21:12:43 2019; Hosts/suse02/roles=4:P:master1:master:worker:master

上記の例の属性は、最初にsuse01がプライマリ(4:P)を実行し、suse02がセカンダリ(4:S)を実行していたことを示しています。

21:11(中央ヨーロッパ時間 – CET)に、suse01のプライマリが突然停止し、1:Pに低下しました。

クラスターが割込みテイクオーバーを開始しました。21:12(CET)に、以前のセカンダリが新しい実行マスターとして検出されました(4:Sから4:Pに変更)。

11.2.5 SAP HANA LandscapeHostConfiguration

SAPHanaデータベースのステータスを確認し、クラスターが対応すべきかを確認するには、landscapeHostConfigurationスクリプトを使用して、Linux ユーザーの<sid>admとして呼び出します。

suse01:~> HDBSettings.sh landscapeHostConfiguration.py
| Host   | Host   | ... NameServer   | NameServer  | IndexServer | IndexServer |
|        | Active | ... Config Role  | Actual Role | Config Role | Actual Role |
| ------ | ------ | ... ------------ | ----------- | ----------- | ----------- |
| suse01 | yes    | ... master 1     | master      | worker      | master      |

overall host status: ok

SAPHanaリソースエージェントは、SAP HAのガイドラインに従って、リターンコードを次のように解釈します。

表 6: リターンコードの解釈
リターンコード解釈

4

SAP HANAデータベースは問題なく稼働しています。クラスターはデータベースが正常に稼働中と解釈します。

3

SAP HANAデータベースは稼働しており、ステータス情報が提供されています。クラスターはデータベースが正常に稼働中と解釈します。

2

SAP HANAデータベースは稼働中であり、警告状態です。クラスターはデータベースが正常に稼働中と解釈します。

1

SAP HANAデータベースは停止しています。本来データベースは稼働しているはずで、意図的に停止させていない場合は、テイクオーバーのトリガーになる可能性があります。

0

内部スクリプトエラー – 無視されます。

11.3 メンテナンス

OSまたはSUSE Linux Enterprise High Availability Extensionのアップデートを受け取るには、ご使用のシステムをローカルのSUSE ManagerまたはSMTに登録するか、リモートのSUSEカスタマーセンターに登録することをお勧めします。

11.3.1 OSとクラスターをアップデートする

クラスターソフトウェアを含むSUSE Linux Enterprise Server for SAP Applicationsパッケージのアップデートについては、SUSE Linux Enterprise High Availability Extension製品ドキュメントのクラスターをアップグレードしソフトウェアパッケージをアップデートするHigh Availability Administratioガイドに規定されているローリングアップデート手順に従ってください。

11.3.2 SAP HANAをアップデートする -– シームレスなSAP HANA保守

システムレプリケーションのSAP HANAデータベースシステムをアップデートするには、定義済みのSAPプロセスに準拠する必要があります。このセクションでは、システムレプリケーションを再び自動化するために、アップデート手順の前後に実行すべきステップについて説明します。

SUSEは、クラスター内のSAP HANA保守プロセスを最適化しました。改善された手順では、マスター/スレーブリソースを保守に設定し、残りのクラスター(SAPHanaTopologyクローンとIpaddr2 vIPリソース)をアクティブのままに保つだけです。アップデートされた手順を使用すると、仮想IPアドレスが実行中のプライマリを自動的に追跡できるため、クラスター内でシームレスなSAP HANA保守が可能になります。

クラスターがSAP HANAデータベースシステムで実行される保守作業に反応しないように準備します。マスター/スレーブリソースを管理対象外に設定し、クラスターノードを保守モードに設定します。

例 28: 主なSAP HANAアップデート手順
アップデート前のタスク

マスター/スレーブリソースを保守モードに設定します。

crm resource maintenance <master-slave-resource>

本ガイドで指定したmaster-slave-resourceは msl_SAPHana_HA1_HDB10です。

アップデート

両方のSAP HANAデータベースシステムのSAPアップデートプロセスを実行します。この手順はSAPによって記述されています。

アップデート後のタスク

保守後にプライマリ/セカンダリのロールが交換されることに留意してください。したがって、クラスターに対しては、状況に関わらずアップデートされたSAP HANAデータベースシステムへの再プローブを実施するように指示します。

crm resource refresh <master-slave-resource>

両方のサイトでSAP HANAのアップデートが完了したら、クラスターに保守プロセスが終了したことを通知します。これにより、再びクラスターはSAPをアクティブに制御および監視することができるようになります。

crm resource maintenance <master-slave-resource> off

11.3.3 SAP HANAプライマリを移行する

次の手順では、プライマリがノード1で実行され、セカンダリがノード2で実行されていると想定しています。この目的は、ノードのロールを「exchange」することですので、最終的に、プライマリはノード2で実行され、セカンダリはノード1で実行されることになります。

ロールの交換には、さまざまな方法があります。以下の手順は、ネイティブHANAコマンドを使用してロールの変更を「accept」するようにクラスターに指示する方法を示しています。

例 29: SAPツールセットを使用してSAP HANAプライマリを移行する
移行前

マスター/スレーブリソースを保守モードに設定します。これはどのクラスターノードでも実行できます。

crm resource maintenance <master-slave-resource-name>
手動によるテイクオーバープロセス
  • プライマリSAP HANAデータベースシステムを停止します。この例では、<sid>admユーザーとしてノード1にコマンドを入力します。

    HDB stop
  • セカンダリSAP HANAデータベースシステムでテイクオーバープロセスを開始します。この例では、<sid>admユーザーとしてノード2にコマンドを入力します。

    hdbnsutil -sr_takeover
  • 以前のプライマリを新しいセカンダリとして登録します。この例では、<sid>admユーザーとしてノード1にコマンドを入力します。

    hdbnsutil -sr_register --remoteHost=suse02 --remoteInstance=10 \
     --replicationMode=sync --name=WDF \
     --operationMode=logreplay
  • 新しいセカンダリSAP HANAデータベースシステムを起動します。この例では、<sid>admユーザーとしてノード1にコマンドを入力します。

    HDB start
移行後
  • SAPHanaSR-showAttrが両方のSAP HANAデータベースシステムが再起動していることを示すまでしばらく待機します(フィールドロールは数字4で始まる必要があります)。新しいセカンダリには、「S」 (セカンダリ用)ロールが割り当てられている必要があります。

  • 以前のマスター/スレーブのロールに関わらず、失敗したマスターを再監視するようにクラスターに指示します。ルートユーザーとして、このコマンドはどのクラスターノードでも送信することができます。

    crm resource refresh master-slave-resource-name
  • マスター/スレーブリソースを再び管理対象のステータスに設定します。ルートユーザーとして、このコマンドはどのクラスターノードでも送信することができます。

    crm resource maintenance <master-slave-resource-name> off

次に、クラスターを使用して、移行の一部を自動化する方法について説明します。SAPHanaSR-showAttrSAPHanaSR-filterを使用してクエリ属性を定義する場合、バージョン0.153以降のSAPHanaSRが必要です。

例 30: クラスターツールセットを使用してSAP HANAプライマリを移行する
  • forceオプションを使用して、このノードから「move away」するルールを作成します。

    crm resource move <master-slave-resource-name> force

    「move away」 (force)ルールにより、クラスターは現在のプライマリを停止します。その後、システムレプリケーションが以前に同期されていた場合は、セカンダリサイトでpromoteを実行します。システムレプリケーションのステータスが同期していない(SFAIL)場合は、プライマリを移行しないでください。

    重要
    重要

    force オプションなしで移行すると、以前のプライマリが停止しないままテイクオーバーされることになります。forceオプションを使用した移行のみがサポートされます。

    注記
    注記

    crm リソースのmove コマンドは、以前はmigrateという名称でした。migrateコマンドは現在でも有効ですが、すでに過去のものとみなされています。

  • セカンダリが新しいプライマリロールへと完全に引き継がれるまで待ちます。SAPHanaSR-showAttrコマンドラインツールを使用して、引き継がれたことを確認し、新しいプライマリの「roles」属性をチェックします。それは「4:P」で始まるはずです。

    suse01:~ # SAPHanaSR-showAttr --format=script | \
       SAPHanaSR-filter --search='roles'
    Mon Nov 11 20:38:50 2019; Hosts/suse01/roles=1:P:master1::worker:
    Mon Nov 11 20:38:50 2019; Hosts/suse02/roles=4:P:master1:master:worker:master
  • AUTOMATED_REGISTER="true"と設定している場合は、この手順をスキップできます。さもなければ、以前のプライマリを登録する必要があります。この例では、<sid>admユーザーとしてノード1にコマンドを入力します。

    hdbnsutil -sr_register --remoteHost=suse02 --remoteInstance=10 \
        --replicationMode=sync --operationMode=logreplay \
        --name=WDF
  • リソースの禁止ルールをクリアして、クラスターが新しいセカンダリを起動できるようにします。

    crm resource clear <master-slave-resource-name>
    注記
    注記

    crm resourcのclearコマンドは、以前はunmigrateという名称でした。unmigrateコマンドはまだ有効ですが、すでに過去のものとみなされています。

  • 新しいセカンダリが起動するまで待ちます。SAPHanaSR-showAttrコマンドラインツールを使用して、引き継がれたことを確認し、新しいプライマリの「roles」属性をチェックします。それは、「4:S」で始まるはずです。

    suse01:~ # SAPHanaSR-showAttr --format=script | \
       SAPHanaSR-filter --search='roles'
    Mon Nov 11 20:38:50 2019; Hosts/suse01/roles=4:S:master1::worker:
    Mon Nov 11 20:38:50 2019; Hosts/suse02/roles=4:P:master1:master:worker:master

12 役に立つリンク、マニュアル、SAPノート

12.1 SUSEのベストプラクティスなど

ブログシリーズ#towardsZeroDowntime

https://www.suse.com/c/tag/towardszerodowntime/

SUSE Linux Enterprise上のSAPにおけるベストプラクティス

https://documentation.suse.com/sbp/all/

2014年のブログ - SAP HANA®のフェイルセーフ運用: SUSE、高可用性ソリューションを拡張

http://scn.sap.com/community/hana-in-memory/blog/2014/04/04/fail-safe-operation-of-sap-hana-suse-extends-its-high-availability-solution

12.2 SUSE製品ドキュメント

SUSE製品マニュアルとドキュメント

https://documentation.suse.com/

現行のSLES for SAPオンラインドキュメント

https://documentation.suse.com/sles-sap/15-SP1/

現行のSUSE Linux Enterprise High Availability Extensionオンラインドキュメント

https://documentation.suse.com/sle-ha/15-SP1/

Tuning guide for SUSE Linux Enterprise Server

https://documentation.suse.com/sles/15-SP1/html/SLES-all/book-sle-tuning.html

Storage administration guide for SUSE Linux Enterprise Server

https://documentation.suse.com/sles/15-SP1/html/SLES-all/book-storage.html

リリースノート

https://www.suse.com/releasenotes

TID Estimate correct multipath timeout

http://www.suse.com/support/kb/doc.php?id=7008216

TID How to load the correct watchdog kernel module

http://www.suse.com/support/kb/doc.php?id=7016880

TID Addressing file system performance issues on NUMA machines

http://www.suse.com/support/kb/doc.php?id=7008919

TID Overcommit Memory in SLES

https://www.suse.com/support/kb/doc.php?id=7002775

SLES技術情報

https://www.suse.com/products/server/technical-information/

XFS file system

https://www.suse.com/communities/conversations/xfs-the-file-system-of-choice/

12.3 マニュアルページ

crm

crm.8

crm_simulate

crm_simulate.8

cs_clusterstate

cs_clusterstate.8

ocf_suse_SAPHana

ocf_suse_SAPHana.7

ocf_suse_SAPHanaTopology

ocf_suse_SAPHanaTopology.7

sbd

sbd.8

stonith_sbd

stonith_sbd.7

SAPHanaSR

SAPHanaSR.7

SAPHanaSR-showAttr

SAPHanaSR-showAttr.8

SAPHanaSR-replay-archive

SAPHanaSR-replay-archive.8

SAPHanaSR_manitenance_examples

SAPHanaSR_manitenance_examples.8

12.4 SAP製品ドキュメント

12.5 SAPノート

2578899 - SUSE Linux Enterprise Server 15: インストレーションノート

https://launchpad.support.sap.com/#/notes/2578899

2684254 - SAP HANA DB: Recommended OS settings for SLES 15 / SLES for SAP Applications 15

https://launchpad.support.sap.com/#/notes/2684254

1876398 - Network configuration for System Replication in HANA SP6

https://launchpad.support.sap.com/#/notes/1876398

611361 - Hostnames of SAP servers

https://launchpad.support.sap.com/#/notes/611361

1275776 - Preparing SLES for Sap Environments

https://launchpad.support.sap.com/#/notes/1275776

1514967 - SAP HANA: セントラルノート

https://launchpad.support.sap.com/#/notes/1514967

1523337 - SAP In-Memory Database 1.0: セントラルノート

https://launchpad.support.sap.com/#/notes/1523337

2380229 - SAP HANA Platform 2.0 - Central Note

https://launchpad.support.sap.com/#/notes/2380229

1501701 - Single Computing Unit Performance and Sizing

https://launchpad.support.sap.com/#/notes/1501701

1944799 - SAP HANA Guidelines for SLES Operating System Installation

https://launchpad.support.sap.com/#/notes/1944799

1890444 - Slow HANA system due to CPU power save mode

https://launchpad.support.sap.com/#/notes/1890444

1888072 - SAP HANA DB: Indexserver crash in strcmp sse42

https://launchpad.support.sap.com/#/notes/1888072

1846872 - "No space left on device" error reported from HANA

https://launchpad.support.sap.com/#/notes/1846872

13

13.1 ha-cluster-init 構成の例

suse01:~ # ha-cluster-init -u
  Generating SSH key
  Configuring csync2
  Generating csync2 shared key (this may take a while)...done
  csync2 checking files...done

Configure Corosync (unicast):
  This will configure the cluster messaging layer.  You will need
  to specify a network address over which to communicate (default
  is eth0's network, but you can use the network address of any
  active interface).

  Address for ring0 [192.168.1.11]
  Port for ring0 [5405]

Configure SBD:
  If you have shared storage, for example a SAN or iSCSI target,
  you can use it avoid split-brain scenarios by configuring SBD.
  This requires a 1 MB partition, accessible to all nodes in the
  cluster.  The device path must be persistent and consistent
  across all nodes in the cluster, so /dev/disk/by-id/* devices
  are a good choice.  Note that all data on the partition you
  specify here will be destroyed.

Do you wish to use SBD (y/n)? y
  Path to storage device (e.g. /dev/disk/by-id/...), or "none" []/dev/disk/by-id/SBDA
WARNING: All data on /dev/disk/by-id/SBDA will be destroyed!
Are you sure you wish to use this device (y/n)? y
  Initializing SBD......done
  Hawk cluster interface is now running. To see cluster status, open:
    https://192.168.1.11:7630/
  Log in with username 'hacluster', password 'linux'
You should change the hacluster password to something more secure!
  Waiting for cluster........done
  Loading initial cluster configuration

Configure Administration IP Address:
  Optionally configure an administration virtual IP
  address. The purpose of this IP address is to
  provide a single IP that can be used to interact
  with the cluster, rather than using the IP address
  of any specific cluster node.

Do you wish to configure a virtual IP address (y/n)? n
  Done (log saved to /var/log/ha-cluster-bootstrap.log)

13.2 クラスター構成の例

以下は、2ノードのクラスター(suse01、suse02)と、SID HA1およびインスタンス番号10のSAP HANAデータベースに対する完全なcrm構成を示しています。この例の仮想IPアドレスは192.168.1.20です。

node suse01
node suse02

primitive rsc_SAPHanaTopology_HA1_HDB10 ocf:suse:SAPHanaTopology \
        op monitor interval=10 timeout=300 \
        op start interval=0 timeout=300 \
        op stop interval=0 timeout=300 \
        params SID=HA1 InstanceNumber=10
primitive rsc_SAPHana_HA1_HDB10 ocf:suse:SAPHana \
        op monitor interval=61 role=Slave timeout=700 \
        op start interval=0 timeout=3600 \
        op stop interval=0 timeout=3600 \
        op promote interval=0 timeout=3600 \
        op monitor interval=60 role=Master timeout=700 \
        params SID=HA1 InstanceNumber=10 PREFER_SITE_TAKEOVER=true \
               DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=false
primitive rsc_ip_HA1_HDB10 ocf:heartbeat:IPaddr2 \
        op monitor interval=10 timeout=20 \
        params ip="192.168.1.20"
primitive stonith-sbd stonith:external/sbd \
        params pcmk_delay_max=15
ms msl_SAPHana_HA1_HDB10 rsc_SAPHana_HA1_HDB10 \
        meta clone-max=2 clone-node-max=1 interleave=true
clone cln_SAPHanaTopology_HA1_HDB10 rsc_SAPHanaTopology_HA1_HDB10 \
        meta clone-node-max=1 interleave=true
colocation col_saphana_ip_HA1_HDB10 2000: \
        rsc_ip_HA1_HDB10:Started msl_SAPHana_HA1_HDB10:Master
order ord_SAPHana_HA1_HDB10 2000: \
        cln_SAPHanaTopology_HA1_HDB10 msl_SAPHana_HA1_HDB10
property cib-bootstrap-options: \
        dc-version="1.1.19+20180928.0d2680780-1.8-1.1.19+20180928.0d2680780" \
        cluster-infrastructure=corosync \
        stonith-enabled=true \
        stonith-action=reboot \
        stonith-timeout=150s \
        last-lrm-refresh=1398346620
rsc_defaults rsc-options: \
        resource-stickiness=1000 \
        migration-threshold=5000
op_defaults op-options \
        timeout=600 \
        record-pending=true

13.3 /etc/corosync/corosync.confの例

次のファイルは、典型的なリングが1つのcorosync構成を示しています。詳細および追加のリングについては、SUSE製品ドキュメントをご覧ください。

# Read the corosync.conf.5 manual page
totem {
        version: 2
        secauth: on
        crypto_hash: sha1
        crypto_cipher: aes256
        cluster_name: suse-ha
        clear_node_high_bit: yes
        token: 5000
        token_retransmits_before_loss_const: 10
        join: 60
        consensus: 6000
        max_messages: 20
        interface {
                ringnumber: 0
                mcastport: 5405
                ttl: 1
        }

        transport: udpu
}

logging {
        fileline: off
        to_stderr: no
        to_logfile: no
        logfile: /var/log/cluster/corosync.log
        to_syslog: yes
        debug: off
        timestamp: on
        logger_subsys {
                subsys: QUORUM
                debug: off
        }

}

nodelist {
        node {
                ring0_addr: 192.168.1.11
                nodeid: 1
        }

        node {
                ring0_addr: 192.168.1.12
                nodeid: 2
        }

}

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
}

13.4 IPMI STONITH手段の例

primitive rsc_suse01_stonith stonith:external/ipmi \
    params hostname="suse01" ipaddr="192.168.1.101" userid="stonith" \
    passwd="k1llm3" interface="lanplus" \
    op monitor interval="1800" timeout="30"
    ...
primitive rsc_suse02_stonith stonith:external/ipmi \
    params hostname="suse02" ipaddr="192.168.1.102" userid="stonith" \
    passwd="k1llm3" interface="lanplus" \
    op monitor interval="1800" timeout="30"
    ...
location loc_suse01_stonith rsc_suse01_stonith -inf: suse01
location loc_suse02_stonith rsc_suse02_stonith -inf: suse02

14 参照

詳細については、以下のドキュメントをご覧ください。

14.1 Pacemaker

Pacemakerプロジェクトのドキュメント

https://clusterlabs.org/pacemaker/doc/

16 GNU Free Documentation License

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 non-commercially. 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 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:

  1. 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.

  2. 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.

  3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

  4. Preserve all the copyright notices of the Document.

  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

  6. 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.

  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

  8. Include an unaltered copy of this License.

  9. 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.

  10. 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.

  11. 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.

  12. 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.

  13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

  14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

  15. 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.