阅读 61

redis连接数据库,redis集群

1//1.设定sentinel各节点的集合

2 Set sentinelSet=new HashSet (; 3 sentinel set.add (192.168.14.101336026379 ); 4 sentinel set.add (192.168.14.102336026380 ); 5 sentinel set.add (192.168.14.10:26381 ); 6

7//2.设置Jedi spool连接池配置文件

8 jedispoolconfigconfig=newjedispoolconfig (; 9config.setmaxtotal(10; 10config.setmaxwaitmillis(1000; 11

12//3.设置主名称、sentinelNode集合、配置文件和Redis登录密码

13 jedissentinelpooljedissentinelpool=newjedissentinelpool (' my master ',sentinelSet,config,' 123 ' ); 14 Jedis jedis=null; 15 try { 16 jedis } jedissentinelpool.get resource (; 获取17//Redis的key=hello的值

18stringvalue=Jedis.get(Hello ); 19system.out.println(value ); 20 ) catch(exceptione ) {21 e.printStackTrace ); 22 ) Finally{23if(Jedis!=null(24Jedis.close ); 25 }26 }

、连接步骤

1 .客户端检查所有Sentinel节点的集合以获取可用的Sentinel节点。

二.客户端向可用的Sentinel节点发送get-master-addr-by-name命令以获取Redis Master节点。

3 .客户机可以向Redis Master节点发送role或role replication命令,以确定其是否为主节点并获取有关从属节点的信息。

四.客户端获得确定的节点信息后,可以向Redis发送命令进行后续操作

必须注意的是,客户端与Sentinel进行交互,通过Sentinel获得真正的Redis节点信息并进行操作。在实际工作中,Sentinel内部维持着主题队列。

保存Redis的节点信息并实时更新。

客户端订阅此主题,并实时获取此队列的Redis节点信息

哨兵模式的结构

、三项定时任务

一.每隔10秒,sentinel对master和slave执行info命令: 这个命令第一个是为了发现从属节点,第二个是为了确定主从关系。

每2.2秒,每个sentinel通过主节点的信道(名称_sentinel_:hello )交换信息(pub/sub ) :根据对节点的看法(下述节点的主观下划线和客观

每3.1秒各sentinel对其他sentinel和redis执行ping命令,用于心率检测,作为节点生存的判断依据。

、主观下划线和客观下划线

一.主观底线

SDOWN:subjectively down,直接翻译是“主观”的失效,也就是说现在的sentinel实例认为某个redis服务处于“不能使用”的状态。

二.客观底线

o down :对象

down直译为“客观”,也就是说,如果多个sentinel实例认为master处于“SDOWN”状态,则master变为ODOWN,ODOWN表示master无法被群集“使用”

结合第四个点构建主从模式,验证主从切换时,kill去掉Redis主节点,然后像:一样检查sentinel日志

发现了sdown和odown这样的日志。 让我们结合配置sentinel时的配置文件来看看:

最后2表示票数。 这意味着,如果某个sentinel发现Redis服务无法ping,它将被标记为主观下划线

sdown; 此外,其他sentinel服务也发现此Redis服务已关闭,并将其标记为主观脱机,以便多个sentinel

(2以上,配置在上面的最后一个) )时,都将此Redis服务标记为关闭,此时变为客观脱机,进行故障转移。

、失效切换

故障转移由sentinel的领导节点完成。 只需要一个sentinel节点。 关于

sentinel领导节点的选择也是,每个sentinel向其他sentinel节点发送我成为领导者的命令,半数以上的sentinel成为领导者

如果节点同意,且大于quorum,他将成为领袖,如果多个sentinel成为领袖,将举行一段时间的选举。

选择sentinel读取器节点后,将执行故障转移:

从slave节点中选择合适的节点作为新的主节点。 这里的适当节点是以下几点:

1 .选择1.slave-priority(slave节点的优先顺序)最高的slave节点,如果存在则返回,如果不存在则进入下一个判断。

2 .选择复制偏移最大的slave节点(复制最完整),如果存在则返回,如果不存在则继续。

选择runId最小的slave节点(启动最快的节点)

2 .在上面选择的slave节点上运行slaveof no one命令,使其成为新的主节点。

3 .向其馀的备用节点发送命令,使他们成为新主节点的备用节点。 复制规则与之前设置的并行同步参数有关。

四.更新原主节点配置为slave节点,继续感兴趣。 一旦此节点恢复正常,命令复制新的主节点信息。 (注意:元的主节点恢复后作为slave的作用) ) ) )。

可以从sentinel日志中显示的几条消息中确认故障转移:

1. switch-master:表示切换主节点(从子节点升级为主节点)

2. sdown:主观脱机

3. odown:客观底线

4 .转换至从属节点:切换从节点(从原主节点降低到从节点) )。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐