一 集群模式
1.1 redis的集群模式
Redis集群模式,实现数据集在多个节点进行共享,支持多个master节点。
Redis集群支持多个master,每个master节点又可以挂载多个slave;由于cluster自带sentinel的故障转移机制,内置高可以用的支持,无需要去使用哨兵模式。
客户端与redis的节点连接,不需要连接集群中所有的节点,只需要任意连接集群中的一个可用节点即可。
Redis集群不保证强一致性,这意味着在特定的条件下,redis集群可能会丢掉一些被系统收到的写入请求命令。
1.2 redis的哈希槽位slot的概念
Redis槽位(Slot)是Redis集群中的一个重要概念,它是一个0到16383之间的整数,用于表示一个数据分片。Redis集群将所有的键均匀分布在16384个槽位上,每个槽位存储一个或多个键。这种分片机制旨在将数据分散存储在多个节点上,以提高数据的并发访问能力和存储容量。
Redis槽位的主要作用是实现数据分片,从而支持Redis集群的横向扩展。通过将数据分散存储在多个节点上,Redis集群能够:
提高并发访问能力:多个节点可以同时处理请求,提高系统的吞吐量。
增强存储容量:随着节点的增加,集群的总存储容量也会相应增加。
实现负载均衡:数据均匀分布在各个节点上,避免单点过载。
1.3 redis的哈希槽位slot的作用
Redis集群中没有使用一致性hash,而是使用hash槽的概念,redis集群中有16384个哈希槽,每个key通过CRC16校验后对16384取模得到hash值,来决定存储到那个槽,集群中的每个节点负责一部分hash槽。
使用redis集群时我们将数据分散到多台redis实例上,每个实例上的数据为整个数据的一个分片。如下:
最大的优势:方便扩容和数据分派查找;无论添加或删除或改变某个节点的哈希槽的数量不会造成集群不可用状态。
1.4 redis的槽位映射的三种方式
Redis的slot的槽位映射,一般有3种模式:
1.哈希取模 hash(key/3);对机器节点数进行取模,缺点:新增机器或者宕机,需要重新计算。
2.一致性hash:一致性Hash算法是对2^32取模。缺点:数据的分布和节点的位置有关,因为这些节点不是均匀的分布在哈希环上的,所以数据在进行存储时达不到均匀分布的效果。即一致性hash算法存在数据倾斜问题。
3.hash槽:Redis集群并没有使用一致性hash而是引入了哈希槽的概念。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。HASH_SLOT = CRC16(key) mod 16384
1.5 为何redis的最大哈希槽为16384?
Redis集群的最大槽数设计为16384个是基于性能、资源利用和实际使用情况的综合考虑。这个数值既保证了集群的稳定性和性能,又避免了不必要的资源浪费。2的14方为此值。为什么 Redis 集群的最大槽数是 16384 个?_为什么redis集群的最大槽数是16384个-CSDN博客
二 集群模式 的搭建
2.1 redis的集群模式
集群模式架构图:3主3从
2.2 redis集群实例部署
由于环境资源限制,搭建3台虚拟机,在每台上使用两个不同端口进行区分,构建成6台机器。
1.IP:192.168.111.175+端口6381/6382
配置文件:vim /myredis/cluster/redisCluster6381.conf
bind 0.0.0.0 daemonize yes protected-mode no port 6381 logfile "/myredis/cluster/cluster6381.log" pidfile /myredis/cluster6381.pid dir /myredis/cluster dbfilename dump6381.rdb appendonly yes appendfilename "appendonly6381.aof" requirepass 111111 masterauth 111111 cluster-enabled yes cluster-config-file nodes-6381.conf cluster-node-timeout 5000 |
配置文件:vim /myredis/cluster/redisCluster6382.conf
bind 0.0.0.0 daemonize yes protected-mode no port 6382 logfile "/myredis/cluster/cluster6382.log" pidfile /myredis/cluster6382.pid dir /myredis/cluster dbfilename dump6382.rdb appendonly yes appendfilename "appendonly6382.aof" requirepass 111111 masterauth 111111 cluster-enabled yes cluster-config-file nodes-6382.conf cluster-node-timeout 5000 |
2.IP:192.168.111.172+端口6383/6384
配置文件:vim /myredis/cluster/redisCluster6383.conf
bind 0.0.0.0 daemonize yes protected-mode no port 6383 logfile "/myredis/cluster/cluster6383.log" pidfile /myredis/cluster6383.pid dir /myredis/cluster dbfilename dump6383.rdb appendonly yes appendfilename "appendonly6383.aof" requirepass 111111 masterauth 111111 cluster-enabled yes cluster-config-file nodes-6383.conf cluster-node-timeout 5000 |