Redis集群

本文详细介绍了Redis集群的各个方面,包括数据分区、高可用性、搭建步骤以及集群设计方案。通过手动或使用ruby脚本快速搭建3主3从的Redis集群,并解释了节点通信和数据分区的哈希策略。此外,还讨论了集群的高可用性和数据分布策略,以及如何根据业务需求选择合适的节点数量。
摘要由CSDN通过智能技术生成
Redis数据类型和常用配置https://blog.csdn.net/projectNo/article/details/119733596
Redis发布订阅和事务https://blog.csdn.net/projectNo/article/details/119818581
Redis持久化https://blog.csdn.net/projectNo/article/details/119861861
Redis主从复制和哨兵模式https://blog.csdn.net/projectNo/article/details/119861873
Redis集群https://blog.csdn.net/projectNo/article/details/119893021

集群

1、简介

集群即Redis Cluster,集群是有多个节点组成,Redis数据分布在这些节点中。集群的节点分为主节点和从节点,主节点负责读写请求和集群信息的维护,从节点维护主节点的数据和状态信息。

2、作用

  • 数据分区(分片):集群将数据分散到多个节点,突破Redis单击内存问题,存储容量增加;每个主节点都可以提供读写服务,提升响应能力。
  • 高可用:集群支持主从复制,可以故障自动转移;即使任一节点主从都故障了也可以对外提供服务。

3、集群搭建

我们启动六个节点,3主3从,为了方便所有节点在一台服务器上启动,以端口号区分,三个主节点端口号:6379/6380/6381,三个从节点端口号6389/6390/6391。

(1)在配置文件中通过参数cluster-enabled yes开启集群,cluster-config-file “”指定集群配置文件。

配置文件redis-6379.conf:

port 6379
cluster-enabled yes
cluster-config-file "node-6379.conf"
logfile "log-6379.log"
dbfilename "dump-6379.rdb"
daemonize yes

其他五个节点类似,然后启动Redis

redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf
redis-server redis-6389.conf
redis-server redis-6390.conf
redis-server redis-6391.conf

(2)节点启动后都是独立的,需要通过节点握手组成一个节点网络,使用cluster meet {ip} {port}命令组网。

用redis-cli info server查看单机模式redis_mode:standalone,集群下用redis-cli -p 6379 info server查看redis_mode:cluster。

节点握手:

cluster meet 192.168.1.1 6379
cluster meet 192.168.1.1 6380
cluster meet 192.168.1.1 6381
cluster meet 192.168.1.1 6389
cluster meet 192.168.1.1 6390
cluster meet 192.168.1.1 6391

执行完成后,可以用cluster node在任一节点查看所有节点。

(3)分配槽,槽用来实现分区,如果不分配槽,则集群处于下线状态(可通过cluster info命令查看cluster_state),集群的槽有16384个,使用cluster addslots命令分配槽。

redis-cli -p 6379 cluster addslots {0..5461}
redis-cli -p 6380 cluster addslots {5462..10922}
redis-cli -p 6381 cluster addslots {10923..16383}

(4)指定主从关系

集群中指定主从关系不用slaveof命令,而是用cluster replicate命令,参数是主节点id。通过cluster nodes获取3个主节点id。然后执行:

redis-cli -p 6389 cluster replicate be816eba968bc16c884b963d768c945e86ac51ae
redis-cli -p 6390 cluster replicate 788b361563acb175ce8232569347812a12f1fdb4
redis-cli -p 6391 cluster replicate a26f1624a3da3e5197dde267de683d61bb2dcbf1

此时执行cluster node查看节点状态,就可以看到主从节点已经建立。至此集群搭建完毕。

可以使用ruby脚本搭建集群代替上面(2)-(4)步:

Redis已经集成了ruby,用redis-cli --cluster create --cluster-replicas 1 [ip port]来搭建,-replicas 1意思采用一主一从的策略。

redis-cli --cluster create --cluster-replicas 1 192.168.11.101:6379 192.168.11.101:6380 192.168.11.101:6381 192.168.11.101:6389 192.168.11.101:6390 192.168.11.101:6391

会自动组网握手、平均分配槽并且指定主从关系。

4、集群设计方案

  • 高可用:根据故障转移原理,至少3个主节点才能完成故障转移,且2个主节点不应该在同一台物理机上,主节点和从节点也不应该在同一台物理机上,因此高可用集群至少6个节点。
  • 数据量和访问量:估算应用所需的数据量和访问总量,结合每个主节点的容量和能承受的访问量来计算主节点个数。
  • 节点数量限制:官方给出节点限制1000,主要考虑节点通信带来的消耗。
  • 适度冗余:在不影响集群服务的情况下增加节点,不用太大。

5、集群原理

(1)数据分区:

是集群的核心功能,数据分区有顺序分区和哈希分区等,其中哈希分区由于其随机性使用广泛;集群的分区方案便是哈希分区的一种。

哈希分区:对数据的特征值(如key)进行哈希,然后根据哈希值决定数据落在哪个节点的槽。

(2)节点通信:

两个端口:在哨兵模式节点分为数据节点和哨兵节点;在集群中所有节点都存储数据也都参与集群状态维护,所有集群中的每个节点都提供了两个TCP端口:

  • 普通端口:即前面指定的6379端口,为客户端提供服务,节点数据迁移也会使用。
  • 集群端口:普通端口号+10000(10000值是固定的无法改变),如16379.集群端口用于搭建集群、增删节点、故障转移等操作时节点的通信,不要使用客户端连接集群接口。

集群中的节点采用固定频率(每10秒)的定时任务进行通信相关操作:判断是否需要发送消息及消息类型、确定接收节点、发消息等。集群中如果状态发生了变化,如增删节点、槽状态变更,通过节点的通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值