Tair (Redis OSS-compatible) menggunakan komponen ketersediaan tinggi (HA) proprietary dan tidak bergantung pada Sentinel. Namun, untuk meningkatkan kompatibilitas serta mengurangi kebutuhan perubahan kode, Tair (Redis OSS-compatible) menyediakan mode kompatibel Sentinel. Setelah fitur ini diaktifkan, Anda dapat menghubungkan instans Tair dan Redis Open-Source Edition dengan cara yang sama seperti saat menghubungkan ke penerapan Redis Sentinel yang dikelola sendiri.
Redis Sentinel
Redis Sentinel menyediakan fitur untuk Redis open-source, seperti pemantauan node master dan replika, notifikasi kegagalan, serta failover otomatis. Banyak aplikasi berkeandalan tinggi yang menggunakan database Redis yang dikelola sendiri mengandalkan Sentinel. Untuk menyederhanakan migrasi database tersebut ke cloud, Alibaba Cloud mengembangkan mode kompatibel Sentinel. Setelah mode ini diaktifkan, Anda dapat menggunakan perintah Sentinel berikut. Dalam perintah-perintah ini, nama master harus diatur ke redis_master.
Untuk informasi lebih lanjut tentang dukungan perintah Sentinel pada versi yang berbeda, lihat Dukungan perintah Redis Open-Source Edition.
Contoh koneksi
Setelah Anda mengaktifkan mode kompatibel Sentinel, Anda dapat menghubungkan instans dengan atau tanpa password. Password tidak diperlukan jika akses tanpa password diaktifkan untuk instans dalam VPC. Jika tidak, Anda harus menyediakan kredensial autentikasi.
Koneksi tanpa password
Kode berikut menunjukkan cara menghubungkan ke instans menggunakan mode kompatibel Sentinel tanpa password.
Spring Data Redis
Contoh ini menggunakan 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;
}
Parameter:
master: Nama master. Nilai ini harus diatur ke redis_master.
sentinel: Titik akhir VPC dan nomor port instans, dipisahkan dengan koma (,), misalnya "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com", 6379.
redis-py
Contoh ini menggunakan Python 3.9 dan 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'))
Parameter:
Koneksi berbasis password
Kode berikut menunjukkan cara menghubungkan ke instans menggunakan mode kompatibel Sentinel dengan password.
Java
Contoh ini menggunakan versi klien minimum yang diperlukan. Klien Anda harus memenuhi persyaratan versi berikut:
Jedis 3.10.0 atau yang lebih baru.
Lettuce 6.3.0.RELEASE atau yang lebih baru.
Spring Data Redis 2.5.1 atau yang lebih baru. Anda juga harus mengonfigurasi parameter spring.redis.sentinel.password.
Catatan Kami sangat menyarankan agar Anda melakukan upgrade klien ke versi stabil terbaru. Untuk menemukan versi terbaru, cari di 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();
Parameter:
masterName: Nama master. Nilai ini harus diatur ke redis_master.
sentinels.add/sentinelNodes: Titik akhir VPC dan nomor port instans, dalam format r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379.
dbPassword dan sentinelPassword: Password untuk akun instans. Jika Anda lupa password, Anda dapat mengatur ulang. Untuk informasi lebih lanjut, lihat Ubah atau atur ulang password.
Catatan Untuk akun default, di mana username sama dengan ID instans, masukkan hanya password.
Untuk akun yang baru dibuat, gunakan format <user>:<password>. Format ini juga didukung untuk akun default. Misalnya, jika username adalah testaccount dan password adalah Rp829dlwa, masukkan testaccount:Rp829dlwa.
redis-py
Contoh ini menggunakan Python 3.9 dan 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" # Catatan: Nama ini tidak dapat diubah.
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'))
Parameter:
SENTINEL_HOST dan SENTINEL_PORT: Titik akhir VPC dan nomor port instans.
SENTINEL_MASTER_NAME: Nama master. Nilai ini harus diatur ke redis_master.
SENTINEL_REDIS_PWD: Password untuk akun instans.
FAQ
T: Apa yang harus saya lakukan jika menerima error NOAUTH Authentication required setelah beralih dari penerapan Redis Sentinel yang dikelola sendiri ke mode kompatibel Sentinel?
J: Anda dapat mengaktifkan parameter #no_loose_sentinel-password-free-access dengan mengaturnya ke yes. Ini memungkinkan koneksi Sentinel tanpa password melalui titik akhir VPC tanpa mengaktifkan fitur akses tanpa password VPC global.
Jika instans Anda menjalankan versi Redis sebelum 6.0, lakukan upgrade klien dan modifikasi kode untuk menyertakan password autentikasi Sentinel, lalu coba lagi. Untuk informasi lebih lanjut, lihat Koneksi berbasis password dalam topik ini.
T: Mengapa saya menerima error Unknown sentinel subcommand 'MASTERS'?
J: Error ini terjadi karena versi minor instans Anda tidak mendukung perintah SENTINEL MASTERS. Perbarui versi minor dan coba lagi.
T: Apakah instans Redis Open-Source Edition mendukung mode kompatibel Sentinel?