redis 3集群相关注意事项

Redis自版本3以后,开始自身支持集群。

Redis3集群采用数据切片方式,数据取hash值后,散列分布在多个主结点上。

允许多台机器组成集群。

至少需要3个主结点,可以没有从结点;如果指定1个从结点,则至少需要6个结点,既33从;如果指定2个从结点,则至少需要9个结点,既36从。

无法在创建集群时,指定主、从结点。

如果指定存在从结点,则主从结点至少11 的比例,也可1213类推;没有测试从结点上限。

集群可以将故障结点自动下线,但不能自动上线。

可以在集群运行时,添加、删除结点。

主结点存活时,从结点不做读写操作。(未测试)

当采用集群模式(./redis-cli -c -p 7000) 时,数据的读写会访问其他主结点;不开启集群模式,可能产生错误,因为数据已经切片,而数据正好需要访问其他结点。

没有管理中心,各结点相互访问。



Jedis 需要2.7版本,2.1版本不支持redis3的集群,其他低版本未测试。

与单结点连接方式不同,需要将所有主从结点配置至JedisCluster连接中。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.util.Pool;

static void t4(){
		Set<HostAndPort> nodes = new HashSet<>();
		nodes.add(new HostAndPort("172.16.12.55",7000));
		nodes.add(new HostAndPort("172.16.12.55",7001));
		nodes.add(new HostAndPort("172.16.12.55",7002));
		
		nodes.add(new HostAndPort("172.16.12.56",7100));
		nodes.add(new HostAndPort("172.16.12.56",7101));
		nodes.add(new HostAndPort("172.16.12.56",7102));
		
		JedisCluster jcluster = new JedisCluster(nodes);
		System.out.println(jcluster.incr("page_number") );
	}



集群搭建:

http://blog.csdn.net/xu470438000/article/details/42971091

http://www.cnblogs.com/tankaixiong/articles/4022646.html

http://redisdoc.com/topic/cluster-spec.html#id6

  

参考资料:

http://www.cnblogs.com/davidwang456/p/3608737.html

http://www.zhihu.com/question/30026645

 

jedis官网 https://github.com/xetorthio/jedis


以下是一些测试时的脚步

 

redis.stop 用于关闭本机所有redis-server,并清理集群时产生的文件

#!/bin/bash
killall -9 redis-server
 
cd /usr/local/redis3_cluster/7000
rm -f `ls | grep -v "redis.conf"`
 
cd /usr/local/redis3_cluster/7001
rm -f `ls | grep -v "redis.conf"`
 
cd /usr/local/redis3_cluster/7002
rm -f `ls | grep -v "redis.conf"`
 
echo 'clear redis_cluster configs,redis server all shutdown.'


redis.start  启动多个redis-server服务

#!/bin/bash
 
#cd /usr/local/redis3_cluster
#./redis.stop
#echo 'redis server all shutdown.'
 
cd /usr/local/redis3_cluster/7000
redis-server redis.conf
 
cd /usr/local/redis3_cluster/7001
redis-server redis.conf
 
cd /usr/local/redis3_cluster/7002
redis-server redis.conf
 
#cd /usr/local/redis3_cluster/7003
#redis-server redis.conf
 
#cd /usr/local/redis3_cluster/7004
#redis-server redis.conf
 
#cd /usr/local/redis3_cluster/7005
#redis-server redis.conf
 
echo "redis server start..."
sleep 3
netstat -ntlp|grep redis-server


redis_cluster.start 启动集群,必顺在启动redis-server服务后执行

#!/bin/bash
cd /usr/local/redis3.0.0/src
./redis-trib.rb  create --replicas 1 172.16.12.55:7000 172.16.12.56:7100 172.16.12.55:7001 172.16.12.56:7101 172.16.12.55:7002 172.16.12.56:7102
echo "redis cluster restart done."


你可能感兴趣的:(redis 3集群相关注意事项)