莫那·鲁道

惯于闲看花飞花落, 心念天际云卷云舒.

Coder, 欢迎留言 😆.


GitHub

Mac 搭建 Redis 集群

目录

  1. redis 下载
  2. 创建目录 + 配置文件
  3. 关联所有节点
  4. 分配 slot
  5. 主从复制 总结

1. redis 下载

请使用 brew install redis 工具或从官网下载 Redis 4.0.11 is the latest stable version

2. 创建目录 + 配置文件

我们准备创建 6 个节点,方便起见,创建 6 个工作目录。

cd ~
mkdir redisCluter
cd redisCluster
mkdir 7000 7001 7002 7003 7004

目录创建好了,目录名就是端口号。接下来,需要给每个节点配置“配置文件”。 集群模式下,需要修改下面这些配置。

# 端口号,每个目录都不同
port 700X
# 开启集群模式
cluster-enabled yes
#节点超时实际,单位毫秒
cluster-node-timeout 5000
#集群内部配置文件(默认为 nodes.conf)
cluster-config-file nodes.conf
# 启动 AOF
appendonly yes

将你下载的 redis 目录下的配置文件(通常在 /usr/local/redis-XXX/redis.conf)拷贝到每个目录下,然后逐一修改。 然后,逐一进入各个目录,执行命令:

redis-server redis.conf

这个时候,每个目录下面都会出现几个文件:

类似图中这样,但可能没有 rdb 文件,因为这是 shutdown redis 的时候生成的。

3. 关联所有节点

刚刚我们已经把所有的节点启动了,但此时他们都是互相独立的单个集群节点。要想实现集群,必须将他们关联起来,随便进入一个节点的 redis-cli. 执行下面的命令:

➜  7002 redis-cli -p 7000
127.0.0.1:7000> cluster meet 127.0.0.1 7001
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7002
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7003
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7004
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7005
OK

此时,所有的节点都关联起来了。

4. 分配 slot

我们知道,redis Cluster 是由 16384 个 slot 组成的,那么我们需要将这些槽分散到这其中 3 个节点里(3 主 3 从)。

执行命令:

➜  7002 redis-cli -p 7000 cluster addslots {0..5461}
➜  7002 redis-cli -p 7001 cluster addslots {546..10922}
➜  7002 redis-cli -p 7002 cluster addslots {10923..16383}

此时节点已经分配好了。通过以下命令验证:

 redis-cli -p 7000 cluster nodes

从图中可以看出,7004,7000, 7005 节点都已经有了 slot,但为什么不是刚刚设置的 7000,7001,7002 呢,因为楼主进行操作过了,但这不是重点。可以略过。

5. 主从复制

主节点已经有了 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

这个 7000的NodeID 7001的NodeID 7002的NodeID 其实就是执行 ` redis-cli -p 7000 cluster nodes` 命令出现的那一串 16 进制字符串。

如上图所示。

如果一切顺利,那么再次执行 ` redis-cli -p 7000 cluster nodes` 命令,你会看到:

注意红框:master slave,slave 后面跟着的就是 master 的 NodeId。

总结

手动搭建 Redis Cluster 还是很麻烦的,需要下载,配置文件,启动节点,管理节点,分配 slot,管理主从复制等。

Redis 提供了一个小工具:redis-trib.rb,擦用 ruby 编写,内部也是通过这些命令的,直接使用命令有助有我们理解 Redis Cluster 的原理。