最后,再来查看一下集群中的节点信息。
[root@localhost ~]# /usr/local/bin/redis-cli -p 8002 cluster nodes 1b4b3741945d7fed472a1324aaaa6acaa1843ccb 127.0.0.1:7002@17002 master - 0 1552233328337 1 connected 5462-10922 ed6fd72e61b747af3705b210c7164bc68739303e 127.0.0.1:8003@18003 slave 19147f56e679767bcebb8653262ff7f56ca072a8 0 1552233327000 2 connected 19147f56e679767bcebb8653262ff7f56ca072a8 127.0.0.1:7003@17003 master - 0 1552233325000 2 connected 10923-16383 a8a41694f22977fda78863bdfb3fc03dd1fab1bd 127.0.0.1:8002@18002 myself,slave 1b4b3741945d7fed472a1324aaaa6acaa1843ccb 0 1552233327000 5 connected 61e8c4ed8d1ff2a765a4dd2c3d300d8121d26e12 127.0.0.1:7001@17001 master - 0 1552233327327 4 connected 0-5461 51987c4b5530c81f2845bb9d521daf6d3dce3659 127.0.0.1:8001@18001 slave 61e8c4ed8d1ff2a765a4dd2c3d300d8121d26e12 0 1552233326320 4 connected 自动方式搭建Redis 3.0 版本之后官方发布了一个集群管理工具 redis-trib.rb,集成在 Redis 源码包的src目录下。其封装了 Redis 提供的集群命令,使用简单、便捷。
不过 redis-trib.rb 是 Redis 作者使用 Ruby 语言开发的,故使用该工具之前还需要先在机器上安装 Ruby 环境。后面作者可能意识到这个问题,Redis 5.0 版本开始便把这个工具集成到 redis-cli 中,以--cluster参数提供使用,其中create命令可以用来创建集群。
启动节点使用集群管理工具搭建集群之前,也是需要先把各个节点启动起来的。节点的启动方式请参见本文「手动方式创建」-「启动节点」一节,此处不再赘述。
集群管理工具搭建如果您安装的 Redis 是 3.x 和 4.x 的版本可以使用 redis-trib.rb 搭建,不过之前需要安装 Ruby 环境。
先使用 yum 安装 Ruby 环境以及其他依赖项。
yum -y install ruby ruby-devel rubygems rpm-build确认安装版本。
[root@localhost redis-cluster]# ruby -v ruby 2.0.0p648 (2015-12-16) [x86_64-linux]再使用 redis-trib.rb 脚本搭建集群,具体命令如下所示。
/usr/local/redis-5.0.3/src/redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003不过,本文实验环境使用的 Redis 版本是 5.0.3,所以我可以直接使用redis-cli --cluster create命令搭建,具体命令如下所示。
/usr/local/bin/redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 --cluster-replicas 1主节点在前,从节点在后。其中--cluster-replicas参数用来指定一个主节点带有的从节点个数,如上--cluster-replicas 1即表示 1 个主节点有 1 个从节点。
命令执行成功会有类似如下输出。
[root@localhost bin]# redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 --cluster-replicas 1 >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 127.0.0.1:8001 to 127.0.0.1:7001 Adding replica 127.0.0.1:8002 to 127.0.0.1:7002 Adding replica 127.0.0.1:8003 to 127.0.0.1:7003 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: 32f9819fc7d561bfa2b7189182200e86d9901b8a 127.0.0.1:7001 slots:[0-5460] (5461 slots) master M: cca0fbfa374bc175d481e68ee9ed13b65453e967 127.0.0.1:7002 slots:[5461-10922] (5462 slots) master M: 964cfa1c2dcfe36b6d3c63637f0d57ccb568354e 127.0.0.1:7003 slots:[10923-16383] (5461 slots) master S: 1b47b9e6e7a79523579b8d2ddcd5e708583ed317 127.0.0.1:8001 replicates 32f9819fc7d561bfa2b7189182200e86d9901b8a S: aba9330f3e70f26a8af4ced1b672fbcc7bc62d78 127.0.0.1:8002 replicates cca0fbfa374bc175d481e68ee9ed13b65453e967 S: 254db0830cd764e075aa793144572d5fa3a398f0 127.0.0.1:8003 replicates 964cfa1c2dcfe36b6d3c63637f0d57ccb568354e Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join ... >>> Performing Cluster Check (using node 127.0.0.1:7001) M: 32f9819fc7d561bfa2b7189182200e86d9901b8a 127.0.0.1:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: aba9330f3e70f26a8af4ced1b672fbcc7bc62d78 127.0.0.1:8002 slots: (0 slots) slave replicates cca0fbfa374bc175d481e68ee9ed13b65453e967 S: 1b47b9e6e7a79523579b8d2ddcd5e708583ed317 127.0.0.1:8001 slots: (0 slots) slave replicates 32f9819fc7d561bfa2b7189182200e86d9901b8a S: 254db0830cd764e075aa793144572d5fa3a398f0 127.0.0.1:8003 slots: (0 slots) slave replicates 964cfa1c2dcfe36b6d3c63637f0d57ccb568354e M: cca0fbfa374bc175d481e68ee9ed13b65453e967 127.0.0.1:7002 slots:[5461-10922] (5462 slots) master 1 additional replica(s) M: 964cfa1c2dcfe36b6d3c63637f0d57ccb568354e 127.0.0.1:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.OK,搭建完成!一条命令搞定。