您的位置:首页 > 数据库 > Redis

Redis实践(四)高可用的集群+哨兵部署 下的jedis开发

2016-11-17 10:22 801 查看
在实践(二)中,部署了高可用集群和哨兵,那么如何在这种情况下进行应用的开发呢,jedis提供了相应的api,可以实现。本次实践就是验证一下如何进行的。

一、目标

通过java小程序,来验证当redis发生主从切换后,对应用是透明的,数据的存储和读写可以正常工作

二、环境

1、还是使用144,155 上部署的redis集群,1主1从,3个哨兵

2、本地eclipse环境里,建立java工程,进行应用连接和读写

三、步骤

(1)验证步骤描述

1、客户端,获取redis连接池

2、客户端写入 key1,value1

3、客户端休眠30秒

4、客户端休眠开始后,在服务端,手工shutdwon 144的redis实例

5、客户端休眠30秒后,写入 key2,value2,并且读取key1,key2

(2) 代码如下:

package com.cwqsolo.redis.test;

import java.util.HashSet;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

public class RedisSentinelDemo {

// redis 采用1主1从方式, 主:192.168.136.144 从:192.168.136.155
// sentinel 采用3哨兵, 144上部署2个,155上部署1个
public static void main(String[] args) {

// 创建哨兵池
Set sentinels = new HashSet();
sentinels.add(new HostAndPort("192.168.136.144", 16379).toString());
sentinels.add(new HostAndPort("192.168.136.144", 26379).toString());
sentinels.add(new HostAndPort("192.168.136.155", 16379).toString());
JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster",
sentinels);
System.out.println("Current master: "
+ sentinelPool.getCurrentHostMaster().toString());

Jedis master = sentinelPool.getResource();
master.set("username1", "cwqsolo");
System.out.println("set->username1:cwqsolo ");
sentinelPool.returnResource(master);

// 这里休眠30秒 ,将144 主redis杀掉,按哨兵机制,将发现主redis状态down
// 重新选举新的slave为主master
try {
System.out.println("sleep 30s  begin");
Thread.sleep(30000);
System.out.println("sleep 30s  end!!!");
} catch (Exception Exc) {

Exc.printStackTrace();
System.exit(0);
}

// 重新获得jedis
Jedis master2 = sentinelPool.getResource();
String value = master2.get("username1");
System.out.println("get->username1: " + value);

master2.set("username2", "newland");
System.out.println("set->username2:newland ");

String value2 = master2.get("username2");
System.out.println("get->username2: " + value);

master2.close();
sentinelPool.destroy();
}
}
(3) 过程记录

下面是休眠30s开始后,服务端shutdown 144master, 哨兵发现后,进行主从切换



在144上,可以看到144原来的redis实例已经不在。



下面是客户端应用执行情况,redis的主从切换对于客户端应用是透明的。



从服务端可以看到应用设置的数据情况:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: