接上一篇
这个讲集群的入门
13 分片 主从模型
A B C是主节点,数据根据算法,分布在这三个上(A有的,B肯定没有);
A1 B1 C1分别是A B C的slave 。 当B不可用时,会使用B1. 当B B1都不可用时,那么被分配到B的数据就是不可用的。
除了B1,完全可以有B2 B3等等
客户端对B进行写操作后,完毕后异步把相同的操作发送给所有B1 B2..
这种异步操作,提升了性能,牺牲了 强一致性。后续也许会增加强一致性(同步写)
搭建并使用Redis集群:
http://www.redis.cn/topics/cluster-tutorial.html
13-1:集群安装
需要安装ruby,因为创建集群时,是使用ruby脚本
http://blog.csdn.net/xu470438000/article/details/42971091
步骤见上面链接,大体总结的步骤为:
13-1-1:分别创建出config文件
13-1-2:使用不同的config文件,启动所有redis节点
/usr/local/redis320/src/redis-server /usr/local/redis320/cluster/7001/redis.conf
13-1-3:启动好之后,使用redis提供的脚本,组织成集群:
/usr/local/redis320/src/redis-trib.rb create –replicas 1 192.168.1.106:7001 192.168.1.106:7002 192.168.1.106:7003 192.168.1.106:7004 192.168.1.106:7005 192.168.1.106:7006
(注意,上面的ip,不能用localhost,或者127.0.0.1,因为是部署在单独的虚拟机上,要用具体的ip)
遇到的问题:
创建集群时报某个err slot 0 is already busy (redis::commanderror)
这个是把redis.confg中的cluster-config-file配置的文件删掉,然后重启server,执行刚才的脚本
ps:这个cluster-config-file配置的路径,可能是你linux用户的根路径,而不是redis的安装目录。我就是找了半天没找到。
13-2:客户端处理集群(jedis)
https://github.com/xetorthio/jedis
Set jedisClusterNodes = new HashSet();
jedisClusterNodes.add(new HostAndPort("192.168.1.106", 7001));
jedisClusterNodes.add(new HostAndPort("192.168.1.106", 7002));
jedisClusterNodes.add(new HostAndPort("192.168.1.106", 7003));
jedisClusterNodes.add(new HostAndPort("192.168.1.106", 7004));
jedisClusterNodes.add(new HostAndPort("192.168.1.106", 7005));
jedisClusterNodes.add(new HostAndPort("192.168.1.106", 7006));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jedisCluster.set("key1", "valueOfKey2");
String value = jedisCluster.get("key1");
System.out.println(value);