Redis哨兵集群模式,每个节点都保存全量同步数据,冗余的数据比较多;而在Redis Cluster模式中集群中采用分片集群模式,可以减少冗余数据,缺点就是构建该集群模式成本非常高,
Redis3.0开始官方推出了集群模式 RedisCluster,原理采用hash槽的概念,预先分配16384个卡槽,并且将该卡槽分配给具体服务的节点;通过key进行crc16(key)%16384 获取余数,余数就是对应的卡槽的位置,一个卡槽可以存放多个不同的key,从而将读或者写转发到该卡槽的服务的节点。 最大的有点:动态扩容、缩容。
1.在/usr/rediscluster/目录下新增5个redis.conf配置文件,文件名分别为7000redis.conf、7001redis.conf、7002redis.conf、7004redis.conf、7005redis.conf、7006redis.conf
2.分别修改每个配置文件中的内容,如7000:
daemonize yes #后台启动
protected-mode no ; ## 允许外部访问
port 7000 #修改端口号,从7000到7005
dbfilename "7000dump.rdb" #rdb文件名称从7000到7005
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file 7000nodes.conf #自动生成
cluster-node-timeout 15000 #节点通信时间
logfile /usr/rediscluster/redislog/7000redis.log
3.启动我们的redis
/usr/redis/bin/redis-server /usr/rediscluster/7000redis.conf
/usr/redis/bin/redis-server /usr/rediscluster/7001redis.conf
/usr/redis/bin/redis-server /usr/rediscluster/7002redis.conf
/usr/redis/bin/redis-server /usr/rediscluster/7003redis.conf
/usr/redis/bin/redis-server /usr/rediscluster/7004redis.conf
/usr/redis/bin/redis-server /usr/rediscluster/7005redis.conf
4.连接一个redis
/usr/redis/bin/redis-cli -h 192.168.1.100 -p 7000
(error) CLUSTERDOWN Hash slot not served 说明没有分配hash槽
5.分配卡槽
/usr/redis/bin/redis-cli --cluster create 192.168.1.100:7000 192.168.1.100:7001 192.168.1.100:7002 192.168.1.100:7003 192.168.1.100:7004 192.168.1.100:7005 --cluster-replicas 1
(建议最好使用服务器的ip地址搭建)
6.连接一个redis
/usr/redis/bin/redis-cli -h 192.168.1.100 -p 7000
7.修改为Redis的集群方式连接/usr/redis/bin/redis-cli -h 192.168.1.100 -p 7000 -c
,自动进行节点的代理切换
/usr/redis/bin/redis-cli --cluster help
1.新增7006redis.conf、7007redis.conf,文件配置内容同其他节点
2.分别启动7006、7007节点
/usr/redis/bin/redis-server /usr/rediscluster/7006redis.conf
/usr/redis/bin/redis-server /usr/rediscluster/7007redis.conf
/usr/redis/bin/redis-cli --cluster add-node 192.168.1.100:7006 192.168.1.100:7000
4.查询7006的master-id为d012cad6e1a23e4f24f9d31cf24afd4a25a3d69c
/usr/redis/bin/redis-cli -h 192.168.1.100 -p 7000 -c
cluster nodes
5.新增一个从节点为7007
/usr/redis/bin/redis-cli --cluster add-node 192.168.1.100:7007 192.168.1.100:7000 --cluster-slave --cluster-master-id d012cad6e1a23e4f24f9d31cf24afd4a25a3d69c
6.新增的7006 是没有任何槽位,分配Redis槽位扩容,16384/4=4096 个卡槽
/usr/redis/bin/redis-cli --cluster reshard 192.168.1.100:7000
7.输入接收的master-idd012cad6e1a23e4f24f9d31cf24afd4a25a3d69c
8.输入分配卡槽的来源,这里选择all
9.再次查询7006的卡槽,发现卡槽分配成功
/usr/redis/bin/redis-cli -h 192.168.1.100 -p 7000 -c
cluster nodes
1.把7006节点的卡槽全部给到7000
d012cad6e1a23e4f24f9d31cf24afd4a25a3d69c
为7006的master-id
2ab1403b76ba88a10cf375a7c818cee4886677b8
为7000的master-id
/usr/redis/bin/redis-cli --cluster reshard 192.168.1.100:7000 --cluster-from d012cad6e1a23e4f24f9d31cf24afd4a25a3d69c --cluster-to 2ab1403b76ba88a10cf375a7c818cee4886677b8 --cluster-slots 4096
2.查询缩容后的节点详情信息,发现缩容成功
/usr/redis/bin/redis-cli -h 192.168.1.100 -p 7000 -c
cluster nodes