redis cluster概述
- redis cluster提供了多个master节点,数据可以存储在多个master节点上;
- 每个master都有一个slave,配置成读写分离
- 如果一个master发生故障,就会自动将其slave切换成master
redis cluster的基本功能简介
1、多master写入实现海量数据的分布式存储
- 在redis cluster写入数据的时候,其实是将请求发送到任意一个master上去执行。
- 每个master都需要计算这个key对应的CRC16值,然后对16384个hashslot取模,从而找到该key对应的hashslot,以及hashslot对应的master。
- 如果对应的master就在本服务器master上,执行命令set mykey1 v1后,mykey1这个key对应的hashslot就在本服务器master上自己处理了。
- 如果计算出来的hashslot在其他master上,那么就会给客户端返回一个moved error,让客户端去其他master上去执行这条命令。
多master写入
多master写入涉及分布式的数据存储,每条数据只能存在于一个master上,不同的master负责存储不同的数据。
如果100w条数据写入到5个master,那么每个master就只需负责存储20w条数据。
redis cluster可以写到任意master,任意master计算key的hashslot以后,通知client重定向路由到其他mater去执行,这就是分布式存储的一个经典的做法。
多master读写分离
在redis cluster多master读写分离架构中,如果要在slave中 读取数据,那么需要readonly指令。
redis-cli -h 192.168.201.34 -p 7004
get mykey1
(error) MOVED 1860 192.168.201.33:7001
192.168.201.34:7004> readonly
OK
192.168.201.34:7004> get mykey1
"111"
redis-cli -c启动,就会自动进行各种底层的重定向的操作
redis-cli -h 192.168.201.33 -p 7001 -c
192.168.201.33:7001> set mykey6 666
-> Redirected to slot [14243] located at 192.168.201.35:7005
OK
192.168.201.35:7005> get mykey6
"666"
redis cluster读写分离架构的限制性:
- 默认情况下,redis cluster核心理念就是用slave做高可用,每个master挂一两个slave,主要负责数据的热备,以及master故障时的主备切换;
- redis cluster默认不支持slave节点读和写的,这跟基于replication搭建的主从架构不一样:
因此,在slave节点上设置readonly指令,才能执行get命令在slave node进行读取; - redis cluster支持主从架构,也可以做读写分离但是比较复杂。jedis客户端对redis cluster的读写分离支持不是太好;
- 默认的话就是读和写都到master上去执行;
- 如果jedis做redis cluster读写分离的处理,需要修改一下jedis的源码:做一个redis cluster的读写分离的访问api。
总结
综上所述,redis cluster已经没有读写分离的概念:
- 首先,读写分离通过建立一主多从的架构,横向任意扩展slave节点去支撑高并发的读吞吐量;
- 但是在redis cluster的架构下,master节点是可以任意扩展的,如果要支撑更大的读写吞吐量,只需要对master节点进行横向扩展。
网友评论