由于我们这是在一台机器上模拟多个节点,可以预先规划下各个节点的属性:
节点编号 IP 地址 TCP 端口 节点类型 从节点 启动配置A 192.168.83.128 7001 主 D /usr/local/redis-cluster/7001/redis.conf
B 192.168.83.128 7002 主 E /usr/local/redis-cluster/7002/redis.conf
C 192.168.83.128 7003 主 F /usr/local/redis-cluster/7003/redis.conf
D 192.168.83.128 8001 从 / /usr/local/redis-cluster/8001/redis.conf
E 192.168.83.128 8002 从 / /usr/local/redis-cluster/8002/redis.conf
F 192.168.83.128 8003 从 / /usr/local/redis-cluster/8003/redis.conf
根据上述规划,可以先通过如下命令创建各个节点启动配置文件的存放目录。
mkdir /usr/local/redis-cluster cd redis-cluster mkdir -p 7001 7002 7003 8001 8002 8003顺序执行如下行命令,进入 Redis 源码包目录并将默认配置文件redis.conf分别复制到六个节点配置存放目录中,作为各自节点启动配置文件。
cd /usr/local/redis-5.0.3 cp redis.conf /usr/local/redis-cluster/7001 cp redis.conf /usr/local/redis-cluster/7002 cp redis.conf /usr/local/redis-cluster/7003 cp redis.conf /usr/local/redis-cluster/8001 cp redis.conf /usr/local/redis-cluster/8002 cp redis.conf /usr/local/redis-cluster/8003接下来需要分别修改每个节点的配置文件。下面贴的是节点 A 的配置文件/usr/local/redis-cluster/7001/redis.conf中启用或修改的一些必要参数。其他节点 B、C、D、E、F 参照修改,注意把涉及端口的地方修改成各自节点预先规划的即可。
bind 192.168.83.128 # 设置当前节点主机地址 port 7001 # 设置客户端连接监听端口 pidfile /var/run/redis_7001.pid # 设置 Redis 实例 pid 文件 daemonize yes # 以守护进程运行 Redis 实例 cluster-enabled yes # 启用集群模式 cluster-node-timeout 15000 # 设置当前节点连接超时毫秒数 cluster-config-file nodes-7001.conf # 设置当前节点集群配置文件路径完成上述工作就可以通过如下几组命令启动待搭建集群中的 6 个节点了。
/usr/local/bin/redis-server /usr/local/redis-cluster/7001/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/7002/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/7003/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/8001/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/8002/redis.conf /usr/local/bin/redis-server /usr/local/redis-cluster/8003/redis.conf最后通过ps -ef|grep redis命令确认各个节点服务是否已经正常运行。
[root@localhost bin]# ps -ef|grep redis root 5613 1 0 04:25 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:7001 [cluster] root 5650 1 0 04:26 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:7002 [cluster] root 5661 1 0 04:26 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:7003 [cluster] root 5672 1 0 04:27 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:8001 [cluster] root 5681 1 0 04:27 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:8002 [cluster] root 5690 1 0 04:27 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:8003 [cluster] root 5731 1311 0 04:28 pts/0 00:00:00 grep --color=auto redis如上输出可以看出上面规划的 6 个节点都成功启动。
节点握手虽然上面 6 个节点都启用了群集支持,但默认情况下它们是不相互信任或者说没有联系的。节点握手就是在各个节点之间创建链接(每个节点与其他节点相连),形成一个完整的网格,即集群。
节点握手的命令如下:
cluster meet ip port但为了创建群集,不需要发送形成完整网格所需的所有 cluster meet 命令。只要能发送足够的cluster meet消息,可以让每个节点都可以通过一系列已知节点到达每个其他节点,缺失的链接将被自动创建。
例如,如果我们通过cluster meet将节点 A 与节点 B 连接起来,并将 B 与 C 连接起来,则 A 和 C 会自己找到握手方式并创建链接。
我们的创建的 6 个节点可以通过 redis-cli 连接到 A 节点执行如下五组命令完成握手,生产环境需要将 IP 127.0.0.1替换成外网 IP。
cluster meet 127.0.0.1 7002 cluster meet 127.0.0.1 7003 cluster meet 127.0.0.1 8001 cluster meet 127.0.0.1 8002 cluster meet 127.0.0.1 8003