竹笋

首页 » 问答 » 问答 » GitHub标星3w这份新手Redis
TUhjnbcbe - 2024/2/22 14:55:00

本篇内容讲解,非常适合新手学习,还不懂RedisCluster搭建过程的小伙伴,有福了,废话不多说,直接看内容吧,喜欢的话别忘了一键三连。

Redis集群演进过程

Redis单节点主从复制:复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。哨兵(Sentinel):在复制的基础上,哨兵实现了自动化的故障恢复。缺陷是写操作无法负载均衡;存储能力受到单机的限制。Cluster集群:通过分片集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,而且也具有故障迁移(主从切换)的功能,实现了较为完善的高可用方案。

科普特性

请对照上面的架构图

rediscluster不支持单机版本的16个默认数据库,仅有0数据库,select命令被禁用key空间被划分为个哈希槽,每个master节点负责处理个哈希槽的子集;跨slot的两个key可能不能做一些操作,比如sdiffsunion当集群没有发生重配,集群是稳定的每个master都可能有1个或多个slave节点,这些节点将在网络分区或者发生故障时尝试替代master节点,同时这些slave节点也可用于支撑大规模的读操作将key映射到哈希操作的算法是hash_slot=CRC16(16)mod例外:keyhashtags:{user}.following和{user}.followers两个键值将被放在一个哈希槽,因为只有子字符串user将被用来计算哈希槽。

Clusterbus:每个redis节点都有一个用于集群节点间通信的tcp端口(在原客户端访问端口之上加上),节点使用gossip协议和配置更新机制,以避免在正常情况下在节点之间交换过多的消息,因此交换的消息数量不是指数级的redis客户端可以向集群中每个节点发送查询(包括从节点),节点将会分析查询key,找到负责对应哈希槽的节点。当前节点能处理最好,不能处理将返回MOVEDerror、哈希槽、能处理的节点,客户端将自行定向到特定新节点查询。

一般情况下slave节点会将客户端请求重定向到负责对应哈希槽的master节点,但是为了支撑大规模读,可以给slave节点开启READONLY搭建RedisCluster

本文使用一个单物理机,搭建伪RedisCluster(3主3从)

创建redis-cluster目录,存放集群下载最新版redis-6.2.4,将bin目录下的可执行文件、redis.conf拷贝到同级目录redis01修改redis01目录下redis.conf配置:portcluster-enabledyes//之前被注释将redis01拷贝多个,形成redis02,redis02,redis04,redis05,redis06,修改对应redis.confport为

启动6个redis节点,使用start.sh脚本(chmod+xstart.sh)//每个启动命令后面的表示后台启动

准备组建redisclusterredis5+可以使用redis-cli特定命令来组建集群;redis3,4使用redis-trib.rb来协助组建。

使用redis-cli--cluster命令创建由6个节点组成的rediscluser,其中cluster-replicas1将为每个master节点创建slave节点(不带上这个cluster-replicas,会创建了6个master节点组成的rediscluster).

验证集群状态使用redis-cli-p-c登录节点(这里一定要-c表示连接的集群)使用clusternodes查看节点状态以上操作搭建了由3master3Slave形成的高可用rediscluster,节点角色由自动生成的nodes.conf文件维护

客户端实操

redis-cli--clustercallhost01FLUSHALL清空集群

redis-cli--clustercallhost01Keys*查询所有节点

如果觉得以上过程很繁琐,Redis官方提供了另外的工具,在utils目录下存在create-cluster脚本。

create-clusterstartcreate-clustercreate就会创建3mater3slave组成的rediscluster(首节点端口从开始),这样前置知识可能没有按部就班更清晰。总结

以上就是RedisCluster科普级别的知识,帮助大家快速全面了解RedisCluster,快速搭建RedisCluster。

需要Java学习资料的小伙伴,

1
查看完整版本: GitHub标星3w这份新手Redis