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

Tair (Redis® OSS-Compatible):Sentinel 互換モードを使用した接続

最終更新日:Jun 26, 2026

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

Redis Sentinel

Redis Sentinel は、オープンソースの Redis に、マスターおよびレプリカノードの監視、障害通知、自動フェイルオーバーなどの機能を提供します。セルフマネージドの Redis データベースを使用する多くの高信頼性アプリケーションは Sentinel に依存しています。これらのデータベースのクラウドへの移行を簡素化するために、Alibaba Cloud は 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 互換モードが有効になっていること。

  • クライアントの IP アドレス (ECS インスタンスの内部 IP アドレスやオンプレミスのホストのパブリック IP アドレスなど) が、インスタンスのIP ホワイトリストに登録されていること。

接続例

Sentinel 互換モードを有効にすると、パスワードを使用した接続とパスワードなしの接続のいずれかでインスタンスに接続できます。VPC 内でインスタンスのパスワードなしアクセスが有効になっている場合、パスワードは不要です。それ以外の場合は、認証情報を提供する必要があります。

パスワードなしの接続

説明

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

以下のコードは、Sentinel 互換モードを使用してパスワードなしでインスタンスに接続する方法を示しています。

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:マスター名。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:マスター名。redis_master に設定する必要があります。

パスワードを使用した接続

以下のコードは、Sentinel 互換モードを使用してパスワード付きでインスタンスに接続する方法を示しています。

Java

この例では、最低限必要なクライアントバージョンを使用しています。お使いのクライアントは以下のバージョン要件を満たす必要があります:

  • Jedis 3.10.0 以降。

  • 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:マスター名。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****.redis.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:マスター名。redis_master に設定する必要があります。

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

よくある質問

  • Q:セルフマネージドの Redis Sentinel デプロイメントから Sentinel 互換モードに切り替えた後、NOAUTH Authentication required エラーが発生した場合、どうすればよいですか?

    A:#no_loose_sentinel-password-free-access パラメーターを yes に設定することで、グローバル VPC パスワードなしアクセス機能を有効にすることなく、VPC エンドポイント経由でパスワードなしの Sentinel 接続が可能になります。

    インスタンスが Redis 6.0 より前のバージョンを実行している場合は、クライアントをアップグレードし、Sentinel 認証パスワードを含めるようにコードを変更し、再試行してください。詳細については、本トピックの パスワードを使用した接続 をご参照ください。

  • Q:Unknown sentinel subcommand 'MASTERS' エラーが発生するのはなぜですか?

    A:このエラーは、インスタンスのマイナーバージョンが SENTINEL MASTERS コマンドをサポートしていないために発生します。マイナーバージョンを更新してから、再試行してください。

  • Q:Redis オープンソース版 インスタンスは Sentinel 互換モードをサポートしていますか?

    A:はい、サポートしています。