Redis Cluster 手动部署

以下为搭建一个拥有6个节点的Redis Cluster集群的教程。

credis-6379.conf

bind 0.0.0.0
port 6379
cluster-enabled yes
cluster-config-file nodes6379.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
  1. 复制以上内容并保存为credis-6379.conf
  2. 复制credis-6379.conf文件五次,总计6个conf类型文件
  3. 除第一个文件外替换其他文件中”6379″->6384 (6380,6381,6382,6383,6384)
  4. 上传这6个文件到服务器上任意文件夹
  5. 进入该文件夹

使用以下命令启动Redis服务

redis-server credis-6379.conf
redis-server credis-6380.conf
redis-server credis-6381.conf
redis-server credis-6382.conf
redis-server credis-6383.conf
redis-server credis-6384.conf

启动完毕后,进入6379端口的服务

redis-cli -h 127.0.0.1 -p 6379

执行以下命令查看Cluster信息

cluster nodes

可以发现还没有连接到其他的节点
使用以下命令来连接到其他的节点

cluster meet <ip> <port>

命令示例:

cluster meet 127.0.0.1 6380
cluster meet 127.0.0.1 6381
cluster meet 127.0.0.1 6382
cluster meet 127.0.0.1 6383
cluster meet 127.0.0.1 6384

执行

cluster nodes

查看节点关系,可以看到如下类似的输出

127.0.0.1:6379> cluster nodes
c9373f9ac3c17d6f8542ea1781be1c92e3823c84 127.0.0.1:6380 master - 0 1530975333318 2 connected
e0af625198609fa154b3646b20b2376f89e35d24 127.0.0.1:6381 master - 0 1530975333318 0 connected
a2c79f33f449282ab67db152ade30185703ccbb9 127.0.0.1:6382 master - 0 1530975334327 3 connected
992412c81fd4ea5b6226c6c3b20443f6ae2e04c3 127.0.0.1:6383 master - 0 1530975334831 4 connected
35a1c02d7096490165fdd7c848b7dfe91ba5ebd3 127.0.0.1:6379 myself,master - 0 0 1 connected
130a0df69f705903b256a6f81ee1e01bbece26c1 127.0.0.1:6384 master - 0 1530975333823 5 connected

尝试执行

set hello world

命令
出现如下错误

127.0.0.1:6379> set hello world
(error) CLUSTERDOWN Hash slot not served

执行

cluster info

查看集群信息
看到如下输出

127.0.0.1:6379> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_sent:316
cluster_stats_messages_received:316

其中cluster_state为fail,这是因为我们还没有为节点分配完所有的槽。
退出Redis Shell,并执行以下命令分配槽到前3个节点

redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0..5461}
redis-cli -h 127.0.0.1 -p 6380 cluster addslots {5462..10922}
redis-cli -h 127.0.0.1 -p 6381 cluster addslots {10923..16383}

重新连接到redis 6379端口的服务
并执行cluster info命令,可以看到cluster_state已经变成ok状态,说明集群已经正常上线了。

执行cluster nodes命令查看槽的分配关系,通常具有如下的输出

127.0.0.1:6379> cluster nodes
c9373f9ac3c17d6f8542ea1781be1c92e3823c84 127.0.0.1:6380 master - 0 1530975609616 2 connected 5462-10922
e0af625198609fa154b3646b20b2376f89e35d24 127.0.0.1:6381 master - 0 1530975611128 0 connected 10923-16383
a2c79f33f449282ab67db152ade30185703ccbb9 127.0.0.1:6382 master - 0 1530975610624 3 connected
992412c81fd4ea5b6226c6c3b20443f6ae2e04c3 127.0.0.1:6383 master - 0 1530975610624 4 connected
35a1c02d7096490165fdd7c848b7dfe91ba5ebd3 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5461
130a0df69f705903b256a6f81ee1e01bbece26c1 127.0.0.1:6384 master - 0 1530975609616 5 connected

使用redis-cli连接到6382,6383,6384服务,并分别执行以下命令

cluster replicate <nodeId>

其中nodeId可在任意集群节点执行cluster nodes查看到,为40位的16进制字符串

示例如下

[root@192 ~]# redis-cli -h 127.0.0.1 -p 6382
127.0.0.1:6382> cluster replicate 35a1c02d7096490165fdd7c848b7dfe91ba5ebd3
OK
127.0.0.1:6382> quit
[root@192 ~]# redis-cli -h 127.0.0.1 -p 6383
127.0.0.1:6383> cluster replicate c9373f9ac3c17d6f8542ea1781be1c92e3823c84
OK
127.0.0.1:6383> quit
[root@192 ~]# redis-cli -h 127.0.0.1 -p 6384
127.0.0.1:6384> cluster replicate e0af625198609fa154b3646b20b2376f89e35d24
OK

再次执行cluster nodes命令,查看所有节点信息,可以看到6382是6379的从节点,6383是6380的从节点,6384是6381的从节点了。
具体输出如下示例:

127.0.0.1:6379> cluster nodes
c9373f9ac3c17d6f8542ea1781be1c92e3823c84 127.0.0.1:6380 master - 0 1530975803733 2 connected 5462-10922
e0af625198609fa154b3646b20b2376f89e35d24 127.0.0.1:6381 master - 0 1530975803733 0 connected 10923-16383
a2c79f33f449282ab67db152ade30185703ccbb9 127.0.0.1:6382 slave 35a1c02d7096490165fdd7c848b7dfe91ba5ebd3 0 1530975804236 3 connected
992412c81fd4ea5b6226c6c3b20443f6ae2e04c3 127.0.0.1:6383 slave c9373f9ac3c17d6f8542ea1781be1c92e3823c84 0 1530975802221 4 connected
35a1c02d7096490165fdd7c848b7dfe91ba5ebd3 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5461
130a0df69f705903b256a6f81ee1e01bbece26c1 127.0.0.1:6384 slave e0af625198609fa154b3646b20b2376f89e35d24 0 1530975803229 5 connected

现在我们的集群关系如下
6379<-6382
6380<-6383
6381<-6384
其中6379-6381为主节点,负责处理槽和相关数据,
6382-6384为从节点,负责故障转移,总计6个节点的Redis集群就已经搭建完毕了。

发表评论

关闭菜单