4. 【Redis Cluster集群】redis cluster 多mster写入,读写分离,高可用

redis cluster,提供了多个master,
分布式存储:数据可以分布式存储到多个master上;
读写分离:每个master都带着slave,自动实现读写分离;
高可用:每个master如果故障,redis cluster可以自动将slave切换成master,以此实现redis cluster的高可用

1. 测试:多master写入 -> 海量数据的分布式存储

1.1 redis cluster海量数据的分布式存储原理

  1. 往redis cluster写入一个数据,可以将请求发送到任意一个master上去执行。

  2. 每个master都会根据key值计算对应的CRC16值,然后对16348个hash slot取模,得到key对应的hash slot,再通过hash slot找到对应的master。

  3. 如果对应的 master 就在自己本地的话, set k1 v1,k1这个key对应的master在自己本地的话,就自己处理掉好了。如果对应的 master 不在自己本地,是其他master的话,那么就会给客户端返回一个moved error,告诉你,应该到哪个master上去执行这条命令的写入。

2. 多master写入

什么叫做 多master写入?

多master写入,就是每条数据只能存在于一个master上,不同的master存储不同的数据,分布式数据存储;

举例:100w条数据,5个master,每个master就负责存储20w条数据,分布式数据存储

3. 测试:不同master各自slave读取->读写分离

3.1 slave 节点读取数据

在redis cluster中,如果你要在slave 读取数据,那么需要先执行 readonly 执行,才能 读取对应master写入的数据,redis cluster 的slave默认是不支持数据的读和写的

3.2 redis cluster 自动重定向

redis-cli -c启动,就会自动进行各种底层的重定向操作。

3.3 redis cluster 读写分离的缺点:

  1. redis cluster的核心理念:不是使用slave进行读写分离,而是使用 slave多高可用的,每个mater挂一两个slave,主要是做数据的热备,还有就是在master故障时的主备切换,实现高可用的。

  2. redis cluster默认不支持slave节点的读或者写的,跟我们手动基于replication搭建的主从架构不一样。

  3. 要在 slave 节点读取数据,要先执行 readonly 指定,再执行获取数据执行,才能读取到数据。

  4. redis cluster,是主从架构,虽然可以做读写分离,复杂了点,但是也可以做;但是jedis客户端最redis cluster读写分离支持不是很好,默认的话,读和写都是到master上去执行的。如果需要让jedis做redis cluster的读写分离的访问,可能还得自己去修改源代码,成本较高。

  5. redis cluster做缓存架构时,就没有所谓的读写分离架构,都和写都是到master去执行的。

3.4 redis cluster master可以任意扩展。

redis cluster 的架构下,实际上master就是可以任意扩展的,你如果要支持更大的读吞吐量,或者写吞吐量,或者数据量,都可以直接对master进行横向扩展,也可以实现支持更高的吞吐量。

4. 测试:redis cluster 自动故障切换,保证高可用性。

可以通过查看redis日志,查看节点的切换和挂载情况。

  1. 将其中的一个master杀掉,看他对应的slave节点是否能成功的切换成master。

  2. 将杀掉的master的进程重新启动起来,看是否会作为slave角色挂载到master上面去。

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐