サイト内の現在位置を表示しています。

CLUSTERPRO X 5.0のご紹介~強制停止リソース~

CLUSTERPRO オフィシャルブログ ~クラブロ~

 

  • 2024/09/13 以下を追記。
  • サービス起動遅延時間の調整について記述を追加しました。

はじめに

CLUSTERPRO X 5.0の新機能として、Amazon Web Services(以降、AWS)とOracle Cloud Infrastructure(以降、OCI)向けに強制停止リソースが追加されました。

強制停止リソースを設定することで、ハートビートの途絶によりサーバーのダウンを認識したときに、ダウンしたサーバーを外部から簡単に強制停止させることができます。
CLUSTERPRO X 4.3以前では、AWSとOCIの環境で強制停止させる場合は、スクリプトをお客様自身で用意する必要がありましたが、強制停止リソースの追加により、より簡単にGUIで設定できるようになりました。

今回は、強制停止リソースとその設定手順についてご紹介します。

この記事の内容

1. 強制停止リソースとは

強制停止リソースを設定することで、ハートビートの途絶によりサーバーのダウンを認識したときに、残りのサーバー(正常なサーバー)からダウンしたサーバーを強制的に停止させることができます。
強制停止リソースはクラスタを構築した環境の種類 (物理マシン・仮想マシン・クラウド) によって異なりますので、その環境の種類に対応した強制停止リソースを設定します。

CLUSTERPRO X 4.3以前は、物理・仮想環境で利用可能な強制停止機能と、強制停止機能が対応していない環境で利用するための強制停止スクリプトがありましたが、CLUSTERPRO X 5.0においてそれらは強制停止リソースとして集約されました。 また、CLUSTERPRO X 5.0ではAWS及びOCI環境向けの強制停止リソースが追加されています。

  • CLUSTERPRO X 5.0のスクリプトを利用する強制停止リソースとCLUSTERPRO X 4.3以前の強制停止スクリプトとでは、スクリプトに記載する内容が異なります。CLUSTERPRO X 4.3以前の設定例は以下を参照ください。

強制停止リソースには「強制停止実行」と「定期チェック」という2種類の動作があります。 それぞれの動作内容や実行されるタイミングは以下の通りです。

強制停止実行

  • サーバーの状態を管理する装置や基盤システムの機能を使用して、ダウンしたサーバーを強制的に停止します。
  • サーバーのダウンを認識した際に実行されます。フェイルオーバーグループが正常に停止したり、ダウンしたサーバーにフェイルオーバーグループが起動していない場合は実行されません。

定期チェック

  • サーバーを強制停止する装置や基盤システムと通信を行うことにより、強制停止を実行できる状態であるかどうかをチェックします。チェックの結果に応じて、強制停止リソースのステータスは "正常" (強制停止を実行可能) または "異常" (強制停止を実行不可能) に変化します。
  • クラスタサービス起動中に、一定時間ごとに実行されます。

1.1 強制停止リソースの必要性

CLUSTERPRO Xでは両系活性を防止する方法として、ネットワークパーティション解決(以降、NP解決)が設定可能です。NP解決の詳細は以下の記事を参照ください。

【参考】
ネットワークパーティション
ネットワークパーティション解決
しかし、NP解決を設定したとしても、サーバーがダウンしたと認識した原因がOSのストール(ハングアップ)である場合や、サーバー間のハートビート通信が不可能であるがNP解決は可能であるといった場合は、そのままフェイルオーバを行うと両系活性となってしまう可能性があります。そのような場合にも両系活性を発生させない方法として、ダウンしたと判定したサーバーを停止させる強制停止リソースを利用します。

2. 強制停止リソースの設定手順

CLUSTERPRO X 5.0で利用可能な強制停止リソースのうち、AWSとOCI、カスタムの強制停止リソースの設定手順を紹介します。
AWSとOCIの強制停止リソースは、停止対象のインスタンス情報を入力するだけで簡単に設定が可能です。
カスタムの強制停止リソースではスクリプトを利用できますが、CLUSTERPRO X 4.3以前の強制停止スクリプトとは異なる記述ポイントがありますので、記載例も紹介します。

強制停止リソースの詳細はリファレンスガイドを参照してください。

【参考】
  • CLUSTERPRO X 5.0 > Windows > リファレンスガイド
    → 第 7 章 強制停止リソースの詳細
  • CLUSTERPRO X 5.0 > Linux > リファレンスガイド
    → 第 7 章 強制停止リソースの詳細

2.1 AWSの設定手順

AWSの強制停止リソースを利用する際は、HAクラスターを構築する各インスタンスのインスタンスIDを設定します。
また、クラスタを構築する各インスタンスにAWS CLIをインストールするなどの事前設定が必要となります。詳細は「2. 強制停止リソースの設定手順」に記載しているリファレンスガイドを参照ください。

Cluster WebUIを起動し「設定モード」から、クラスタのプロパティで強制停止リソースを登録します。
「フェンシング」タブを選択し、[強制停止]の[タイプ]のプルダウンから「AWS」を選択し、「プロパティ」をクリックします。

  • 「フェンシング」タブで設定するAWSのNP解決リソースと、強制停止リソースの動作例につきましては以下も参照ください。

fencing1

「サーバ一覧」タブで「server1」を選択し、「追加」をクリックします。

server list1

server1[インスタンスID](例.i-xxxxxxxxxxxxxxxxx)を指定します。

instance id1

server2も同様の手順で設定します。設定後に「OK」をクリックして設定を完了します。

2.2 OCIの設定手順

OCIの強制停止リソースを利用する際は、HAクラスターを構築する各インスタンスのインスタンスIDを設定します。
また、クラスタを構築する各インスタンスにOCI CLIをインストールするなどの事前設定が必要となります。詳細は「2. 強制停止リソースの設定手順」に記載しているリファレンスガイドを参照ください。

Cluster WebUIを起動し「設定モード」から、クラスタのプロパティで強制停止リソースを登録します。
「フェンシング」タブを選択し、[強制停止]の[タイプ]のプルダウンから「OCI」を選択し、「プロパティ」をクリックします。

fencing2

「サーバ一覧」タブで「server1」を選択し、「追加」をクリックします。

server list2

server1のインスタンスID(例. ocid1.instance.oc1.ap-tokyo-1.xxxx)を設定します。

instance id2

server2も同様の手順で設定します。設定後に「OK」をクリックして設定を完了します。

2.3 スクリプトを使った設定手順

強制停止リソースが対応していない環境で強制停止を実行したい場合、カスタムの強制停止リソースを利用します。
カスタムの強制停止リソースは従来の強制停止スクリプトとは動作タイミングが異なるため、CLUSTERPRO X 4.3以前の環境で作成した強制停止スクリプトをそのまま利用することは基本的に出来ません。

以下で設定手順と設定のポイントについて解説します。

Cluster WebUIを起動し「設定モード」から、クラスタのプロパティで強制停止リソースを登録します。
「フェンシング」タブを選択し、[強制停止]の[タイプ]のプルダウンから「カスタム」を選択し、「プロパティ」をクリックします。

fencing3

「サーバ一覧」タブで「server1」を選択し、「追加」をクリックします。

server list2

server2も同様の手順で設定します。

「強制停止」タブで強制停止実施時の最大待ち時間を「強制停止タイムアウト」として設定します。また強制停止に失敗した場合にフェイルオーバーさせたくない場合は「停止失敗時にグループのフェイルオーバを抑制する」にチェックを入れます。

forcestop

カスタム強制停止リソースで実行するスクリプトはCLUSTERPROに登録する、またはサーバーの任意の場所に配置したスクリプトを指定することが可能です。

今回はスクリプトをCLUSTERPROに登録する方法を紹介します。
サーバーの任意の場所に配置したスクリプトを指定する場合は、「ユーザアプリケーション」を選択し、スクリプトのパスを指定してください。

「スクリプト」タブで「forcestop.sh」を選択し、「編集」をクリックします。

property3

カスタム強制停止リソースで使用するスクリプトには、定期チェック時の動作と、強制停止実行時の動作をそれぞれ記載する必要があり、それぞれの動作の分岐処理を実現するために環境変数[CLP_FORCESTOP_MODE]を利用します。[CLP_FORCESTOP_MODE]の値が0の場合は定期チェック、1の場合は強制停止をそれぞれ実行します。

今回はLinux版のスクリプト記述例を紹介します。
記述例では"ex-check-node"と"ex-stop-node"という架空のコマンドが登場しますが、それぞれ以下のようなコマンドを想定しています。
  • ex-check-node:サーバーのステータスを基盤側に確認するコマンド
  • ex-stop-node:サーバーの停止を基盤側に要求するコマンド

#! /bin/sh
#***************************************
#*            forcestop.sh             *
#***************************************

# 停止チェックの最大試行回数(秒)
CHECK_LOOP_MAX=240

if [ "${CLP_FORCESTOP_MODE}" = 0 ]; then
  # 定期チェック時の動作
  # 強制停止実行可否の確認(コマンド実行チェック)
  ex-check-node
  ret=$?
  if [ ${ret} -ne 0 ]; then
    # コマンド実行チェックの失敗
    exit 1
  fi
else
  # 強制停止実行時の動作
  # ダウンサーバーの強制停止
  ex-stop-node --force --node ${CLP_SERVER_DOWN}
  ret=$?
  if [ ${ret} -ne 0 ]; then
    # 強制停止処理の失敗
    exit 2
  fi

  # 停止チェック
  CHECK_LOOP_COUNT=0
  while [ ${CHECK_LOOP_COUNT} -lt ${CHECK_LOOP_MAX} ]
  do
    ex-check-node --node ${CLP_SERVER_DOWN}
    ret=$?
    if [ ${ret} -eq 0 ]; then
      # 停止を確認
      break
    fi

    sleep 1
    let CHECK_LOOP_COUNT=${CHECK_LOOP_COUNT}+1
  done

  if [ ${ret} -ne 0 ]; then
    # 停止チェックのタイムアウト発生
    exit 3
  fi
fi

exit 0

スクリプトを記述したら、「OK」ボタンを押して保存します。保存した後に「OK」をクリックして設定を完了します。

3. サービス起動遅延時間の設定

CLUSTERPROサービス起動時の遅延時間を設定します。
これにより、強制停止リソース実行中に対向サーバーでOS再起動などが実行された場合に、両系活性が発生することや、クラスター起動処理中に強制停止が実行されることを防止します。
サービス起動遅延時間を以下となるように設定します。

サービス起動遅延時間 >= 強制停止リソースの強制停止タイムアウト + 強制停止リソースの停止完了待ち時間 + ハートビートタイムアウト + ハートビートインターバル

  • カスタム強制停止リソースを利用する場合、強制停止リソースの停止完了待ち時間は0秒で計算します。

サービス起動遅延時間は、「クラスタのプロパティ」の「タイムアウト」タブにある[サービス起動遅延時間]で設定できます。

また、DISK方式によるNP解決を行う場合や共有ディスクを利用する場合はサービス起動遅延時間について別の観点での考慮が必要です。
詳細については、popup【2024年版】サービス起動遅延時間設定機能の紹介も併せて参照ください。

まとめ

今回は、強制停止リソースとその設定手順についてご紹介しました。
従来の強制停止機能と強制停止スクリプトが強制停止リソースに一元化された事に加え、AWSとOCIの環境では、それぞれ専用の強制停止リソースが追加されたことにより、より簡単に設定することができるようになりました。

CLUSTERPRO Xのホームページからフル機能が使えるpopup試用版がダウンロードできますので、是非CLUSTERPRO X 5.0をお試しください。

お問い合わせ

本記事に関するお問い合わせは、popupお問い合わせ窓口までお問い合わせください。
  • 本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。