WebLogic Server 12.2.1で、動的クラスターの自動スケーリングを試してみた

WebLogic Server 12cR2では、クラスターのメンバーを自動的に増減する機能が追加されました。この機能では、スケジュールベース、メトリックベースの動的スケーリングをサポートしています。

  • スケジュールベース
    • 予め指定されたスケジュールで、クラスターメンバーの増減を行います
    • (例)決められた曜日/時刻が来たら、サーバーを追加して予想される負荷に対応
  • メトリックベース
    • 指定したメトリックの値が、一定の値を超えるなどした場合に、クラスターメンバーの増減を行います。
    • (例)所定の時間内に一定数以上のリクエストを検出したらサーバーを追加し、突発的な負荷に対応

今回は、スケジュールベースの自動スケーリングを試して見ます。

構成手順

0. (準備)マシンを構成する

追加されるクラスターメンバーを稼働させるためのマシンを、予め構成しておきます。

  • 管理サーバーとは別のホストに、管理対象サーバーを一台構成
  • 上記管理サーバーに対し、マシンを構成。マシン名は"Machine-wlsmanaged0"
  • クラスターメンバーへのアクセス用に以下のポートを開放
    • 7101
    • 7102
    • 8101
    • 8102

本記事では、上記の様な構成を実施済みであるものとします。

1. 動的クラスターを作成する

まずはメンバーの増減を試すための動的クラスターを作成します。

WebLogic Server管理コンソールにアクセスし、[チェンジセンター] の [ロックして編集] をクリックします。

f:id:charlier_shoe:20160121154853p:plain

[クラスターのサマリー] で、[新規] > [動的クラスタ] の順にクリックします。

f:id:charlier_shoe:20160121154912p:plain

[新規動的クラスタの作成] で、以下のように値を設定し、[次] をクリックします。

  • 名前: DynamicCluster0(任意の名前でよい)
  • メッセージング・モード: ユニキャスト
  • (他はデフォルトのまま)

f:id:charlier_shoe:20160121154929p:plain

次の画面(画面名は同じ)で、以下のように値を設定し、[次] をクリックします。

  • 動的クラスタ・サイズ: 1
  • (他はデフォルトのまま)

f:id:charlier_shoe:20160121154945p:plain

次の画面(画面名は同じ)で、以下のように値を設定し、[次] をクリックします。
(今回は管理対象サーバーを1台しか構成しないので、単一のマシン上にクラスターメンバーが追加されるようにします)

  • ラジオボックス: すべての動的サーバーに単一マシンを使用する
  • 選択したマシン: Machine-wlsmanaged0

f:id:charlier_shoe:20160121155004p:plain

次の画面ではデフォルトのまま [次]をクリックします。

f:id:charlier_shoe:20160121155017p:plain

次は確認画面です。[終了] をクリックします。

f:id:charlier_shoe:20160121155035p:plain

最後に、[チェンジセンター] > [変更のアクティブ化] をクリックして、これまでの作業をサーバーに反映させます。

これで動的クラスターの作成は完了です。

2. 診断モジュールを作成する

動的クラスターの自動スケーリングは、WebLogic診断フレームワークの一機能として提供されています。
診断モジュールを構成して、ポリシーとアクション(12.1.3以前の「監視」、「通知」が改名)を設定しておくことで、自動スケーリングを実現できます。今回の場合、

  • ポリシー: 毎日 06:00(06:05) に
  • アクション: スケールアップ(ダウン)を実行する

という設定をします。

2-1. 診断モジュールを作成する

まずは診断モジュールを構成します。

まずはWebLogic Server管理コンソールにアクセスし、[チェンジセンター] の [ロックして編集] をクリックします。

次に、[ドメイン構造] の [診断] > [診断モジュール] を選択し、[診断モジュールのサマリー] で、[新規] をクリックします。

f:id:charlier_shoe:20160121155219p:plain

[診断システム・モジュールの作成] で、以下のように値を設定し、[OK] をクリックします。

  • 名前: CalendarBasedScalingModule
  • 説明: カレンダーベースで、動的クラスターを自動スケーリングします。(任意の説明書きでよい)
  • (他はデフォルトのまま)

f:id:charlier_shoe:20160121155238p:plain

2-2. 診断モジュールにポリシー/アクションを設定する

続いて、診断モジュールにポリシーを設定します。ポリシーの設定を行う操作の中で、アクションの作成も併せて行います。

まずはスケールアップのポリシー/アクションからです。
今回は毎日 06:00(UTC) に、クラスターメンバーが1つ追加されるようにします(タイムゾーンUTCなのは、私が利用している環境の都合です)。

[ドメイン構造] の [診断] > [診断モジュール] を選択し、診断システムモジュールの一覧から、"CalendarBasedScalingModule" をクリックします。

f:id:charlier_shoe:20160121155305p:plain

[CalendarBasedScalingModuleの設定] で、[構成]、[ポリシーとアクション] タブを順に選択します。
更に、画面下方のポリシーの一覧で、[新規] をクリックします。

f:id:charlier_shoe:20160121155330p:plain

[ポリシーの作成] で、以下のように値を設定し、[次] をクリックします。

  • ポリシー名: 06-00-00 UTC everyday(任意の名前でよい)
  • ポリシー・タイプ: カレンダー・ベース
  • (他はデフォルトのまま)

f:id:charlier_shoe:20160121155349p:plain

次の画面(画面名は同じ)で、以下のように値を設定し、[次] をクリックします。

  • 頻度: カスタム

f:id:charlier_shoe:20160121155403p:plain

次の画面(画面名は同じ)で、以下のように値を設定し、[次] をクリックします。

f:id:charlier_shoe:20160121155418p:plain

次の画面(画面名は同じ)ではデフォルトのまま [次]をクリックします。

f:id:charlier_shoe:20160121155435p:plain

次の画面(画面名は同じ)では、ラジオボタンで [アクションのスケール・アップ] を選択し、[新規スケール・アップ・アクション] をクリックします。

f:id:charlier_shoe:20160121155455p:plain

次の画面(画面名は同じ)では、アクションの作成をおこないます。以下のように値を設定し、[次] をクリックします。

  • アクション名: ScaleUp(任意の名前でよい)
  • (他はデフォルトのまま)

f:id:charlier_shoe:20160121155520p:plain

次の画面(画面名は同じ)は、まだアクションの作成の続きです。以下のように値を設定し、[終了] をクリックします。

  • クラスタ名: DynamicCluster0(最初に作った動的クラスターを選択)
  • スケーリング・サイズ: 1

f:id:charlier_shoe:20160121155534p:plain

ポリシーの作成に戻ります。以下のように値を設定し、[終了] をクリックします。ここまでで、スケールアップのポリシー/アクションの作成は完了です。

  • スケール・アップ・アクションの選択: ScaleUp(作成したアクションの名前に合わせる)
  • (他はデフォルトのまま)

f:id:charlier_shoe:20160121155555p:plain

スケールダウンのポリシー/アクションも同様に作成します。
毎日 06:05(UTC) に、クラスターメンバーが1つ削減されるようにします。
スケールアップと要領は同じなので画面イメージは省略しますが、以下の様に値を設定するようにします。

  • [ポリシーの作成] 画面 1枚目
    • ポリシー名: 06-05-00 UTC everyday(任意の名前でよい)
    • ポリシー・タイプ: カレンダー・ベース
    • (他はデフォルトのまま)
  • [ポリシーの作成] 画面 2枚目
    • 頻度: カスタム
  • [ポリシーの作成] 画面 3枚目
  • [ポリシーの作成] 画面 4枚目
    • (デフォルトのまま)
  • [ポリシーの作成] 画面 5枚目
    • ラジオボタン: アクションのスケールダウン
    • スケール・ダウン・アクションの選択: ScaleDown(先に[新規スケール・ダウン・アクション]をクリックして、同名のアクションを作っておきます)
  • [ポリシーの作成] 画面のアクションの作成部分 1枚目
    • アクション名: ScaleUp(任意の名前でよい)
    • (他はデフォルトのまま)
  • [ポリシーの作成] 画面のアクションの作成部分 2枚目
    • クラスタ名: DynamicCluster0(最初に作った動的クラスターを選択)
    • スケーリング・サイズ: 1

これでポリシー/アクションの作成は完了です。

念のため、ポリシー、アクションが作成されているか確認してみます。

[ドメイン構造] の [診断] > [診断モジュール] を選択し、診断システムモジュールの一覧から、"CalendarBasedScalingModule" をクリックします。
更に、[CalendarBasedScalingModuleの設定] で、[構成]、[ポリシーとアクション] タブを順に選択します。

画面下部のポリシーの一覧に、以下のように2つのポリシーが表示されます。

f:id:charlier_shoe:20160121155635p:plain

[アクション] タブをクリックしてアクションの一覧に切り替えると、以下のように2つのアクションが表示されます。

f:id:charlier_shoe:20160121155648p:plain

2-3. 診断モジュールのターゲットを設定する

[ドメイン構造] の [診断] > [診断モジュール] を選択し、診断システムモジュールの一覧から、"CalendarBasedScalingModule" をクリックします。
更に、[CalendarBasedScalingModuleの設定] で、[ターゲット] タブを選択します。

[AdminServer] のチェックボックスをオンにして、[保存] をクリックします。

f:id:charlier_shoe:20160121155713p:plain

ここまでで、診断モジュールの全ての設定が完了しました。最後に、[チェンジセンター] > [変更のアクティブ化] をクリックして、これまでの作業をサーバーに反映させます。

後は動作確認を残すのみ…。

動作確認

いよいよ動作確認です。

動的クラスターを作成した際に、それに属するサーバーが1つ構成されていますので、予め起動しておきます。

[ドメイン構造] の [環境] > [サーバー] を選択し、[サーバーのサマリー] 画面で [制御] タブをクリックします。 "DynamicCluster0-1" というサーバーができているので、これに対応するチェックボックスをONにして、[起動] をクリックします。

f:id:charlier_shoe:20160121155758p:plain

続く確認画面で、[はい] を選択すると、サーバーの起動は完了です。

f:id:charlier_shoe:20160121155814p:plain

後は、メトリックブラウザでクラスターメンバー数のモニタリングを設定しつつ、時間が来るのを待ちます…。

結果はこちら。

f:id:charlier_shoe:20160121155836p:plain

あれ、06:00にスケールアップはできていますが、06:05になってもメンバーが減らない…。

管理サーバーのログを確認して見たところ、以下の様なエラーが記録されていました。どうやら、スケールアップ後にもう少し時間を置かないと、続くスケーリングは失敗するようです。

#### <[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'> <> <> <0c8309f6-60d6-4929-904a-472ef040511f-0000005e> <1453269900660> <[severity-value: 8] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-2192046> during execute operation. Requested resolution is FAIL. Reason: Scaling operation failed because the cluster DynamicCluster0 is in cool-off period and cannot be scaled for another 624 seconds.>

※このあと設定を変えて再挑戦し、期待通り動作することを確認しております。

以上、動的クラスターの自動スケーリング機能の検証でした。