首页 技术 正文
技术 2022年11月24日
0 收藏 381 点赞 4,388 浏览 1670 个字

  

上一篇http://www.cnblogs.com/qinyujie/p/9029482.html, 主要讲解 redis cluster 集群 搭建,本篇主要讲解实验多master写入、读写分离、实验自动故障切换(高可用性),下面直接开始吧。

上一篇我们搭建完了redis cluster 集群,下面进行数据存储测试

多master写入 – 海量数据的分布式存储

当我们set 数据的时候会发现如下图问题:

 redis cluster 集群畅谈(二)多master写入数据问题

通过上图发现,当插入key1、key2、key3 时报错,它要求我们到相应的master 节点去进行写入,没错,这就是多master写入,以上就验证了,实际的数据写入是要到相应的master 进行操作的,每个master 都可以计算,然后将请求转发至真正的操作节点进行。

根据上图redis 切换到 192.168.43.17:7003 进行key1 1 的写入,如下图

 redis cluster 集群畅谈(二)move err

总结:redis cluster写入数据的时候,可以将请求发送到任意一个master上去执行,但是每个 master 都会计算这个 key 对应的 CRC16 值,然后对16384个 hashslot 取模,找到 key 对应的 hashslot,根据 hashslot 寻找对应的master。如果对应的master就在自己本地的话,set key4 4,key4 这个 key 对应的 hashslot 就在自己本地,那么自己就进行写入了。但是如果计算出来的 hashslot 在其他 master 上,那么就会给客户端返回一个 moved error,告诉你,你得到哪个 master 上去执行这条写入的命令。

多master的写入保持每个master都可以进行数据的写入,每条数据只能存在于一个 master 和相应的 slave 上,每条数据只能由对应的 master 负责。

上面说了,每次写入一条数据,如果不在本地 master ,还需要手动切换到对应的master 上去执行,这就相当麻烦了。能不能将手动的方式交给redis 自动切换执行呢 ?

redis-cli -h 192.168.43.16 -p 7001 -c // -c 表示将数据写入move err 手动切换的方式让 redis 自身自动去做

 redis cluster 集群畅谈(二)move err redis 自动切换

上图可以看出,redis 做了redirected 重定向,读取数据也是一样的。

slave数据读取 – 读写分离

前面说过,redis cluster 支持读写分离,实际上这个概念在cluster 中已经不是那么重要了,因为水平扩容(多master就已经解决或者实现了 redis replication 主从架构 一主多从的读写分离效果),我们在生产环境中都会发现,直接使用 master 进行读写了。当然redis cluster 还是支持 slave 读的(默认是不支持slave节点读,在读的时候我们需要先执行下 readonly,如下图所示:

  • 先看下 192.168.43.16:7001 对应的 slave 是啥

 redis cluster 集群畅谈(二)查看 info Replication 信息

  • 192.168.43.16:7002 slave 上读取数据

 redis cluster 集群畅谈(二) slave 读取 master 写入的数据

上图可以看出,redis cluster 默认slave 也是不能读的,如果要读取,需要执行 readonly,就可以了。

注意:在redis cluster的核心的理念里,slave 主要是用做高可用的,每个master挂一两个slave,主要是做数据的热备,还有master故障时的主备切换,实现高可用的。

自动故障切换 – 高可用性

查看集群信息

redis-trib.rb check 192.168.43.16:7001

下面我们来测试将 192.168.43.16:7001 master kill 掉,看看 192.168.43.16:7002 slave 是否自动切换为master,如下图所示:

 redis cluster 集群畅谈(二) kill 前  redis cluster 集群畅谈(二)kill 后  redis cluster 集群畅谈(二) 192.168.43.16:7001 重新启动后,变为了 slave

通过上图可以看出,redis cluster 集群自身具备了redis repliction + sentinal 哨兵 的故障切换功能,从而实现了高可用性。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,943
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,469
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,283
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,098
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,729
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,766