Redis在集群时,你们比较关心的有二点: 1.高并发性性 2.高可用性redis
上一次讲redis集群时,只要集群节点的数量增长,就能够提升并发性。今天来聊聊redis 集群时的可用性。此次模拟生产环境中redis的节点崩溃或者失去链接,这个节点恰巧是master,验证集群的可用性.windows
测试场景 windows , 3个redis 节点 127.0.0.1:7001(slaver) ,127.0.0.1:7002(master) , 127.0.0.1:7003(slaver)。并发
首先,启动节点及哨兵文件,具体方法再也不详细说明,详见上一篇 谈一谈 redis 集群.高并发
7002做为master,咱们看一下7002的启动日志:测试
7002 完成对 7001 ,7003 的集群。.net
测试一下数据,首先在7002中,加了一条记录: yu3 lei3debug
查看7001,7003的数据:日志
2个slaver都是数据从无到有,集群已经完成。server
如今测试一下把 7002这个master down掉,看看会发生什么。blog
执行命令:redis-cli -p 7002 debug sleep 100
让7002这个主节点休息100秒。
这个时候主节点休眠的状况下测试redis集群是否能够工做。客户端试着向7001插入一条记录
刚开始查询一下redis内存,提示 链接停止了. 设想一下,为何client会断开,是由于master崩溃而断开吗?
我感受不像,redis server一直开着工做正常,仅仅是client断开,强制client 做一次reset. 接下来咱们重连 插入一条记录。
再来看一下7003:
一样也须要重连client, slave7001插入的记录在slave7003获取到了。
这时7002的休眠也结束了,看一下7002中的数据
7002这个原来的master获取到了7001slave的数据。
这证实了咱们的集群在master崩溃时,仍然能够工做的. redis集群的的可用性真的很强大.
看一下7001的server日志:
能够看出7001 经历了3个过程:1.做为slave,并从master7002同步了47字节的数据
2.发现访问不到master7002了
3. 成为master开始同步7003,过了大概106秒左右(咱们将7002休眠了100秒),
又开始同步7002.
看下7002 的server日志:
刚开始是master,后来断开了链接,最后成为了slave.
再看一下7003的log:
sentinal 7001日志:
sentinal 7002日志:
sentinal 7003日志:
日志比较多,能够大概看一下quorum, 这是动物园饲养员的技能。还有epoch, 更加肯定了。
此次日志不少,整理一下日志显示出来的结果。
3个redis 节点 7001 7002(master) 7003作集群。
7002 休眠100秒,7001成为新master ,7003仍是slave,7002 醒来时7001已经成为新一代的master,7002 再也不继续作master而成为slave .