一个集群,只有一个是master,其他都是slave;
当master宕机,从slave里面选举一个新的master来;
可以基于redis实现;
伪代码
String redisKey="redis-master-heart-beat";
boolean master=false;
定时器方法:5秒执行一次(类似心跳)
String redisValue=jedis.get(redisKey);
if(StringUtils.isBlank(redisValue)){//没有值,就是没有master,或者master宕机了
String setNE=jedis.set(redisKey, "ip_currentTime", "NX", "PX", 8000);//抢master,8秒
if("OK".equals(setNE)){//抢到了master
master=true;
}else{//没有抢到master,做了slave
master=false;
}
}else{//有值,就是有master了,检查master是不是自己,续命8秒
if(master&&redisValue.startWith(ip)){//master是自己,没有问题
master=true;
jedis.set(redisKey, "ip_currentTime", 8000);//master重新计时8秒
}else{//自己不是master
master=false;
}
}
选举时间最长10秒