基于zookeeper的redis高可用

基于zookeeper的redis高可用


一. 程序设计

(一) 基于zookeeper的节点在客户端监测redis集群的状态,并获取主服务器IP

1. 编写zookeeper对监测redis集群客户端

2. 实现redis的高可用(保证redis的主从结构与实时状态的报汇报)


(二) 基于zookeeper的节点在zookeeper监测redis集群的状态

1. 编写客户端对redis集群的客户端(获取集群IP信息)

2. 根据IP集合,随机使用一个IP发起远程调用

(三) 使用 Echarts实现界面实时显示整个redis集群的状态


二. 程序部署图

 

三. 代码实现

1. 集群监控程序

代码设计思路:

职责:监测该服务器的redis状态和与zookeeper服务器的连接状态,并与之保存通讯

两个子程序:

①redis状态监测程序

定时执行redis的ping操作,异常则通知zookeeper集群,若有异常,则删除正常标志的瞬时节点,并生成异常状态标志的瞬时节点——记录IP

②服务器监测程序

保存与zookeeper集群的连接状态(正常状态标志节点——记录IP),(若有断开,在zookeeper服务器则不存在正常状态标记的瞬时节点,达到监测集群目的)

核心代码:

/**

 * 监测redis的运行状态 若出现异常,则向zookeeper服务器发出异常信息节点

 */

@Override

public void run() {

while(true){

     try{

     //redis心跳监测

     String living = heartbeatWatch();

    

     //若数据库断开

     if(null==jd){

     if(status==true){

     //删除正常状态的记录节点

     if(null != normalRecord)deleteNode(normalRecord,zk);

     createNode(errorNode,zk,url);

     //zk.create(errorNode, url.getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);

     status=false;

     run();

     }

     }

     //或者返回非正常状态(如redis无法连接)

     if(!living.equals("PONG")&&status==true){

     //删除正常状态的瞬时节点

     if(null != normalRecord)deleteNode(normalRecord,zk);

     //创建异常状态的瞬时节点通知zookeeper

     createNode(errorNode,zk,url);

     //zk.create(errorNode, (Constant.ZK_ERROR_RESULT+url).getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);

     status=false;

     run();

     }else{

     status=false;</

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值