openSUSE Leap 16

Valkey : Sentinel の設定2025/12/05

 

Valkey Sentinel による Valkey クラスターの監視設定です。

例として、プライマリーノード 1 台と レプリカノード 2 台で構成した環境へ Sentinel サーバーを 1 台追加して、プライマリーノードの障害発生時に、マスターロールがレプリカノードに自動フェイルオーバーするように設定します。

                                   |
+-----------------------+          |          +-----------------------+
|  [ Valkey Sentinel ]  |10.0.0.25 | 10.0.0.30|   [ Valkey Primary ]  |
|    ctrl.srv.world     +----------+----------+     dlp.srv.world     |
|                       |          |          |                       |
+-----------------------+          |          +-----------------------+
                                   |
+-----------------------+          |          +-----------------------+
| [ Valkey Replica#1 ]  |10.0.0.51 | 10.0.0.52|  [ Valkey Replica#2 ] |
|   node01.srv.world    +----------+----------+    node02.srv.world   |
|                       |                     |                       |
+-----------------------+                     +-----------------------+

[1]

こちらを参考に プライマリー/レプリカ 全ノードでレプリケーション構成を設定しておきます
注意点として Sentinel により自動フェイルオーバーした際は、レプリカがプライマリーに、プライマリーがレプリカに切り替わるため、 接続/認証パスワードの設定は全ノードで合わせておく必要があります。

[2] Sentinel による監視設定は、障害発生時には Sentinel により各ノードの [valkey.conf] の書き換えが実行されてプライマリー/レプリカが切り替わるため、基本的には事前にプライマリー/レプリカ上での手動設定変更は必要ありませんが、 SELinux を有効にしている場合は、[valkey.conf] を変更するための許可ルールの追加が必要になります。以下の許可ルールの追加をプライマリー/レプリカ全ノードで実施します。
dlp:~ #
chown valkey /etc/valkey/valkey.conf

dlp:~ #
semanage fcontext -a -t redis_conf_t /etc/valkey/valkey.conf

dlp:~ #
restorecon /etc/valkey/valkey.conf

[3] Sentinel サーバーをセットアップします。
ctrl:~ #
zypper -n install valkey
# コピー先のファイル名 ⇒ sentinel-(任意の名前).conf

ctrl:~ #
cp /etc/valkey/sentinel.conf.example /etc/valkey/sentinel-valkey.conf

ctrl:~ #
chmod 640 /etc/valkey/sentinel-valkey.conf

ctrl:~ #
chown valkey /etc/valkey/sentinel-valkey.conf

ctrl:~ #
vi /etc/valkey/sentinel-valkey.conf
# 15行目 : 変更 (サービスとして起動)

daemonize
yes
# 93行目 : 変更
# [sentinel monitor (任意の名称) (プライマリーノードの IP) (プライマリーノードのポート) (Quorum)]
# Quorum ⇒ 指定した数の Sentinel サーバーがプライマリーノードがダウンしたと判断した場合にフェイルオーバーする

sentinel monitor mymaster 10.0.0.30 6379 1
# 113行目 : プライマリーノードの認証パスワードを追記

sentinel auth-pass mymaster password
# 134行目 : プライマリーノードがダウンしたと判断する時間 (デフォルトは 30秒)

sentinel down-after-milliseconds mymaster 30000
# 206行目 : フェイルオーバー中に設定変更するレプリカの数

sentinel parallel-syncs mymaster 1
# サービス名 ⇒ valkey-sentinel@(conf ファイル名の [sentinel-] に続く部分)

ctrl:~ #
systemctl enable --now valkey-sentinel@valkey

[4] 以上で設定完了です。Sentinel サーバーで状態の確認をします。
また、プライマリーノードの Valkey を手動で停止させる等して、正常にフェイルオーバーするか等々も確認しておくよいでしょう。
ctrl:~ #
valkey-cli -p 26379

# [mymaster] のプライマリーノード確認
127.0.0.1:26379> sentinel get-master-addr-by-name mymaster 
1) "10.0.0.30"
2) "6379"

# [mymaster] のプライマリーノードの詳細
127.0.0.1:26379> sentinel master mymaster 
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "10.0.0.30"
 5) "port"
 6) "6379"
 7) "runid"
 8) "e9c0cd72171eca3dcc9c1b373141edb79023d847"
 9) "flags"
10) "master"
.....
.....

# [mymaster] のレプリカ確認
127.0.0.1:26379> sentinel slaves mymaster 
1)  1) "name"
    2) "10.0.0.51:6379"
    3) "ip"
    4) "10.0.0.51"
    5) "port"
    6) "6379"
    7) "runid"
    8) "9364bde9165da261dcdbf83f08c9816e0e808da8"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
.....
.....

2)  1) "name"
    2) "10.0.0.52:6379"
    3) "ip"
    4) "10.0.0.52"
    5) "port"
    6) "6379"
    7) "runid"
    8) "b1315ff83c7322bca89a9739b4f5e4f2c62f1420"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
.....
.....
関連コンテンツ