深入检出 Redis Cluster ①:概述及部署

一、概述

采用虚拟槽分片:

  • 每个节点分配一堆槽
  • 每个节点与其他所有节点共享消息
  • 官方指定全部槽数量为 16384(0-16383)
  • 每个节点有主从复制

image.png
命令:

  • cluster nodes: 查看自动生成的集群本地配置文件记录
  • cluster info: 集群信息
  • cluster meet ip port: 两个 cluster 节点之间的消息沟通
  • cluster addslots slot [slot…]: 为节点分配槽
  • cluster slots: 查看槽的分配信息
  • cluster replicate ${node-id}: 设置主从关系
  • cluster forget ${downNodeId}: 遗忘节点
  • ** cluster keyslot ${key}:** 返回 key 对应的槽

二、部署

配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
port 6379
daemonize yes
logfile "6379.log"
# 主从复制依赖于 rdb
dbfilename dump-6379.rdb
dir /opt/soft/redis/data/

# 当前节点是一个 cluster 节点
cluster-enabled yes
# 节点超时时间
cluster-node-timeout 15000
# 集群本地配置文件记录,自动生成
cluster-config-file nodes-${port}.conf
# 全部节点正常时集群才能提供服务
cluster-require-full-coverage no

获取节点信息命令:

  • cluster nodes: 查看自动生成的集群本地配置文件记录
  • cluster info: 集群信息

1. 原生部署

1.1. 启动

1
2
3
4
5
6
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf

1.2. meet

cluster meet ip port: 两个 cluster 节点之间的消息沟通

1
2
3
4
5
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7002
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7003
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7004
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7005

1.3. 分配槽

cluster addslots slot [slot…]: 为节点分配槽
cluster slots: 查看槽的分配信息
addslots.sh:

1
2
3
4
5
6
7
8
host=$1
port=$2
start=$3
end=$4
for slot in `seq ${start} ${end}`
do
redis-cli -h ${host} -p ${port} cluster addslots ${slot}
done
1
2
3
sh addslots.sh 127.0.0.1 7000 0 5461
sh addslots.sh 127.0.0.1 7001 5462 10922
sh addslots.sh 127.0.0.1 7002 10923 16383

1.4. 设置主从

cluster replicate node-id: 设置主从关系
通过 cluster nodes 命令获取 node-id:
image.png

1
redis-cli -h 127.0.0.1 7003 cluster replicate ${node-id-7000}

2. 使用 redis-trib 部署(需要 ruby 环境)

2.1. 启动

1
2
3
4
5
6
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf

2.2. 创建

1
2
3
4
# --replicas 1表示每个节点的备份数为1
# 7000 7001 7002 为主
# 7003 7004 7005 为从
./redis1-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005