すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):Sentinel 互換モードを使用してインスタンスに接続する

最終更新日:Nov 09, 2025

Tair (Redis OSS-compatible) は、自社開発の高可用性 (HA) サービスコンポーネントを使用しており、Sentinel には依存しません。ただし、インスタンスの互換性を向上させ、コードの変更を減らすために、Tair (Redis OSS-compatible) は Sentinel 互換モードを提供します。この機能を有効にすると、オープンソースの Redis Sentinel に接続するのと同じ方法で Tair (および Redis オープンソース版) インスタンスに接続できます。

Redis Sentinel の概要

Redis Sentinel は、オープンソース Redis のマスターインスタンスとレプリカインスタンスに対して、モニタリング、アラート、自動フェールオーバーサービスを提供します。自主管理 Redis データベースを使用し、高い信頼性を必要とする多くのビジネスシナリオでは Sentinel が使用されます。これらのシナリオで Redis データベースのクラウドへの移行を容易にするために、Alibaba Cloud は Sentinel 互換モードを開発しました。Sentinel 互換モードを有効にすると、次の Sentinel 関連コマンドを使用できます (次のコマンドのマスター名は redis_master に固定する必要があります):

コマンド

説明

SENTINEL sentinels

指定された Master の Sentinel インスタンスと、これらの Sentinel インスタンスのステータスを照会します。次の構文が使用されます:

SENTINEL sentinels redis_master

SENTINEL get-master-addr-by-name

指定された Master の IP アドレスとポート番号を照会します。次の構文が使用されます:

SENTINEL get-master-addr-by-name redis_master

さまざまなバージョンでの Sentinel 関連コマンドのサポートに関する詳細については、「Redis オープンソース版のコマンドサポート」をご参照ください。

前提条件

接続例

Sentinel 互換モードを有効にすると、2 つの方法でインスタンスに接続できます: インスタンスで Virtual Private Cloud (VPC) 経由のパスワードなしのアクセスが有効になっている場合、Sentinel を介してパスワードなしモードでインスタンスに接続できます。パスワードなしのアクセスが有効になっていない場合は、接続時に認証情報を設定する必要があります。

Sentinel を介したパスワードなしの接続

説明

VPC 経由のパスワードなしのアクセスを有効にする方法の詳細については、「VPC 経由のパスワードなしのアクセスを有効にする」をご参照ください。

次の例は、Sentinel 互換モードで Alibaba Cloud Redis に接続するためのコードを設定する方法を示しています。

Spring Data Redis

この例では、Spring Data Redis 2.4.2 が使用されています。

    @Bean
    public JedisConnectionFactory connectionFactory() {
        RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
                .master("redis_master")
                .sentinel("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com", 6379);
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        ...
        JedisConnectionFactory connectionFactory = new JedisConnectionFactory(sentinelConfig, poolConfig);
        return connectionFactory;
    }

パラメーターの説明:

  • master: SENTINEL 名。 redis_master に固定する必要があります。

  • sentinel: インスタンスの VPC エンドポイントとポート番号をカンマ (,) で区切ったもの。例: "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com", 6379

redis-py

この例では、Python 3.9 と redis-py 4.3.6 が使用されています。

from redis.sentinel import Sentinel
SENTINEL_HOST = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com"
SENTINEL_PORT = 6379
SENTINEL_MASTER_NAME = "redis_master"

sentinel = Sentinel([(SENTINEL_HOST, SENTINEL_PORT)])
r = sentinel.master_for(SENTINEL_MASTER_NAME, db=0)
r.set('foo', 'bar')
print(r.get('foo'))

パラメーターの説明:

  • SENTINEL_HOST および SENTINEL_PORT: インスタンスの VPC エンドポイントとポート番号。

  • SENTINEL_MASTER_NAME: SENTINEL 名。 redis_master に固定する必要があります。

Sentinel を介したパスワードベースの接続

次の例は、Sentinel 互換モードで Alibaba Cloud Redis に接続するためのコードを設定する方法を示しています

Java

この例では、Java クライアントの最小バージョンを使用します。クライアントのバージョン要件は次のとおりです:

  • Jedis 3.6.1 以降。

  • Lettuce 6.3.0.RELEASE 以降。

  • Spring Data Redis 2.5.1 以降。spring.redis.sentinel.password パラメーターも設定する必要があります。

説明

最新の安定したクライアントバージョンにアップグレードすることを強くお勧めします。最新バージョンについては、MVN Repository を検索してください。

Jedis

        String masterName = "redis_master";
        Set<String> sentinels = new HashSet<>();
        sentinels.add("r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379");
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        String dbPassword = "testaccount:Rp829dlwa";
        String sentinelPassword = "testaccount:Rp829dlwa";
        JedisSentinelPool jedisSentinelPool =
                new JedisSentinelPool(masterName, sentinels, poolConfig,
                        2000, 2000, dbPassword,
                        0, null, 2000, 2000,
                        sentinelPassword, null);

Lettuce

    String masterName = "redis_master";
    String sentinelNodes = "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379";
    String sentinelPassword = "testaccount:Rp829dlwa";
    RedisURI redisURI = RedisURI.create("redis-sentinel://" + sentinelPassword + "@" + sentinelNodes + "#" + masterName);
    redisURI.getSentinels().forEach(it -> it.setPassword(sentinelPassword));
    RedisClient client = RedisClient.create(redisURI);
    RedisCommands<String, String> sync = client.connect().sync();
    System.out.println(sync.set("key", "value"));
    System.out.println(sync.get("key"));
    client.close();

パラメーターの説明:

  • masterName: SENTINEL 名。 redis_master に固定する必要があります。

  • sentinels.add/sentinelNodes: インスタンスの VPC エンドポイントとポート番号。r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379 のフォーマットです。

  • dbPassword および sentinelPassword: インスタンスアカウントのパスワード。パスワードのフォーマットは、選択したアカウントによって異なります。パスワードを忘れた場合は、リセットできます。詳細については、「パスワードの変更またはリセット」をご参照ください。

    説明
    • デフォルトアカウント (インスタンス ID にちなんで名付けられたアカウント): パスワードを直接入力します。

    • 新しく作成されたアカウント: パスワードのフォーマットは <user>:<password> です。デフォルトアカウントもこの認証方式をサポートしています。たとえば、カスタムアカウントが testaccount で、パスワードが Rp829dlwa の場合、パスワードは testaccount:Rp829dlwa として入力する必要があります。

redis-py

この例では、Python 3.9 と redis-py 4.3.6 が使用されています。

from redis.sentinel import Sentinel
SENTINEL_HOST = "r-bp10noxlhcoim2****.rds.aliyuncs.com"
SENTINEL_PORT = 6379
SENTINEL_MASTER_NAME = "redis_master"  # 注: この名前は変更できません
SENTINEL_REDIS_PWD = "testaccount:Rp829dlwa"

conf = {
    'password': SENTINEL_REDIS_PWD,
}

sentinel = Sentinel([(SENTINEL_HOST, SENTINEL_PORT)], sentinel_kwargs=conf)
r = sentinel.master_for(SENTINEL_MASTER_NAME, db=0, **conf)
r.set('foo', 'bar')
print(r.get('foo'))

パラメーターの説明:

  • SENTINEL_HOST および SENTINEL_PORT: インスタンスの VPC エンドポイントとポート番号。

  • SENTINEL_MASTER_NAME: SENTINEL 名。 redis_master に固定する必要があります。

  • SENTINEL_REDIS_PWD: インスタンスアカウントのパスワード。

よくある質問

  • Q: 以前は自主管理 Redis Sentinel モードを使用していました。Redis Sentinel 互換モードに切り替えた後、NOAUTH Authentication required エラーが発生しました。この問題を解決するにはどうすればよいですか?

    A: #no_loose_sentinel-password-free-access パラメーターを有効にする (yes に設定する) ことで、VPC パスワードなし機能を有効にせずに、VPC エンドポイント経由で Sentinel を介したパスワードなしの接続を実装できます。

    インスタンスが Redis 6.0 以前を実行している場合は、クライアントをアップグレードし、一部のコードを変更して Sentinel 認証パスワードを追加してから、再試行してください。詳細については、このトピックの「Sentinel を介したパスワードベースの接続」をご参照ください。

  • Q: なぜ Unknown sentinel subcommand 'MASTERS' というエラーが表示されるのですか?

    A: 古いマイナーバージョンは一部のコマンドと互換性がありません。マイナーバージョンを更新して、もう一度お試しください。