Tair (Redis OSS-compatible) menggunakan komponen ketersediaan tinggi (HA) proprietary dan tidak bergantung pada Sentinel. Namun, untuk meningkatkan kompatibilitas instans serta meminimalkan perubahan kode bagi pengguna, Tair (Redis OSS-compatible) menyediakan mode kompatibel Sentinel. Setelah fitur ini diaktifkan, Anda dapat menghubungkan ke instans Tair atau Redis Open-Source Edition dengan cara yang sama seperti saat menghubungkan ke pengaturan Redis Sentinel native.
Redis Sentinel
Redis Sentinel menyediakan layanan untuk Redis open-source, seperti pemantauan instans master/replica, notifikasi kegagalan, dan failover otomatis. Sentinel banyak digunakan dalam skenario bisnis yang menggunakan database Redis on-premises yang dikelola sendiri dan memerlukan keandalan tinggi. Untuk mempermudah migrasi database Redis dalam skenario tersebut ke cloud, Alibaba Cloud mengembangkan mode kompatibel Sentinel. Setelah Anda mengaktifkan mode kompatibel Sentinel, Anda dapat menggunakan perintah terkait Sentinel berikut. Nama master dalam perintah-perintah ini harus diatur sebagai redis_master.
Command | Description |
SENTINEL sentinels | Menanyakan instans Sentinel dari Master tertentu dan status instans- instans Sentinel tersebut. Sintaks berikut digunakan: SENTINEL sentinels redis_master
|
SENTINEL get-master-addr-by-name | Menanyakan alamat IP dan nomor port dari Master tertentu. Sintaks berikut digunakan: SENTINEL get-master-addr-by-name redis_master
|
Untuk informasi lebih lanjut tentang perintah Sentinel yang didukung oleh berbagai versi, lihat Dukungan perintah Redis Open-Source Edition.
Prasyarat
Anda telah mengaktifkan mode kompatibel Sentinel.
Anda telah menambahkan alamat IP client Anda ke daftar putih alamat IP instans. Alamat ini dapat berupa alamat IP internal dari instance ECS atau alamat IP publik dari host on-premises.
Contoh koneksi
Setelah Anda mengaktifkan mode kompatibel Sentinel, Anda dapat menghubungkan ke instans dengan dua cara. Jika akses tanpa password melalui Virtual Private Cloud (VPC) diaktifkan untuk instans, Anda dapat terhubung tanpa password. Jika tidak, autentikasi diperlukan.
Koneksi Sentinel tanpa password
Contoh berikut menunjukkan cara mengonfigurasi koneksi dalam mode kompatibel Sentinel.
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 Sentinel. Harus diatur ke redis_master.
sentinel: Titik akhir VPC dan nomor port instans, diberikan sebagai argumen terpisah ke metode sentinel. 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 Sentinel dengan password
Contoh berikut menunjukkan cara mengonfigurasi koneksi dengan password dalam mode kompatibel Sentinel.
Java
Untuk menggunakan koneksi Sentinel dengan password, client Anda harus memenuhi persyaratan versi minimum 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 menyarankan Anda melakukan upgrade client 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 Sentinel. 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. Format password tergantung pada jenis akun. Untuk mengatur ulang password yang lupa, lihat Ubah atau atur ulang password.
Catatan Untuk akun default, yang dinamai sesuai ID instans, masukkan hanya password-nya.
Untuk akun kustom, format password adalah <user>:<password>. Format ini juga didukung untuk akun default. Sebagai contoh, jika username adalah testaccount dan password adalah Rp829dlwa, gunakan 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 Sentinel. Harus diatur ke redis_master.
SENTINEL_REDIS_PWD: Password untuk akun instans.
FAQ
Q: Mengapa saya mendapatkan error NOAUTH Authentication required setelah beralih dari pengaturan Redis Sentinel yang dikelola sendiri ke mode kompatibel Sentinel?
A: Aktifkan 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 global.
Jika instans Anda menjalankan versi Redis sebelum 6.0, lakukan upgrade client dan modifikasi kode Anda untuk menyertakan password autentikasi Sentinel sebelum mencoba koneksi lagi. Untuk informasi lebih lanjut, lihat bagian Koneksi Sentinel dengan password dalam topik ini.
Q: Mengapa saya menerima error Unknown sentinel subcommand 'MASTERS'?
A: Error ini menunjukkan bahwa versi minor instans Anda tidak mendukung perintah ini. Perbarui versi minor dan coba lagi.