Redis-cluster是使用的是一致性哈希算法来切分数据存储,总计16383个槽,分红16383/N(redis节点)个分区,存取时将key转换成int,key/16383来决定存取在哪一个分区。java
port 7000 daemonize yes pidfile /var/run/redis-7000.pid dir /opt/module/redis-cluster/data logfile "7000.log" dbfilename "dump-7000.rdb" #开启集群 cluster-enabled yes #集群中本节点配置文件名 自动生成 cluster-config-file nodes-7000.conf #当集群中某个节点挂了,整个集群是否中止服务,设置成no 继续提供服务 cluster-require-full-coverage no
sed "s/7000/7001/g" redis-cluster-7000.conf >redis-cluster-7001.conf sed "s/7000/7002/g" redis-cluster-7000.conf >redis-cluster-7002.conf sed "s/7000/7003/g" redis-cluster-7000.conf >redis-cluster-7003.conf sed "s/7000/7004/g" redis-cluster-7000.conf >redis-cluster-7004.conf sed "s/7000/7005/g" redis-cluster-7000.conf >redis-cluster-7005.conf sed "s/7000/7006/g" redis-cluster-7000.conf >redis-cluster-7006.conf
启动后会生成相应的nodes-700(0~6).conf文件。该文件列出了群集中其余节点,它们的状态,持久变量等等。 因为某些消息的接收,一般会将此文件重写并刷新到磁盘上。node
meet通讯,保证每一个节点可以知道其余节点负责的槽区间。redis
结构图:算法
官方:服务器
请注意,Redis 群集须要造成完整的网格(每一个节点与其余节点相连,如上图),但为了建立群集,不须要发送造成完整网格所需的全部 CLUSTER MEET 命令。重要的是发送足够的 CLUSTER MEET 消息,以便每一个节点均可以经过一系列已知节点到达每一个其余节点。架构
因此只须要有一条通路就能够ui
进去7000的节点,执行cluster meet 与其余节点通讯spa
redis-cli -p 7000 CLUSTER MEET 127.0.0.1 7001 CLUSTER MEET 127.0.0.1 7002 CLUSTER MEET 127.0.0.1 7003 CLUSTER MEET 127.0.0.1 7004 CLUSTER MEET 127.0.0.1 7005 CLUSTER MEET 127.0.0.1 7006
redis-cli -p 7000 cluster info
#结果: cluster_state:fail #集群状态 cluster_slots_assigned:0 #被分配的槽位数 cluster_slots_ok:0 #正确分配的槽位 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:7 #当前集群下的全部节点,包括主从节点,7说明通了 cluster_size:0 #当前集群下的有槽位分配的节点,即主节点 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:1391 cluster_stats_messages_pong_sent:1375 cluster_stats_messages_meet_sent:6 cluster_stats_messages_sent:2772 cluster_stats_messages_ping_received:1375 cluster_stats_messages_pong_received:1397 cluster_stats_messages_received:2772
采用的是一致性哈希算法,来分配总共给定的16383个槽,此处为了方便就均分了,实际开发中建议根据服务器配置分配。3d
这里使用7001-7003做为主节点 7004-7006作从节点code
#此处的分配规则 7001 0~5000 7002 5001~10000 7003 10001~16383 #代码: redis-cli -p 7001 CLUSTER ADDSLOTS 5000 redis-cli -p 7002 CLUSTER ADDSLOTS 10000 redis-cli -p 7003 CLUSTER ADDSLOTS 16838
结构图:
这里须要用到Nodeid,第一步中配置生成的文件中能够看
#第一步的配置 能够查看nodes-7000.conf这个文件
cluster-config-file nodes-7000.conf
一一对应:红框为Nodeid
进入每一个主节点用 cluster replicate <从Nodeid>
redis-cli -p 7001 cluster replicate da47d14c9e4079ad0973546027f598aab3596fff
查看结果
redis-cli -p 7001 cluster nodes
到此原生配置完成。
下一篇开始Ruby快速搭建Cluster集群。
因为Redis5+移除掉了Ruby,官方说明Redis-trib.rb移到Redis-cli -cluster命令,下一篇没了。
使用redis-cli --cluster快速搭建集群
#前面步骤同样 1.配置主从
多个主从使用"\"隔离开 <几个从>指定多少个从节点
# redis-cli --cluster create <主:port> <从1:port> <从2:port> \ <主1> > <从1> \.... --cluster-replicas <几个从>
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7004 \ 127.0.0.1:7002 127.0.0.1:7005 \ 127.0.0.1:7003 127.0.0.1:7006 --cluster-replicas 1
2.分配槽
#reshard host:port
# --cluster-from <arg>
# --cluster-to <arg>
# --cluster-slots <arg>
# --cluster-yes
# --cluster-timeout <arg>
# --cluster-pipeline <arg>
# --cluster-replace
./redis-cli --cluster reshard 127.0.0.1:7001 --cluster-from 0 --cluster-to 5000