Tair (Redis OSS-compatible) menggunakan komponen layanan ketersediaan tinggi (HA) yang dikembangkan sendiri dan tidak bergantung pada Sentinel. Namun, untuk meningkatkan kompatibilitas instans dan mengurangi modifikasi kode, Tair (Redis OSS-compatible) menyediakan mode kompatibel Sentinel. Setelah mengaktifkan fitur ini, Anda dapat terhubung ke Tair (dan Redis Edisi Open-Source) dengan cara yang sama seperti saat terhubung ke open-source Redis Sentinel.
Pengenalan Redis Sentinel
Redis Sentinel menyediakan pemantauan, peringatan, dan layanan failover otomatis untuk instans master dan replika di open-source Redis. Banyak skenario bisnis yang menggunakan database Redis yang dikelola sendiri dan memerlukan keandalan tinggi menggunakan Sentinel. Untuk memfasilitasi migrasi database Redis ke cloud dalam skenario ini, Alibaba Cloud telah mengembangkan mode kompatibel Sentinel. Setelah mengaktifkan mode kompatibel Sentinel, Anda dapat menggunakan perintah terkait Sentinel berikut (Master name dalam perintah berikut harus tetap sebagai redis_master):
Perintah | Deskripsi |
SENTINEL sentinels | Mengevaluasi instans Sentinel dari Master tertentu dan status instans Sentinel tersebut. Sintaks berikut digunakan: SENTINEL sentinels redis_master
|
SENTINEL get-master-addr-by-name | Mengevaluasi alamat IP dan nomor port dari Master tertentu. Sintaks berikut digunakan: SENTINEL get-master-addr-by-name redis_master
|
Untuk informasi tentang dukungan perintah terkait Sentinel di versi berbeda, lihat Dukungan perintah Redis Edisi Open-Source.
Contoh koneksi
Setelah mengaktifkan mode kompatibel Sentinel, Anda dapat terhubung ke instans dengan dua cara: Jika akses tanpa kata sandi melalui virtual private cloud (VPC) diaktifkan untuk instans, Anda dapat terhubung ke instans dalam mode tanpa kata sandi melalui Sentinel. Jika akses tanpa kata sandi tidak diaktifkan, Anda perlu mengonfigurasi informasi autentikasi saat terhubung.
Koneksi tanpa kata sandi melalui Sentinel
Contoh berikut menunjukkan cara mengonfigurasi kode untuk terhubung ke Alibaba Cloud Redis dalam mode kompatibel Sentinel.
Spring Data Redis
Dalam contoh ini, Spring Data Redis 2.4.2 digunakan.
@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;
}
Deskripsi parameter:
master: nama SENTINEL, yang harus tetap sebagai redis_master.
sentinel: titik akhir VPC dan nomor port dari instans, dipisahkan oleh koma (,), seperti "r-bp10noxlhcoim2****.redis.rds.aliyuncs.com", 6379.
redis-py
Dalam contoh ini, Python 3.9 dan redis-py 4.3.6 digunakan.
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'))
Deskripsi parameter:
SENTINEL_HOST dan SENTINEL_PORT: titik akhir VPC dan nomor port dari instans.
SENTINEL_MASTER_NAME: nama SENTINEL, yang harus tetap sebagai redis_master.
Koneksi berbasis kata sandi melalui Sentinel
Contoh berikut menunjukkan cara mengonfigurasi kode untuk terhubung ke Alibaba Cloud Redis dalam mode kompatibel Sentinel.
Java
Contoh ini menggunakan versi minimum klien Java. Persyaratan versi klien adalah sebagai berikut:
Jedis 3.6.1 atau lebih baru.
Lettuce 6.3.0.RELEASE atau lebih baru.
Spring Data Redis 2.5.1 atau lebih baru. Anda juga perlu mengonfigurasi parameter spring.redis.sentinel.password.
Catatan Kami sangat menyarankan Anda untuk meningkatkan ke versi klien stabil terbaru. Untuk 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();
Deskripsi parameter:
masterName: nama SENTINEL, yang harus tetap sebagai redis_master.
sentinels.add/sentinelNodes: titik akhir VPC dan nomor port dari instans, dalam format r-bp10noxlhcoim2****.redis.rds.aliyuncs.com:6379.
dbPassword dan sentinelPassword: kata sandi akun instans. Format kata sandi bervariasi tergantung pada akun yang Anda pilih. Jika Anda lupa kata sandi, Anda dapat menyetel ulang. Untuk informasi lebih lanjut, lihat Ubah atau setel ulang kata sandi.
Catatan Akun default (akun bernama setelah ID instans): Masukkan kata sandi secara langsung.
Akun baru dibuat: Format kata sandi adalah <user>:<password>. Akun default juga mendukung metode autentikasi ini. Misalnya, jika akun kustom adalah testaccount dan kata sandi adalah Rp829dlwa, kata sandi harus dimasukkan sebagai testaccount:Rp829dlwa.
redis-py
Dalam contoh ini, Python 3.9 dan redis-py 4.3.6 digunakan.
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'))
Deskripsi parameter:
SENTINEL_HOST dan SENTINEL_PORT: titik akhir VPC dan nomor port dari instans.
SENTINEL_MASTER_NAME: nama SENTINEL, yang harus tetap sebagai redis_master.
SENTINEL_REDIS_PWD: kata sandi akun instans.
FAQ
T: Sebelumnya saya menggunakan mode Redis Sentinel yang dikelola sendiri. Setelah beralih ke mode kompatibel Redis Sentinel, saya menemui kesalahan NOAUTH Autentikasi diperlukan. Bagaimana cara menyelesaikan masalah ini?
J: Anda dapat mengaktifkan parameter #no_loose_sentinel-password-free-access (atur ke ya) untuk menerapkan koneksi tanpa kata sandi melalui Sentinel melalui alamat koneksi VPC tanpa mengaktifkan fitur bebas kata sandi VPC.
Jika instans Anda menjalankan Redis 6.0 atau lebih lama, tingkatkan klien Anda dan modifikasi beberapa kode untuk menambahkan kata sandi autentikasi Sentinel, lalu coba lagi. Untuk informasi lebih lanjut, lihat Koneksi berbasis kata sandi melalui Sentinel dalam topik ini.
T: Mengapa saya menerima kesalahan Unknown sentinel subcommand 'MASTERS'?
J: Versi minor lama tidak kompatibel dengan beberapa perintah. Perbarui versi minor dan coba lagi.