redis高可用集群架构总结

                                                                  **Redis集群总结**

下面整体梳理一下这些年来对redis这块的部署方面的总结,只是个人经验之谈,请多多指教。

总结了下这些年来的redis项目中遇到的架构,大致可以分为如下几个:

1.单体的redis
2.Redis主从(服务出问题需要运维来手动进行主从切换)
3.Redis-哨兵机制的主从(解放了运维的部分工作,redis哨兵替代了运维,对redis主从集群进行健康监控和故障迁移)
4.Redis-cluster集群(3.0以后的版本,一般建议用5.0以后的,因为支持的cli命令更多,对于扩展集群收缩集群都更方便)

比较4总场景
1.第一种就是单实例redis,适合非常简单而且可用性依赖不强的系统使用。
2.第二种就是加了一个主从进行可用性升级,但是本质上还是一个master在服务。
3.第三种只是比第二种解放了运维的手动工作的烦恼,本质上并没什么太大的优点。
4.第四种它是redis自己出的一套高可用的集群方案redis-cluster.
原理:
大致原理就是把redis集群拆分为N个子集群(至少3个),每个子集群都会有一个且仅有一个master和至少1个slaver(这个子集群里的master和slave不是通过哨兵的方式,它是redis-cluster版本自带的它内部已经实现了主从同步和故障迁移),这些子集群共享16384个数据槽(只是用来标记数据是存在哪个集群里用的一种数学算法)默认子集群平均分配,比如Key=hello,那么这个set动作放在哪个子集群里就是 crc16hash(key)%16384=具体的数据槽,从而决定放在哪个子集群里。
其实这里我们不管从哪个redis里进入都是以集群的方式访问,它内部会根据你的key计算的hash槽的值自动给你rewrite到指定的数据所在的集群里找数据返回给你。这个其实感觉淡化了master,slave。感觉这个比较好

水平扩展子集群和收缩集群,redis-cluster会将数据同步迁移(这点很重要)。

Redis-cli cluster --help 可以查询到集群用的命令(创建集群,meet集群节点关系,分配槽等,在5.0版本以后这些动作可以一条命令搞定)

下面针对第四套方案画一个大致的集群架构图:

redis高可用集群架构总结

猜你喜欢

转载自blog.51cto.com/3131854/2656491