在哨兵模式中,仍然只有一个Master节点,当并发写请求较大时,无法缓解写的压力,在3.0版本Redis-Cluster出现解决了这个问题
Redis-Cluster集群特点:
1)由多个Redis服务器组成的分布式网络服务集群
2)集群之中由多个Master主节点,每一个主节点都可读可写
3)节点之间相互通信,两两相连
4)Redis集群无中心节点
在Redis-Cluster集群中,可以为每一个主节点添加从结点,主节点和从结点遵循主从模型的特性(添加从节点可以扩展系统的读性能)
Redis-Cluster集群的故障转移机制:
Redis-Cluster集群的故障转移机制和Redis Sentinel基本一样,区别在于Redis-Cluster集群的故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel
Redis-Cluster集群分片策略:
分片策略主要是解决key存储位置的
集群将整个数据库分为16384个槽位(solt),所有的key-value数据都存储在这些solt的某一个中,而一个槽位可以存放多个数据,key的槽位计算公式为:slot_number=crc16(key)%16384,其中crc16为16位循环冗余校验和函数。
集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态(反之则处于瘫痪状态),并开始处理客户端发送的数据命令请求。
Redis-Cluster集群redirect
由于Redis集群无中心节点,请求会随机发给任意主节点:
主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误;
客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求。
配置流程:
1.环境搭建
1.1安装ruby环境
1.2安装ruby和redis的接口程序,利用xftp将redis-3.0.0.gem拷贝至/usr/local下安装
2.集群的规划
由于物理机数量有限,本文将采用同一台主机构建一个伪分布式集群,以不同端口表示不同的redis节点:
主节点:192.168.93.4:7001 192.168.93.4:7002 192.168.93.5:7003
从结点:192.168.93.4:7004 192.168.93.4:7005 192.168.93.5:7006
在/usr/local/下创建redis-cluster目录,7001~7006
3.将redis解压路径下的配置文件redis.conf,依次拷贝到7001~7006目录中,并修改(port、bind、protected-mode、cluster)
建议配置(daemonized yes 后台启动,logfile /usr/local/redis/redis-cluster/700X/node.log日志输出位置)
7001的配置
其他节点配置同7001
4.指定各个节点的配置文件启动客户端
5.执行创建集群的命令(进入redis安装源码src下)
创建成功
利用客户端查看集群信息
-c表示以集群方式连接redis,
-h指定ip地址,
-p指定端口号
cluster nodes 查询集群结点信息;
cluster info 查询集群状态信。
添加主节点:
下面是添加一个master主节点添加7007节点,添加一个“7007”目录作为新节点,配置信息同前面7001~7006配置
通过客户端7007发现已加入到集群中
为7007节点分配hash槽,才能存储数据
1)先连上集群
2)输入hash槽的数量
3)输入7007节点的id值
4)输入分配槽点的源节点id
输入all则为从每一主节点中分配
5)同意分配计划,或取消重新分配
通过客户端查看集群状态
添加从节点(先配置7008的基础信息,同上7001~7007)
到src目录下添加从节点
添加成功
通过客户端查看集群状态
原文地址:https://www.cnblogs.com/lch-Hao/p/10961617.html