redis集群主从切换,jedis客户端如何自动切换访问

你们好,我是redis学习的新人,今天写这篇文章,但愿记录一下最近的学习 其实到如今我也不不知道redis具体能作什么,大概是缓存,这个暂时无论,先实现我想要的结果。 这边如何启动redis不讲了,请参考:http://www.runoob.com/redis/redis-tutorial.html redis是支持集群的,因此须要配置redis集群,总的来讲,将下载的redis文件复制多份, 修改一下配置就能够实现集群,我本身的总结: 我把个人实例打了个包,但愿对你们有帮助html

主从配置:
主服务器中的设置:
1:修改bind参数:绑定的服务器地址 (本地:127.0.0.1)

从服务器配置
1. 修改bing参数:绑定服务器地址 (注:不必定与主服务器在一块儿)
2. 修改port参数:端口号 (注:若是在同一个服务器上,端口号不一样来区分)
3. slaveof参数: 设置主服务器的地址以及端口号(设置master的Host以及Port) [注意:
须要顶格写,不能有空格]  ]
4. 若是主服务器设置了密码,从服务器须要修改masterauth参数

配置好了主从服务器(从服务器只读),尝试一下,确实能够实现值的同步git

List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
		JedisShardInfo shard1 = new JedisShardInfo("127.0.0.1", "6379");
		JedisShardInfo shard2 = new JedisShardInfo("127.0.0.1", "6380");
		shards.add(shard1);
		shards.add(shard2);
		
		JedisPoolConfig jpc = new JedisPoolConfig();
		jpc.setMaxIdle(10);
		jpc.setMaxTotal(30);
		jpc.setMaxWaitMillis(3*1000);
		
		ShardedJedisPool sjPool = new ShardedJedisPool(jpc, shards);
		ShardedJedis jedis = sjPool.getResource();
		jedis.set("temp", "heeloworld");
		System.out.println("----"+jedis.get("temp")+"-----");

可是这样还不够,毕竟集群真正做用是一个服务器挂了,其余的能够接着用 网上又看到“哨兵”(Redis-Sentinel),详情请见:http://www.javashuo.com/article/p-vguqgocn-gw.html 所以本身作了一些尝试,确实能够实现该功能。redis

1.以前已经准备好了主从服务器多个,每一个里面添加一个sentinel.conf的文件
2.文件的内容是
####master  sentinel.conf
##sentinel实例之间的通信端口  default 26379
port 36379
####sentinel须要监控的master信息:<mastername> <masterIP> <masterPort> <quorum>.
####<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效" 才会认为master为ODWON("客观"失效) .
sentinel myid 45e995cdd93d2db1e48d563c8b3a4f69caf03274
##**如下地址是主服务器地址,特别留意:主从切换后,此处的地址会改变哟**
sentinel monitor mymaster 127.0.0.1 6379 1 
sentinel down-after-milliseconds mymaster 1000
sentinel config-epoch mymaster 10

接下来就展现一下个人例子segmentfault

下两张图展现的是两个服务器,一个是6379端口一个是6380端口,
经过info replication命令,能够从role看出服务器的角色:master(主服务器),slave(从服务器)
再下面两张是启动sentinel监听的画面,所占用的端口能够修改sentinel.conf的port属性

输入图片说明

主从服务器都启动,读写数据都没有问题

输入图片说明

这个时候,将主服务器关闭

输入图片说明

这个时候注意从服务器的role从slave变成了master

输入图片说明

最后读取数据也没有问题,并且获取数据的服务器地址从6379,变成了6380,
说明咱们的功能实现了,主从切换,客户端请求也切换到获取最新的主服务数据

输入图片说明

注意:想必你们也注意到个人代码中的问题,前面我是用的ShardedJedisPool对象请求数据,
可是到后来,代码里使用的JedisSentinelPool,为何会有这样一个变化,
是由于ShardedJedisPool对象在主从服务器切换以后,就没法请求到数据了,
可是JedisSentinelPool就能够,具体原理我也不清楚。
最后,这是个人一点点见解,有不对的地方但愿你们能够提示我,毕竟我了解的很少,
在这里但愿大牛能够给我些指导,在项目中如何使用redis,有没有实例能够给我学习学习,谢谢你们!
相关文章
相关标签/搜索