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

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

最終更新日:Dec 13, 2024

Tair (Redis OSS-compatible) は、Redis Sentinelの代わりにAlibaba Cloudによって開発された高可用性 (HA) コンポーネントを使用します。 インスタンスの互換性を向上させ、コードの変更を減らすために、Tair (Redis OSS-compatible) はSentinel互換モードを提供しています。 このモードを有効にすると、Redis Sentinelに接続するのと同じ方法で、TairまたはRedis Open-Source Editionインスタンスに接続できます。

Redis Sentinelの概要

Redis Sentinelは、マスターおよびレプリカの監視、障害警告、自動フェールオーバーなどの機能をオープンソースのRedisに提供します。 Redis Sentinelは、自己管理のRedisデータベースが使用され、高い信頼性が要求されるビジネスシナリオに適しています。 このようなシナリオでRedisデータベースのクラウドへの移行を容易にするために、Alibaba cloudはSentinel互換モードを提供しています。 Sentinel互換モードを有効にすると、次の表に示すSentinelコマンドを実行できます。

コマンド

説明

センティネル歩哨

マスターのSentinelインスタンスとSentinelインスタンスのステータスを照会します。 コマンド構文:

SENTINEL sentinels <Name of a master>

SENTINEL get-master-addr-by-name

マスターのIPアドレスとポート番号を照会します。 コマンド構文:

SENTINEL get-master-addr-by-name <Name of a master>

さまざまなエンジンバージョンでサポートされているSentinelコマンドの詳細については、「」「Redis Open-Source Editionでサポートされているコマンド」をご参照ください。

前提条件

  • インスタンスのエンジンバージョンはRedis 4.0以降です。

  • インスタンスは仮想プライベートクラウド (VPC) にデプロイされています。

    説明

    インスタンスがクラシックネットワークで実行されている場合は、インスタンスのネットワークタイプをVPCに切り替えます。 詳細については、「クラシックネットワークからVPCへのネットワークタイプの切り替え」をご参照ください。

  • ECS (Elastic Compute Service) インスタンスの内部IPアドレスまたはオンプレミスホストのパブリックIPアドレスが、インスタンスのIPアドレスホワイトリストに追加されます。 詳細については、「ホワイトリストの設定」をご参照ください。

手順

  1. コンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。 次に、インスタンスを見つけて、インスタンスIDをクリックします。

  2. の左側のナビゲーションウィンドウで、インスタンス情報ページをクリックします。パラメーター設定.

  3. インスタンスアーキテクチャに基づいて対応するパラメーターを変更することにより、インスタンスのSentinel互換モードを有効にします。 詳細については、「」「インスタンスパラメーターの設定」をご参照ください。

    • インスタンスが読み取り /書き込み分割インスタンスまたはプロキシモードのクラスターインスタンスの場合、sentinel_compat_enableパラメーターを1に設定します。

    • インスタンスが標準インスタンスの場合、#no_loose_sentinel-enabledパラメーターをyesに設定します。

    説明
    • インスタンスアーキテクチャは、インスタンスの詳細ページで確認できます。

    • 直接接続モードのクラスタインスタンスは、負荷分散のためにオープンソースのRedisクラスタを使用するため、Sentinelコンポーネントは不要です。 さらに、このモードではSentinelパラメーターを設定できません。

    インスタンスに対してSentinel互換モードを有効にすると、インスタンスに接続してSENTINEL sentinels testコマンドを実行できます。 コマンドの実行が成功すると、インスタンスのRedis Sentinel互換モードが有効になります。 Sentinel互換モードは、追加のエンドポイントを提供しません。 r-******** .redis.rds.aliyuncs.com:6379などの元のエンドポイントを使用してインスタンスに接続できます。

Sentinel互換モードでインスタンスに接続する

Sentinel互換モードを有効にすると、次のいずれかの方法でインスタンスに接続できます。インスタンスのパスワード不要アクセスを有効にすると、Sentinel互換モードでインスタンスに接続できます。 それ以外の場合は、インスタンスに接続するときに認証情報を設定する必要があります。

パスワードを使用せずにSentinel互換モードでインスタンスに接続する

説明

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

次のサンプルコードは、パスワードを使用せずにSentinel互換モードでインスタンスに接続する方法を示しています。

SpringデータRedis

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

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

パラメーター:

  • master: マスターの名前。 testmasterなどのデフォルト値を使用できます。

  • 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 = "testmaster"

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: マスターの名前。 testmasterなどのデフォルト値を使用できます。

パスワードを使用してSentinel互換モードでインスタンスに接続する

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

Java

この例では、最も古いバージョンのJavaクライアントが使用されます。 クライアントは次の要件を満たす必要があります。

  • Jedis 3.6.0以降が使用されます。

  • レタス5.3.0.RELEASEまたはそれ以降を使用する。

  • Spring Data Redis 2.5.1以降が使用されます。 spring.redis.sentinel.passwordパラメーターは、Spring Data Redisクライアントに指定されています。

説明

クライアントを最新の安定したバージョンに更新することを推奨します。 最新バージョンの詳細については、「Mavenの新機能」をご参照ください。

        String masterName = "any-name";
        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);

パラメーター:

  • masterName: マスターの名前。 testmasterなどのデフォルト値を使用できます。

  • sentinels.add: インスタンスの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"  # Note: This name cannot be changed.
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 Sentinel構成のマスターの名前。 名前はredis_masterに設定されており、変更することはできません。

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

よくある質問

  • ネイティブのRedis SentinelモードからSentinel互換モードに切り替えたときにNOAUTH Authentication requiredエラーメッセージが表示された場合はどうすればよいですか?

    #no_loose_sentinel-password-freeアクセスパラメーターをyesに設定すると、パスワードなしのアクセスを有効にせずにVPC経由でSentinel互換モードでインスタンスに接続できます。

    インスタンスのエンジンバージョンがRedis 6.0より前の場合は、クライアントを更新し、コードを変更してSentinel認証用のパスワードを追加してから、再試行してください。 詳細については、「パスワードを使用してSentinel互換モードでインスタンスに接続する」をご参照ください。