一 redis 集群简单配置
打开 redis.conf 文件,端口是redis的访问端口,同一机器每个redis 端口不一样
daemonize yes
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
二 集群创建
redis 集群通过分片(sharding)进行数据共享,整个集群中数据库被分为16384(0-16383)个槽,集群中每个节点处理一定数据量的槽。
统一机器上部署3个节点,创建3个文件夹分别为 7000,7001, 7002,copy redis 到这三个文件夹下,按照上面的配置修改redis.conf, 注意端口修改, 文 件夹名相同。
创建集群方法:
1 使用redis-trib 构建集群
redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
//redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
//给每个节点创建一个从节点,7003 是7000的从节点,以此类推
加入新节点到集群
redis-trib.rb add-node 127.0.0.1:8000 127.0.0.1:8001
为新加入的节点分配槽
redis-trib.rb reshard 127.0.0.1:8000
#根据提示选择要迁移的slot数量(ps:这里选择500)
How many slots do you want to move (from 1 to 16384)? 500
#选择要接受这些slot的node-id
What is the receiving node ID? f51e26b5d5ff74f85341f06f28f125b7254e61bf
#选择slot来源:
#all表示从所有的master重新分配,
#或者数据要提取slot的master节点id,最后用done结束
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:all
#打印被移动的slot后,输入yes开始移动slot以及对应的数据.
#Do you want to proceed with the proposed reshard plan (yes/no)? yes #结束
2 使用redis 基本命令创建集群
进 入 7000, redis-server ./redis.conf 启动,
执行名 cluster meet 127.0.0.1 7001 ,把7001添加到7000集群中,
执行cluster nodes 命令 看到集群中有连个节点,此时集群依然处于下线状态,因为每个节点都 没有处理任何槽,
cluster info 命令查看集群信息, 当前连接的是7000 运行如下命令进行槽指派,
cluster addslots 0 1 2 ... 5000
将槽 0-5000 分配给7000 处理,启动7001 运行
cluster addslots 5001 5002 5003 ... 10000
将槽5001 -1000 指派给7001 处理,如此处理7003,执行完后集群处于上线状态
三 集群中如何判断数据存储在哪个节点
redis 根据key 计算出对应的槽:CRC(16) & 16383 , 这种处理方法会造成当我们增加或删除节点后导致大量的key 无法命中,
有人提出来一致性hash 算法,可参考这篇文章 http://blog.csdn.net/cywosp/article/details/23397179/