Redis实践(四)高可用的集群+哨兵部署 下的jedis开发
2017-08-02 16:57
846 查看
在实践(二)中,部署了高可用集群和哨兵,那么如何在这种情况下进行应用的开发呢,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) 代码如下:
[java] view
plain copy
<span style="font-family:Microsoft YaHei;font-size:14px;">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();
}
}</span>
(3) 过程记录
下面是休眠30s开始后,服务端shutdown 144master, 哨兵发现后,进行主从切换
在144上,可以看到144原来的redis实例已经不在。
下面是客户端应用执行情况,redis的主从切换对于客户端应用是透明的。
从服务端可以看到应用设置的数据情况:
一、目标
通过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) 代码如下:
[java] view
plain copy
<span style="font-family:Microsoft YaHei;font-size:14px;">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();
}
}</span>
(3) 过程记录
下面是休眠30s开始后,服务端shutdown 144master, 哨兵发现后,进行主从切换
在144上,可以看到144原来的redis实例已经不在。
下面是客户端应用执行情况,redis的主从切换对于客户端应用是透明的。
从服务端可以看到应用设置的数据情况:
相关文章推荐
- Redis实践(四)高可用的集群+哨兵部署 下的jedis开发
- Redis实践(二)高可用的集群+哨兵部署
- Redis实践(二)高可用的集群+哨兵部署
- Redis集群(哨兵模式高可用)
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- keepalived+twemproxy部署redis集群高可用
- Redis的集群方案之Sentinel(哨兵模式)(待实践)
- redis主从集群搭建及容灾部署(哨兵sentinel)
- 使用Docker Compose部署基于Sentinel的高可用Redis集群
- Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)
- redis主从集群搭建及容灾部署(哨兵sentinel)
- 第5周 Redis部署,高可用与分布式集群部署
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- Redis实践(三)基于jedis开发java应用:redis的8种方式设置key,value
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
- springboot+jedis+读写分离+哨兵模式+集群高可用
- redis主从集群搭建及容灾部署(哨兵sentinel)
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- Centos 安装部署redis集群 及 jedis连接集群遇到的问题
- Redis主从集群搭建及容灾部署(哨兵sentinel)