9.4. check スクリプトおよび notify スクリプトの設定
Keepalived は、オプションのユーザー指定の check スクリプトを定期的に実行してアプリケーションの正常性をモニターします。たとえば、このスクリプトは要求を発行し、応答を検証することで web サーバーをテストします。
チェックスクリプトが指定されない場合、TCP 接続をテストする単純なデフォルトスクリプトが実行されます。このデフォルトテストは、モニターポートが 0
の場合は抑制されます。
各 IP フェイルオーバー Pod は、Pod が実行されているノードで 1 つ以上の仮想 IP (VIP) を管理する Keepalived デーモンを管理します。Keepalived デーモンは、ノードの各 VIP の状態を維持します。特定のノード上の特定の VIP は、master
、backup
、または fault
状態にある可能性があります。
master
状態にあるノードでその VIP の check スクリプトが失敗すると、そのノードの VIP は fault
状態になり、再ネゴシエーションがトリガーされます。再ネゴシエーションの中に fault
状態にないノード上のすべての VIP は、どのノードが VIP を引き継ぐかを決定することに参加します。最終的に VIP は一部のノードで master
の状態に入り、VIP は他のノードで backup
状態のままになります。
backup
状態の VIP を持つノードに障害が発生すると、そのノードの VIP は fault
状態になります。fault
状態のノード上の VIP の check スクリプトが再度パスすると、そのノードの VIP は fault
状態を終了し、master
状態に入るためにネゴシエートします。次に、そのノードの VIP は、master
状態または backup
状態のいずれかになります。
クラスター管理者は、オプションの notify スクリプトを提供できます。このスクリプトは状態が変更されるたびに呼び出されます。Keepalived は以下の 3 つのパラメーターをこのスクリプトに渡します。
-
$1
-group
またはinstance
-
$2
:group
またはinstance
の名前です。 -
$3
: 新規の状態:master
、backup
、またはfault
check および notify スクリプトは、IP フェイルオーバー Pod で実行され、ホストファイルシステムではなく Pod ファイルシステムを使用します。ただし、IP フェイルオーバー Pod はホストファイルシステムが /hosts
マウントパスで利用可能にします。check または notify スクリプトを設定する場合は、スクリプトへの完全パスを指定する必要があります。スクリプトを提供する方法として、ConfigMap の使用が推奨されます。
check および notify スクリプトの完全パス名は、Keepalived 設定ファイル (_/etc/keepalived/keepalived.conf
) に追加されます。このファイルは、Keepalived が起動するたびにロードされます。スクリプトは、以下のように ConfigMap を使用して Pod に追加できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
必要なスクリプトを作成し、これを保持する ConfigMap を作成します。スクリプトには入力引数は指定されず、
OK
の場合は0
を、fail
の場合は1
を返す必要があります。check スクリプト
mycheckscript.sh
:#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0
ConfigMap を作成します。
$ oc create configmap mycustomcheck --from-file=mycheckscript.sh
スクリプトを Pod に追加します。マウントされた設定マップファイルの
defaultMode
は、oc
コマンドを使用して、またはデプロイメント設定を編集して実行できる必要があります。通常は、0755
、493
(10 進数) の値が使用されます。$ oc set env deploy/ipfailover-keepalived \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
$ oc set volume deploy/ipfailover-keepalived --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
注記oc set env
コマンドは空白を区別します。=
記号の両側に空白を入れることはできません。ヒントまたは、
ipfailover-keepalived
デプロイメント設定を編集することもできます。$ oc edit deploy ipfailover-keepalived
spec: containers: - env: - name: OPENSHIFT_HA_CHECK_SCRIPT 1 value: /etc/keepalive/mycheckscript.sh ... volumeMounts: 2 - mountPath: /etc/keepalive name: config-volume dnsPolicy: ClusterFirst ... volumes: 3 - configMap: defaultMode: 0755 4 name: customrouter name: config-volume ...
変更を保存し、エディターを終了します。これにより
ipfailover-keepalived
が再起動されます。