TLS を使用した Redis Sentinel - IP ではなくノードの FQDN を取得するにはどうすればよいでしょうか?

TLS を使用した Redis Sentinel - IP ではなくノードの FQDN を取得するにはどうすればよいでしょうか?

これは Serverfault または Stack Overflow の質問である可能性がありますが、まだわかりません。

私は、マスター ノードと 2 つのレプリカ ノードを備えたシンプルな 3 ノードの Redis システムをセットアップし、Redis Sentinel を使用してフェイルオーバーを管理しています。Redis と Sentinel のネットワーク トラフィックは、Redis に組み込まれた TLS サポートと通常の CA 発行の証明書を使用して保護されています。

各 Sentinel インスタンスは、ホスト名をアナウンスし、DNS を解決するように構成されています。

sentinel resolve-hostnames yes
sentinel announce-hostnames yes
sentinel announce-ip "redistest2.mydomain.com"

Servicestack を使用して Sentinel インスタンスに接続する Web サービスがあります。TLS 証明書とホスト名を検証しない限り、すべて正常に動作します。Web サービスは Redis Sentinel リスナーを確認でき、現在のマスターを終了すると、Redis クラスターは新しいマスターに投票し、Web サービスは新しい書き込み可能な Redis ノードに切り替わります。

ただし、元のマスター ノードは FQDN を使用して報告しますが、2 つのバックアップ ノードは IP アドレスを使用してのみ ServiceStack に報告するようです。

Sentinel ログの抜粋によると、バックアップ ノードはホスト名を使用しているようです。

28011:X 15 Feb 2023 15:23:10.817 * +sentinel sentinel <hex-string> redistest2.mydomain.com 26379 @ redistest redistest1.mydomain.com 6379
28011:X 15 Feb 2023 15:23:10.821 * Sentinel new configuration saved on disk
28011:X 15 Feb 2023 15:23:10.897 * +sentinel sentinel <other-hex-string> redistest3.mydomain.com 26379 @ redistest redistest1.mydomain.com 6379
28011:X 15 Feb 2023 15:23:10.901 * Sentinel new configuration saved on disk

しかし、ServiceStack は、サーバー グループから返されるサーバー IP アドレスのみを受信すると主張しています。

Starting with sentinel.
Sentinel hosts: redistest1.mydomain.com:26379?ssl=true, redistest2.mydomain.com:26379?ssl=true, redistest3.mydomain.com:26379?ssl=true
Sentinel created
Host filter set.
Hostfilter: redistest1.mydomain.com:6379
Hostfilter: 10.100.60.72:6379
Hostfilter: 10.100.60.73:6379
RedisManager started.
Redis sentinel info: redistest primary: redistest1.mydomain.com:6379, replicas: 10.100.60.72:6379, 10.100.60.73:6379
Hostfilter: 10.100.60.72:6379
Hostfilter: 10.100.60.73:6379
Ping error with read only client: ServiceStack.Redis.RedisException: [14:23:47.626] Unable to Connect: sPort: 0, Error: One or more errors occurred.
(...)
---> System.AggregateException: One or more errors occurred. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

使用される証明書を正しく検証するために、ServiceStack が Redis ノードの実際のホスト名を確実に受信できるようにするために、Redis および/または Sentinel の構成側で他にできることはありますか?

答え1

ServiceStack ログには、何が問題だったのかを示す必要な手がかりが含まれています。Sentinel は必要な動作を正確に実行しましたが、Redis バックアップ ノードは IP アドレスによって参照されていました。

Sentinel が構成ステートメントで FQDN を含む文字列を返すことができるのと同様にsentinel announce-ip、Redis も構成ステートメントで同じことを実行できますreplica-announce-ip

解決策は、すべてのバックアップ ホストの Redis 構成ファイルに次の行を追加することでした。

replica-announce-ip servername.mydomain.com

この場合の Servername は、もちろん、この特定のバックアップ ノードを実行しているマシンのホスト名です。

関連情報