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

ApsaraDB for Redis:Sentinel互換モードを使用してApsaraDB for Redisインスタンスに接続する

最終更新日:Aug 27, 2024

ApsaraDB for Redisは、Redis Sentinelの代わりにAlibaba Cloudによって開発された高可用性 (HA) コンポーネントを使用します。 ApsaraDB for RedisとオープンソースのRedisとの互換性を向上させ、コードの変更を最小限に抑えるために、 ApsaraDB for RedisはSentinel互換モードを提供します。 このモードを有効にすると、クライアントはRedis Sentinelに接続するのと同じ方法でTairインスタンスに接続できます。

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コマンドの詳細については、「」「ApsaraDB For Redis Community Editionでサポートされているコマンド」をご参照ください。

前提条件

  • ApsaraDB for Redis インスタンスのエンジンバージョンが Redis 4.0 以降であること。

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

    説明

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

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

手順

  1. ApsaraDB for Redisコンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。 次に、インスタンスを見つけて、インスタンス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互換モードを有効にすると、次のいずれかの方法で Redisインスタンスに接続できます。 Redisインスタンスでパスワードフリーアクセスが有効になっている場合、Sentinel互換モードでインスタンスに接続できます。 それ以外の場合は、インスタンスに接続するときに認証情報を設定する必要があります。

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

説明

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

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

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: Redisインスタンスの仮想プライベートクラウド (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: RedisインスタンスのVPCエンドポイントとポート番号。

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

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

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

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: RedisインスタンスのVPCエンドポイントとポート番号。 例: r-bp10noxlhcoim2 **** .redis.rds.aliyuncs.com:6379

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

    説明
    • ユーザー名がインスタンス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: RedisインスタンスのVPCエンドポイントとポート番号。

  • SENTINEL_MASTER_NAME: Redis Sentinel構成のマスターの名前。 名前はredis_masterに設定されており、変更することはできません。

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

よくある質問

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

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

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