codecamp

Redis quorum测试

在一个如下的四节点环境中,

如果sentinel monitor的quorum设置为3,则宕机一台后再宕机,此时还剩余两台,存在两个sentinel,两个slave。由于quorum为3,而必须有>=max(quorum, num(sentinels)/2 +1) = max(3,2) = 3个sentinel都同意其中某一个sentinel主持failover,因此此时无sentinel可主持切换,因此测试表明,没有新的master被选出来,此时只能手动通过slaveof命令设置主从,并且手动切换(redis、sentinel和都应用不用重启):

首先修改redis:
任意选取剩余的其中一个节点进行:slaveof no one
其他节点:slaveof 192.168.145.135 6379

找一个从节点上的sentinel,进入sentinel:
redis-cli -p 26379
进行主动切换:
sentinel failover mymaster
然后再在两个sentinel上重新发现集群:
sentinel reset mymaster

检查集群状态。

如果sentinel monitor的quorum设置为2,则宕机一台后再宕机,此时还剩余两台,存在两个sentinel,两个slave。由于quorum为2,必须有>=max(quorum, num(sentinels)/2 +1)=max(2,2) =2个的sentinel都同意其中某一个sentinel主持failover,因此此时存在sentinel可主持切换,因此测试表明,新的master被选出来。

但是设置为2有一个危险就是如果出现如下的网络隔离状况:

集群就会脑裂,就会出现两个master。因此,生产上为了万无一失,宁可牺牲掉一定的高可用容错度也要避免脑裂。如果希望两台宕机依然可以切换,最好的方案不是降低quorum而是增多sentinel的个数,这个建议也是antirez在stackoverflow中回答一个人的提问时给的建议(http://stackoverflow.com/questions/27605843/redis-sentinel-last-node-doesnt-become-master#)。 如下场景测试:

 此时其中两台宕机,必须有>=max(quorum, num(sentinels)/2 +1)=max(3,3) =3个的sentinel都同意其中某一个sentinel主持failover,因此此时存在sentinel可主持切换,测试结果表明此种部署方案可以正常切换。


Redis 脑裂测试
Redis Master hang死测试
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Redis 数据操作

Redis安全问题

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }