


Penjelasan terperinci tentang pembinaan dan penggunaan kluster sharding redis
Pembelajaran yang disyorkan: Tutorial video Redis
Kata Pengantar
Redis boleh dikatakan digunakan dalam projek sebenar pembangunan Selalunya, dalam kluster redis yang biasa digunakan, kami bercakap tentang beberapa penyelesaian kluster yang biasa digunakan oleh redis Kluster yang berbeza sepadan dengan senario yang berbeza, dan kelebihan dan kekurangan pelbagai kluster diterangkan secara terperinci Bermula dari pembinaan gugusan redis sharded, mari kita bercakap tentang titik teknikal yang berkaitan dengan gugusan redis sharded secara terperinci
- Titik tunggal kegagalan; tulisan mesin (tulisan serentak tinggi) kesesakan ;
- Had kapasiti data storan mesin tunggal;
- Penskalaan automatik kluster;
- Kerosakan automatik di luar talian dan pemindahan kluster;
- Bina gambarajah seni bina kelompok
Persediaan
Dalam contoh ini, pelayan dengan memori 8G disediakan untuk kesan demonstrasi, dan tuan dan hamba akan dibahagikan melalui port
2. Muat turun terlebih dahulu Pakej pemasangan redis yang bagus;
Langkah pembinaan
1. Buat 6 fail direktori untuk menyimpan data setiap contoh redis
2. Cipta fail redis.conf dalam direktori semasa dengan kandungan berikutmkdir 7001 7002 7003 8001 8002 8003
port 6379 # 开启集群功能 cluster-enabled yes # 集群的配置文件名称,不需要我们创建,由redis自己维护 cluster-config-file /usr/local/soft/redis/6379/nodes.conf # 节点心跳失败的超时时间 cluster-node-timeout 5000 # 持久化文件存放目录 dir /usr/local/soft/redis/6379 # 绑定地址 bind 0.0.0.0 # 让redis后台运行 daemonize yes # 注册的实例ip replica-announce-ip 本机公网IP # 保护模式 protected-mode no # 数据库数量 databases 1 # 日志 logfile /usr/local/soft/redis/6379/run.log
echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf
4 Ubah suai redis.conf dalam setiap direktori dan tukar 6379 di dalamnya agar selaras dengan direktori
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf
Buka redis.conf secara rawak untuk melihat sama ada pengubahsuaian berjaya
4 >
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7001/redis.conf /usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7002/redis.conf /usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7003/redis.conf /usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8001/redis.conf /usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8002/redis.conf /usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8003/redis.conf
Melalui langkah di atas, 6 instance redis telah dibuka Namun, instance ini tidak membentuk gugusan Seterusnya, anda perlu melaksanakan perintah yang berkaitan untuk membentuknya menjadi gugusan
Arahan pada arahan di atas
redis-cli --cluster create --cluster-replicas 1 IP地址:7001 IP地址:7002 IP地址:7003 IP地址:8001 IP地址:8002 IP地址:8003
redis-cli --cluster atau ./redis-trib .rb: mewakili perintah operasi kluster;
buat: mewakili mencipta kluster; menjadi 1, dan jumlah bilangan nod ÷ (replika 1 ) ialah bilangan induk. Oleh itu, n nod pertama dalam senarai nod ialah induk, dan nod lain ialah nod hamba, secara rawak diperuntukkan kepada induk yang berbeza- Anda juga boleh melihat arahan kelompok melalui redis-cli --cluster; arahan bantuan; Selepas melaksanakan arahan, konsol menggesa contoh yang akan digunakan sebagai tuan dan yang mana sebagai hamba
Maklumat berikut boleh diperolehi daripada log keluaran:
yang mempunyai nombor port 8001, 8002 dan 8003 adalah nod hamba; nombor 7001, 7002 dan 7003 ialah nod induk, Setiap satu diperuntukkan julat nombor slot tertentu, iaitu: [0-5460], [5461-10922], [10923-16383], iaitu, sejumlah 16384 slot adalah diperuntukkan;
- 2. Semak status kluster
通过这个命令,可以清楚的看到集群中各个实例节点的主从状态,实例ID(唯一身份标识),槽位区间等信息
Redis散列插槽说明
其实对redis分片集群稍有了解的同学应该知道,redis分片集群在逻辑上将集群中的所有节点构成了一块完整的内存空间,数据写入进来后,具体存放到哪个节点呢?所以集群引入了一个逻辑尚的插槽概念,即将集群划分为16384个槽位,集群中的每个节点占据一部分槽位数(这个日志中可以看出来);
那么当某个具体的key写入的时候,集群将会通过一定的算法,将要写入的数据路由到指定的插槽上去;
这里有个点需要注意,数据key不是与节点绑定,而是与插槽绑定。
redis集群会根据key的有效部分计算插槽值,分两种情况:
- key中包含"{}",且“{}”中至少包含1个字符,“{}”中的部分是有效部分;
- key中不包含“{}”,整个key都是有效部分;
举例来说:key是num,那么就根据num计算,如果是{应用名称}num,则根据“应用名称”计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值
下面不妨看下效果
通过上面的演示可以发现,经过集群计算的key将会分配到不同的插槽上,也就是说,key是与插槽绑定,而不是与某个节点绑定,想想为什么会这样呢?
思考下面这个需求
如何将同一类数据固定的保存在同一个Redis实例?
简单来说,如果key的分配完全没有规则的话,当涉及到某个业务类的数据对应的key随机分配到不同的节点上面时,取值的时候就会出现像上面的重定向跨节点的问题,一定程度上提升性能;
解决办法
这一类数据使用相同的有效部分,例如key都以{业务ID}为前缀
集群伸缩(添加节点)
reids的cluster模式下,有一个比较强的功能就是集群的伸缩能力,即在现有的集群基础上,可以根据实际的业务需求,进行集群的伸缩,下面来演示下给上面的集群添加一个新节点的步骤;
1、在当前目录下拷贝一个目录
2、修改配置文件的端口
sed -i s/6379/7004/g 7004/redis.conf
Salin selepas log masuk3、启动这个实例
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7004/redis.conf
Salin selepas log masuk4、使用下面的命令将7004实例假如集群
redis-cli --cluster add-node IP:7004 IP:7001
Salin selepas log masuk5、再次查看集群状态
redis-cli -p 7001 cluster nodes
Salin selepas log masuk通过上面的状态信息发现,7004这个节点虽然加入了集群,并成了master,但是集群并没有给它分配任何的插槽
6、分配插槽
分配插槽的基本思路是,从现有的某个节点上迁移部分插槽到新的节点即可,执行下面的命令进行插槽分配
redis-cli --cluster reshard 101.34.23.80:7001
Salin selepas log masuk执行命令后将出现下面的提示,这里输入你要转移的插槽数量
将7004对应的实例ID输入即可
输入yes后开始移动插槽
移动完成后,再次查看集群状态,这时候7004对应的节点就分配到了从0 ~ 500的数量的插槽
故障转移
redis的cluster模式的集群,还具备一定的故障转移能力,比如在上面的架构模式下,当集群中的某个master节点宕机之后,会出现什么情况呢?下面我们来模拟下这个过程,看看效果如何
1、使用watch命令监控下集群的状态
通过这个命令可以实时查看集群的动态日志变化
watch redis-cli -p 7001 cluster nodes
Salin selepas log masuk2、手动将7002实例的master宕机
redis-cli -p 7002 shutdown
Salin selepas log masuk从上面的监控日志不难发现,当7002挂掉后,过了一会儿与集群以及它的从节点8003失去了联系,然后8003这个节点升级为master节点;
3、手动将7002实例启动起来
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7002/redis.conf
Salin selepas log masuk再次分析日志,可以看到这时候7002只能以slave的身份加入了集群,事实上在某些情况下,我们仍然希望这个宕机的节点恢复后依然是主节点,这该怎么办呢?这就涉及到了手动故障转移,主要操作步骤如下:
- 使用redis-cli连接7002节点;
- 执行cluster failover命令;
在上面执行之后的情况下,7002是一个slave节点
执行 CLUSTER FAILOVER 命令,观察日志动态变化,通过日志变化,可以看到,命令执行完毕后,7002很快就变成了master,而8003成了slave;
通过以上步骤就完成了redis的cluster模式下的故障转移的过程
使用redistemplate访问分片集群
1、引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
Salin selepas log masuk2、将配置文件中的集群地址修改成下面这样即可
spring: redis: cluster: nodes: - 集群IP:7001 - 集群IP:7002 - 集群IP:7003 - 集群IP:7004 - 集群IP:8001 - 集群IP:8002 - 集群IP:8003
Salin selepas log masuk至于具体的代码部分,可以参考下面的这个测试案例
@Autowired private RedisTemplate<String,String> redisTemplate; //localhost:8083/set?key=b&value=123 @GetMapping("/set") public void set(@RequestParam String key,@RequestParam String value){ redisTemplate.opsForValue().set(key,value); } //localhost:8083/get?key=b @GetMapping("/get") public String get(@RequestParam String key){ return redisTemplate.opsForValue().get(key); }
Salin selepas log masuk推荐学习:Redis视频教程
Atas ialah kandungan terperinci Penjelasan terperinci tentang pembinaan dan penggunaan kluster sharding redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Redis menggunakan satu seni bina berulir untuk memberikan prestasi tinggi, kesederhanaan, dan konsistensi. Ia menggunakan I/O multiplexing, gelung acara, I/O yang tidak menyekat, dan memori bersama untuk meningkatkan keserasian, tetapi dengan batasan batasan konkurensi, satu titik kegagalan, dan tidak sesuai untuk beban kerja yang berintensifkan.

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

Cara Mengosongkan Data Redis: Gunakan perintah Flushall untuk membersihkan semua nilai utama. Gunakan perintah flushdb untuk membersihkan nilai utama pangkalan data yang dipilih sekarang. Gunakan Pilih untuk menukar pangkalan data, dan kemudian gunakan FlushDB untuk membersihkan pelbagai pangkalan data. Gunakan perintah DEL untuk memadam kunci tertentu. Gunakan alat REDIS-CLI untuk membersihkan data.

Untuk melihat semua kunci di Redis, terdapat tiga cara: Gunakan perintah kunci untuk mengembalikan semua kunci yang sepadan dengan corak yang ditentukan; Gunakan perintah imbasan untuk melangkah ke atas kunci dan kembalikan satu set kunci; Gunakan arahan maklumat untuk mendapatkan jumlah kunci.

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

Langkah -langkah untuk memulakan pelayan Redis termasuk: Pasang Redis mengikut sistem operasi. Mulakan perkhidmatan Redis melalui Redis-server (Linux/macOS) atau redis-server.exe (Windows). Gunakan redis-cli ping (linux/macOS) atau redis-cli.exe ping (windows) perintah untuk memeriksa status perkhidmatan. Gunakan klien Redis, seperti redis-cli, python, atau node.js untuk mengakses pelayan.
