快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → Redis分片集群

Redis分片集群

时间:2022-09-23 10:10:22人气:作者:快盘下载我要评论

redis分片集群


文章目录

Redis分片集群前言一、分片集群结构?二、搭建分片集群1.准备工作2.集群连接 三、集群操作和故障恢复四、集群伸缩五、故障转移


前言

假如redis容量不够;redis如何进行扩容?
redis主从和哨兵可以解决高可用;高并发读的问题;但是高并发写的问题如何解决?
使用分片集群可以解决上述问题。

一、分片集群结构?

分片集群特征;
·集群中有多个master;每个master保存不同的数据;
·每个master都可以有多个slave节点;
·master之间通过ping监测彼此健康状态;
·客户端请求可以访问集群任意节点;最终都会转发到正确节点。
Redis分片集群

二、搭建分片集群

分片集群需要的节点数量较多;这里搭建一个最小的分片集群;包含3个master节点;每个master节点包含一个slave节点;结构如下;

1.准备工作

1;制作6个实例;6379,6380,6381,6389,6390,6391
修改redis6379.conf配置文件如下;
Redis分片集群
2;再把内容复制到其他五个配置文件中去;
Redis分片集群
3;在各自的配置文件中修改各自的端口号;rdb文件名等等;就是把里面的所有的6379改为6380;;其他配置文件操作一样;

Redis分片集群
4;之后启动6个redis实例;
Redis分片集群
5;查看启动情况;
Redis分片集群
成功之后会生成结点文件;
Redis分片集群
结点文件的生成位置与自己设置的默认目录有关。
6;进入rb环境
先进入redis最开始安装的src中;
Redis分片集群
在进入redis-6.2.6中;
Redis分片集群
redis-6.2.6里面有一个src目录;进入这个目录;
Redis分片集群
在这个目录下执行命令;
Redis分片集群
注意如果redis没有设置密码和设置了密码;命令会有所不同;这里是设置了密码的情况。
执行命令后会出现;
Redis分片集群
执行命令后redis会自动合成集群;我们填入yes后;
Redis分片集群
到这一步集群已经完成。

2.集群连接

之前的连接;redis-cli -p 端口号
Redis分片集群
集群连接;redis-cli -c -p 端口号
-c;采用集群策略连接;设置数据会自动切换到相应的写主机。
Redis分片集群
cluster nodes;查看集群中结点的信息
Redis分片集群
可以看到master与slave的主从信息。

三、集群操作和故障恢复

1;redis cluster如何分配这六个结点?
一个集群中至少有三个主节点;
选项–cluster-replicas 1 表示希望为集群中的每个主节点创建一个从节点;
分配原则;尽量保证每个主数据库运行在不同的ip地址;每个从库和主库不在一个ip地址上。
2;散列插槽slots
Redis会把每一个master节点映射到0~16383共16384个插槽;hash slot;上;查看集群信息就能看到;
Redis分片集群
数据key不是与节点绑定而是与插槽绑定。redis会根据key的有效部分计算插槽;分两种情况;
· key中包含“{}”。且“{}”中至少包含一个字符;“{}”中的部分是有效部分;
· key中不包含“{}”;整个key都是有效部分
例如;key是num;那么久根据num计算;如果是{a}num;则根据a计算。计算方式是利用CRC16算法得到一个hash值;然后对16384取余;得到的结果就是slot值。
3;测试;
Redis分片集群
可以看到name计算出来的slot值是5798;而5798插槽在端口号为6780的主机上;所以进行了重定向。
总结;
Redis分片集群

四、集群伸缩

1、添加一个结点到集群
Redis分片集群
案例;
Redis分片集群
1;先创建一个redis6382.conf配置文件;把redis6379.conf的内容复制到里面;在里面把所有6379改为6382。;
Redis分片集群
2;启动端口号为6382的redis实例;
Redis分片集群
3;把6382实例加入到集群中;
Redis分片集群
查看集群中的节点信息;
Redis分片集群
可以看到已经成功加入;但是6382并没有任何插槽。
3;要把num存储到6382实例中;可以先查看num的插槽值;再把那插槽分配给6382实例;
Redis分片集群
可以看到num在端口号为6379的实例中并且slot是2765;只要把2765插槽分配到6382实例中;例如移动3000个;就可以把num存储到6382实例中;
使用reshard重新分片;
Redis分片集群
还需要告知数据接收和数据来源;如上图把6382的id复制到数据接收处;6379的id复制到数据来源处;最后完成done。
Redis分片集群
确定yes。
Redis分片集群
可以看到插槽0到2999已经移到6382端口的redis实例中了。
Redis分片集群
num已经在6382端口的redis实例中了;再把num的值set为10 完成。
Redis分片集群
2、删除集群中的一个结点
案例;删除6382这个实例
按照上述分片步骤先把6382上的插槽转移到其他结点上;
Redis分片集群
可以看到6382上面已经没有插槽了;在执行以下步骤;
Redis分片集群
forget 后面加上6382这个实例的id;再查看结点信息;
Redis分片集群
可以看到6382已经删除了。

五、故障转移

当集群中有一个master宕机会发生什么?
Redis分片集群

1、首先通过watch监控集群的状态;
Redis分片集群
Redis分片集群
2、再令某台主机宕机;例如令6380宕机;
Redis分片集群
查看集群状态;
Redis分片集群
可以看到6380的状态已经fail了;而6389成为了新的主机。;这里本来计划是6390成为新的主机的;是之前系统安排了6389作为6380的从机;所以6389成为了新的主机;
3、使6380再启动起来;
Redis分片集群
Redis分片集群
可以看到6380作为6389的slave加入到集群中了。
可以看到并不需要哨兵集群也能自动进行故障切换。
有时候需要手动进行故障转移
1、为什么?
比如集群中某台主机老化或者需要维护了;这时候可以启用一个新的节点;这个新节点性能比较好;让它作为这台主机的slave;手动让新节点去替换老化的主机;手动进行故障转移进行机器升级。
2、怎么做?
数据迁移;
Redis分片集群
案例;在6380这个slave节点执行手动故障转移;重新夺回master地位。
Redis分片集群
Redis分片集群

6380已经重新成为master了;而6389重新成为slave。

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。