上一篇 http://www.cnblogs.com/qinyujie/p/9029482.html, 主要讲解 redis cluster 集群 搭建,本篇主要讲解实验多master写入、读写分离、实验自动故障切换(高可用性),下面直接开始吧。html
上一篇咱们搭建完了redis cluster 集群,下面进行数据存储测试redis
当咱们set 数据的时候会发现以下图问题:架构
经过上图发现,当插入key一、key二、key3 时报错,它要求咱们到相应的master 节点去进行写入,没错,这就是多master写入,以上就验证了,实际的数据写入是要到相应的master 进行操做的,每一个master 均可以计算,而后将请求转发至真正的操做节点进行。分布式
根据上图redis 切换到 192.168.43.17:7003 进行key1 1 的写入,以下图测试
总结:redis cluster写入数据的时候,能够将请求发送到任意一个master上去执行,可是每一个 master 都会计算这个 key 对应的 CRC16 值,而后对16384个 hashslot 取模,找到 key 对应的 hashslot,根据 hashslot 寻找对应的master。若是对应的master就在本身本地的话,set key4 4,key4 这个 key 对应的 hashslot 就在本身本地,那么本身就进行写入了。可是若是计算出来的 hashslot 在其余 master 上,那么就会给客户端返回一个 moved error,告诉你,你获得哪一个 master 上去执行这条写入的命令。code
多master的写入保持每一个master均可以进行数据的写入,每条数据只能存在于一个 master 和相应的 slave 上,每条数据只能由对应的 master 负责。orm
上面说了,每次写入一条数据,若是不在本地 master ,还须要手动切换到对应的master 上去执行,这就至关麻烦了。能不能将手动的方式交给redis 自动切换执行呢 ?htm
redis-cli -h 192.168.43.16 -p 7001 -c // -c 表示将数据写入move err 手动切换的方式让 redis 自身自动去作blog
上图能够看出,redis 作了redirected 重定向,读取数据也是同样的。get
前面说过,redis cluster 支持读写分离,实际上这个概念在cluster 中已经不是那么重要了,由于水平扩容(多master就已经解决或者实现了 redis replication 主从架构 一主多从的读写分离效果),咱们在生产环境中都会发现,直接使用 master 进行读写了。固然redis cluster 仍是支持 slave 读的(默认是不支持slave节点读,在读的时候咱们须要先执行下 readonly
,以下图所示:
上图能够看出,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 集群自身具有了redis repliction + sentinal 哨兵 的故障切换功能,从而实现了高可用性。