1. 安装
brew install redis
2. 启动
redis-server:启动 redis 服务器,默认端口 6379
redis-cli:启动 redis 客户端
配置文件目录
cd /usr/local/etc
在配置文件目录(/usr/local/etc)下进行操作
在 /usr/local/etc 下创建 redisCluster 目录,并在 redisCluster 目录下创建目录:7000、7001、7002、7003、7004、7005。
mkdir redisCluster
cd redisCluster
mkdir 7000 7001 7002 7003 7004 7005
把redis的配置文件复制到每个文件夹下,并修改文件。可以先复制一份修改好参数再复制其他的,只要修改port就可以了,参数修改如下
# 端口号,每个目录都不同
port 7000
# 开启集群模式
cluster-enabled yes
#节点超时实际,单位毫秒
cluster-node-timeout 5000
#集群内部配置文件(默认为 nodes-6379.conf)
cluster-config-file nodes-7000.conf
# 启动 AOF
appendonly yes
# 默认是no,改成 yes,意思是是否要后台启动。
daemonize yes
复制配置文件
cp ../redis.conf.default ./7000
vim ./7000/redis.conf.default
mv ./7000/redis.conf.default ./7000/7000.conf
记得修改配置文件中的port参数和文件夹一致
redis-server /usr/local/etc/redisCluster/7000/7000.conf
ps -ef|grep redis
redis-cli -p 7000
cluster meet 127.0.0.1 7001
Cluster 默认会对 key 值使用 crc32 算法进行 hash 得到一个整数值,然后用这个整数值对 16384 进行取模来得到具体槽位
在分配槽位时,相当于把对应的槽位挂载在指定的节点上, key计算出来的槽位,然后跟据槽位找到对应的节点,将key存储在这个节点上.
若set sgfoot www.sgfoot.com, 集群计算出对应的槽位是: 6498, 而6498槽位被挂载在127.0.0.1:6392节点上, 不归自己管, 所以会返回一个信息-> Redirected to slot [6498] located at 127.0.0.1:6392 让你去连接6392节点上查看,你刚才存储的值.
查看帮助: cluster help
槽位分配错误使用:cluster reset
分配槽位, 注意只能使用redis-cli方式, 槽位之间是两个小点
如果报(error) ERR Slot 5462 is already busy 错误的话, 先查看cluster nodes, 排查问题, 实在不行,使用cluster reset重置操作. 重新握手操作.然后再分配槽位.
redis Cluster 是由 16384 个 slot 组成的,那么我们需要将这些槽分散到这其中 3 个节点里(3 主 3 从)。
redis-cli -p 7000 cluster addslots {0..5461}
redis-cli -p 7001 cluster addslots {5462..10922}
redis-cli -p 7002 cluster addslots {10923..16383}
此时节点已经分配好了。通过以下命令验证:
redis-cli -p 7000 cluster nodes
前面的一串 16 进制字符串,其实就是后面对应进程节点的NodeId
主节点已经有了 slot,那么最后一步就是将主节点和从节点进行关联,形成主从复制的关系。 命令如下:
注意:需要在从节点的 cli 命令窗口关联主节点。不能反着来。
redis-cli -p 7003 cluster replicate 7000的NodeID
redis-cli -p 7004 cluster replicate 7001的NodeID
redis-cli -p 7005 cluster replicate 7002的NodeID
这个NodeID其实就是执行 redis-cli -p 7000 cluster nodes
查看结果:
redis-cli -p 7000 cluster nodes
这时如果继续使用之前的redis-cli -p 7000命令会报错:
应使用集群模式:
redis-cli -c -p 7000
其他redis连接查看:
至此完成。