哨兵模式的缺陷
在哨兵模式中,仍然只有一个Master节点。当并发流量较大时,哨兵模式并不能缓解压力,集群从redis3.0应需而生。
集群实现了主从同步,读写分离。
搭建集群最少需要六台机器,三主三从(主从都可以扩展)
集群故障转移
集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,master宕机后由slave顶上,所以集群不必另外使用Redis Sentinel,当主节点从新恢复后成为主节点的从节点。
分片策略
集群将整个数据库分为16384个槽位slot,所有key-value数据都存储在这些slot中的某一个上。一个slot槽位可以存放多个数据,key的槽位计算公式为:slot_number=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数。当加入新的master节点 会从已有
的slot分配给master。
搭建
1、移除centos7自带低版本的ruby
yum remove ruby
yum install ruby
yum install rubygems
2、安装ruby和redis的接口程序,拷贝redis-3.0.0.gem至/usr/local下,执行安装:
gem install /usr/local/redis-3.0.0.gem
3、创建配置目录,单台主从共三台机器或者使用伪分布式
在/usr/local/redis下创建redis-cluster目录,其下创建7001、7002。。7006目录
4、创建配置文件
port 700X
# 开放其他IP访问,集群是必须的
bind 0.0.0.0
cluster-enabled yes
daemonized yes
logfile /usr/local/redis/redis-cluster/700X/node.log
替换X为对应端口,每个文件夹下都复制一份该配置
5、指定配置文件启动Redis
redis-server /usr/local/redis/redis-cluster/7001/redis.conf
6、 执行创建集群命令
进入到redis源码存放目录redis/redis-4.10.3/src下,执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境
./redis-trib.rb create --replicas 1 192.168.200.228:7001 192.168.200.228:7002 192.168.200.228:7003 192.168.200.228:7004 192.168.200.228:7005 192.168.200.228:7006
7、登录集群, -c 表示为集群-cluster
./redis-cli -c -h 127.0.0.1 -p 7001
集群命令:
cluster nodes 查询集群结点信息;
cluster info 查询集群状态信。
springboot配置
spring:
redis:
#数据库索引
cluster:
nodes: 172.16.34.53:7001,172.16.34.53:7002,172.16.34.54:7003,172.16.34.54:7004,172.16.34.55:7005,172.16.34.55:7006
password: ENC(5sqmAB/at8y9K3ckpQg/PNY0pXTSCobW)
commandTimeout: 10000
jedis:
pool:
max-idle: 5000
max-wait: 2000
min-idle: 5
max-active: 1000