网站优化的监测评估,金融网站的设计,工程招标信息网,赤峰市做网站建设的公司redis的分片集群模式
1 主从哨兵集群的问题和分片集群特点
主从哨兵集群可应对高并发写和高可用性#xff0c;但是还有2个问题没有解决#xff1a; #xff08;1#xff09;海量数据存储 #xff08;2#xff09;高并发写的问题 使用分片集群可解决#xff0c;分片集群…redis的分片集群模式
1 主从哨兵集群的问题和分片集群特点
主从哨兵集群可应对高并发写和高可用性但是还有2个问题没有解决 1海量数据存储 2高并发写的问题 使用分片集群可解决分片集群的特点 1集群中有多个master每个master保存不同的数据。实现海量数据存储 2每个master都可以有多个slave节点。实现高并发读 3master之间通过ping检测彼此健康状态。替代主从集群中的哨兵多个master认为某个master客观下线可在每个master和自己的slave节点之间进行主从切换满足高可用性 4客户端请求redisTemplate可以访问集群任意节点最终都会被转发到正确的节点。 2 搭建redis分片集群
分片集群需要的节点数较多搭建一个最小的分片集群包含3个master节点每个master节点包含一个slave节点。采用一主一从模式总共3个master和3个slave节点。 可在同一个虚拟机中开启6个redis实例模拟分片集群。
编写redis.conf文件
1分别启动6个redis
2创建集群
# 分片集群操作相关的命令
redis-cli --cluster help# 创建集群
redis-cli --cluster create --cluster-replicas 1 节点ip:端口号 节点ip2:端口号 ...... 节点ip6:端口号create创建集群 –cluster-replicas 1指定集群中每个master的副本个数为1节点总数6除以11 3 说明maste的数量为3因此节点列表的前3个就是master节点其余是slave节点随机分配到不同的master上。
# 查看集群状态
redis-cli -p 端口号 cluster nodes
## 展示各个节点3 分片集群中的散列插槽
散列插槽设计目的有利于数据的转移
redis会把每一个master节点映射到0~16383共16384个插槽hash slot上查看集群信息时就能看到每一个master节点都会占用一部分的插槽。 数据key不是与节点绑定的而是与插槽绑定。redis会根据key的有效部分计算出插槽值有以下2种情况 1key中包含“{}”且“{}”中至少包含1个字符“{}”中的部分是有效部分 2key中不包含“{}”整个key都是有效部分。
例如key是num就会根据num计算如果是{itcast}num则根据itcast计算。计算方式是利用CRC16算法得到一个hash值然后对16384取余取余的结果始终在0~16383中间得到的结果就是slot值。
# 使用集群模式 连接redisset值-c
redis-cli -c -p 7001set a 1的时候 a的计算结果的slot插槽等于15495会自动跳转到存储到这个redis的散列插槽中。
如何实现将某一类数据都存储到指定的redis的主节点上
这一类数据可以使用相同的有效部分例如key都以{typeId}为前缀。
4 分片集群中的集群伸缩
集群伸缩增加和删除集群中节点
向集群中增加一个新的master节点并向num10
需求 将已有的那个redis实例的插槽移动到新增master节点的插槽中将已有的那个redis实例下线如服务器老登
#
redis-cli --cluster --help
# 默认是master节点当然再在后面使用指定是master还是slave以及是谁的slave添加新的redis实例节点默认是没有插槽值的 在connected后面的是slot插槽
redis-cli --cluster add-node 新增节点的ip:端口号 redis分片集群中已有的ip:端口号# 重新分片 reshard 从其他节点的插槽中移到指定节点的部分插槽值 按照提示一步一步操作 注意填入redis实例的id可使用cluster nodes查看
redis-cli --cluster reshard5 分片集群中的故障转移
其中一个master宕机可以主动停机–自动故障转移
# 停机后 该节点断开连接 从节点变为master节点 该节点重启后变为slave节点
redis-cli -p 端口号 shutdown手动故障转移一个redis实例节点服务器老旧需要升级–数据迁移
将某个slave节点机器替换现在的master节点 在slave节点的机器上执行cluster failover命令
# 可让当前slave节点成为master节点之前的master节点变为slave节点
cluster failover6 redisTemplate访问分片集群
1引入redis的starter依赖
2配置文件中配置redis分片集群的每个节点的地址 3配置主从读写分离