Redis 实战篇之搭建集群 (2)

由于我们这是在一台机器上模拟多个节点,可以预先规划下各个节点的属性:

节点编号 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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfyfw.html