本文介绍redis分片集群的搭建,基于redis7.0版本。redis分片集群解决了海量数据存储的高并发读写问题,当数据大到一台服务器搞不定的情况下,就要考虑向分片集群演化。下面是咱们这次搭建的分片集群的规划图:
0、规划
由图可见,3个master,一主一从,总共6个redis实例。咱们下面开始。
1、搭建
以master-01实例为例,先准备配置文件。其他几个实例,按照规划修改相应配置即可,此处不再赘述。
1.1、master-01实例配置文件
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
# 每个redis实例,要配置不同的工作目录
dir /Users/jackie/dev/redis7-cluster/tmp2
# bind 0.0.0.0
# daemonize yes
protected-mode no
# logfile /tmp/redis/redis.log
保存master-01配置文件为redis-01.conf。所有的配置文件准备好了后,咱们分别启动6个redis。
redis-server redis-01.conf
1.2、分片集群
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6379 127.0.0.1:6383 127.0.0.1:6387 127.0.0.1:6381 127.0.0.1:6385 127.0.0.1:6389
命令解释:
- create: 创建集群。
- –cluster-replicas 1:集群中,每个master有一个replica。
- ip: port: 集群中所有的机器的ip和端口,在这里,前三个是master,后三个是slave。
注意:redis-cli命令默认连接的是127.0.0.1: 6379,敲命令时可以不写,如果不是,要加上-h -p参数。
看上图,分配了3个mster和3个slave,也指出了slave归属于哪个master。按照提示咱们输入“yes",再看效果:
可以看到,redis已经将16384个slot平均分配到3个master上了,上图中红色标注的地方。
咱们再用命令看一下集群状态:
redis-cli cluster nodes
2、测试
redis-cli
set k1 hello
报错了,连接是加上 -c 参数,开启集群模式。
redis-cli -c
3、添加一个新节点
给redis分片集群里添加一个新节点的步骤:
- 配置并启动redis实例。
- 往集群里加入新节点。
命令:redis-cli --cluster add-node <新加入的节点ip:端口> <原有节点ip:端口> - 给新节点分配slot。
命令:redis-cli --cluster reshard <新加入的节点ip:端口>
下面咱们按照步骤一个个来。
3.1、配置并启动新的redis实例
和上面一样,我们先准备配置文件,再启动redis。这里新添加的redis实例端口是6399。
redis-server redis-new-add.conf
3.2、往集群中加入新节点
启动完成后,命令行连接执行:
redis-cli --cluster add-node 127.0.0.1:6399 127.0.0.1:6379
命令里有两个ip,第一个是新节点,第二个是集群中已有的节点,随便写一个已有的即可。结果如下:
看一下集群的状态,目前的角色是master,并且上面没有slot。
3.3、给新节点分配slot
下面给新加的节点分配slot,执行命令:
redis-cli --cluster reshard 127.0.0.1:6399
此时,redis会询问要移动多少个slot,我们输入3000,当然你按自己的规划来。我们从6379节点移动3000个slot到6399节点。
输入3000后,会询问接收节点的id,填入6399的id号,从上面的列表就能找到,就是我第一个标红的位置。
这时,redis询问移动的源节点id,看提示有两个选项。
- all:表示从所有节点移动。
- done:表示要用户输入源id,可以输入多个。这里注意一行一个id,最后一行输入‘done’。
咱们这里输入6379的id号,完了在输入‘done’。最后redis让我们确认,我们输入‘yes’即可。等待移动完成,咱们再看一下此时集群的节点信息,如下图:
可以看到,6399上已经有了3000个slot。
4、结束
好了,redis的分片集群就搭建完成了。就到这里啦。
//~~