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) にデプロイされています。
ECS (Elastic Compute Service) インスタンスの内部IPアドレスまたはオンプレミスホストのパブリックIPアドレスが、インスタンスのIPアドレスホワイトリストに追加されます。 詳細については、「ホワイトリストの設定」をご参照ください。
手順
コンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。 次に、インスタンスを見つけて、インスタンスIDをクリックします。
の左側のナビゲーションウィンドウで、インスタンス情報ページをクリックします。パラメーター設定.
インスタンスアーキテクチャに基づいて対応するパラメーターを変更することにより、インスタンスの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互換モードでインスタンスに接続する
次のサンプルコードは、パスワードを使用してSentinel互換モードでインスタンスに接続する方法を示しています。
Java
この例では、最も古いバージョンのJavaクライアントが使用されます。 クライアントは次の要件を満たす必要があります。
説明 クライアントを最新の安定したバージョンに更新することを推奨します。 最新バージョンの詳細については、「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互換モードでインスタンスに接続する」をご参照ください。