即使有了主从复制,每个数据库都要保存整个集群中的所有数据,容易形成木桶效应。
使用Jedis实现了分片集群,是由客户端控制哪些key数据保存到哪个数据库中,如果在水平扩容时就必须手动进行数据迁移,而且需要将整个集群停止服务,这样做非常不好的。
Redis3.0版本的一大特性就是集群(Cluster),接下来将讲解Redis集群。
1.架构
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot(插槽)上,cluster 负责维护node<->slot<->value
2.修改配置文件
1、设置不同的端口,6379、6380、6381
2、开启集群,cluster-enabled yes
3、指定集群的配置文件,cluster-config-file "nodes-xxxx.conf"
3.创建集群
安装ruby环境
因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。
yum -y install zlib ruby rubygems gem install redis
手动安装:
rz上传redis-3.2.1.gem
gem install -l redis-3.2.1.gem
创建集群
首先,进入redis的安装包路径下:
cd /usr/local/src/redis/redis-3.0.1/src/
执行命令:
./redis-trib.rb create --replicas 0 192.168.56.102:6379 192.168.56.102:6380 192.168.56.102:6381
–replicas 0:指定了从数据的数量为0
注意:这里不能使用127.0.0.1,否则在Jedis客户端使用时无法连接到!
redis-trib用法:
测试
什么情况??(error) MOVED 7638 127.0.0.1:6380
因为abc的hash槽信息是在6380上,现在使用redis-cli连接的6379,无法完成set操作,需要客户端跟踪重定向。
redis-cli -c
看到由6379跳转到了6380,然后再进入6379看能否get到数据
还是被重定向到了6380,不过已经可以获取到数据了。
4.使用Jedis连接到集群
添加依赖,要注意jedis的版本为2.7.2
说明:这里的jc不需要关闭,因为内部已经关闭连接了。