【图文教程】Redis分片集群搭建
- Redis
- 时间:2023-01-04 15:56
- 3997人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
前面,我们介绍了《【图文教程】Centos单机安装Redis》 和 《【图文教程】Redis主从集群安装》及 《【图文教程】Redis哨兵集群的搭建》。本文咱们就来介绍Redis的分片集群怎么搭建。这些安装教程是一系列的。
本文由凯哥Java,《Redis系列》教程中环境搭建相关文章。欢迎大家一起学习。
一:分片集群结构图
说明:分片集群需要的节点数量比较多,这里我们就搭建一个最小的分片集群,包含3个master节点,每个master接节点包含一个slave节点。结构如下图:
这里,我们还是在同一台虚拟机中开启6个Redis实例,模拟分片集群。6台Redis实例信息如下:
PORT | 角色 | |
---|---|---|
192.168.1.11 | 7001 | master |
192.168.1.11 | 7002 | master |
192.168.1.11 | 7003 | master |
192.168.1.11 | 8001 | slave |
192.168.1.11 | 8002 | slave |
192.168.1.11 | 8003 |
说明:其中7xx开头的是master节点,8xx开头的时候从节点。
二:准备实例和配置
将之前测试哨兵模式的、主从模式时候的Redis杀掉:
删除之前的7001、7002、7003这几个目录,重新创建7001、7002、7003、8001、8002、8003这几个目录。使用命令:
# 进入/tmp目录 cd /tmp # 删除旧的,避免配置干扰 rm -rf 7001 7002 7003 # 创建目录 mkdir 7001 7002 7003 8001 8002 8003
需要注意:因为本文,和前面几篇文章都是用的同一个虚拟机的。如果您只是看了本文,可以忽略删除及kill这两个操作。
在/tmp下准备一个新的redis.conf文件,内容如下:
port 6379 # 开启集群功能 cluster-enabled yes # 集群的配置文件名称,不需要我们创建,由redis自己维护 cluster-config-file /tmp/6379/nodes.conf # 节点心跳失败的超时时间 cluster-node-timeout 5000 # 持久化文件存放目录 dir /tmp/6379 # 绑定地址 bind 0.0.0.0 # 让redis后台运行 daemonize yes # 注册的实例ip replica-announce-ip 192.168.150.101 # 保护模式 protected-mode no # 数据库数量 databases 1 # 日志 logfile /tmp/6379/run.log
将这个文件拷贝到每个目录下,命令如下:
# 进入/tmp目录 cd /tmp # 执行拷贝 echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf
本文来源:凯哥Java(www.kaigejava) http://www.kaigejava.com/newuiarticle/detail/1236 个人公众号:凯哥Java(kaigejava) 。福利公众号:凯哥优惠淘
修改每个目录下的redis.conf,将其中的6379修改成与所在目录一致。使用命令如下:
# 进入/tmp目录 cd /tmp # 修改配置文件 printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf
三:启动
因为已经配置了后台启动模式,所以可以直接启动服务。执行命令如下:
# 进入/tmp目录 cd /tmp # 一键启动所有服务 printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf
通过ps命令查看状态:
ps -ef | grep redis
发现服务都已经正常启动了。
如果要关闭所有经常,可以使用kill命令。如下:
ps -ef | grep redis | awk '{print $2}' | xargs kill
或者使用第二种方式:
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-cli -p {} shutdown
推荐使用第二种方式,关闭进程。
四:创建集群
虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联关系的。
我们需要执行命令来创建集群,在Redis5.0之前,创建集群比较麻烦,5.0之后集群关联命令都集成到redis-cli中了。
本文来源:凯哥Java(www.kaigejava) http://www.kaigejava.com/newuiarticle/detail/1236 个人公众号:凯哥Java(kaigejava) 。福利公众号:凯哥优惠淘
4.1:Redis 5.0之前创建集群命令-认识认识就行
Redis 5.0 之前集群命令都是用Redis安装包下的src/redis-trib.rb来实现的。因为redis-trib.rb是由ruby语言编写的。所以需要安装ruby环境。
安装ruby需要环境依赖命令:
# 安装依赖 yum -y install zlib ruby rubygems gem install redis
然后通过命令来管理集群。命令如下:
# 进入redis的src目录 cd /tmp/redis-6.2.4/src # 创建集群 ./redis-trib.rb create --replicas 1 192.168.1.11:7001 192.168.1.11:7002 192.168.1.11:7003 192.168.1.11:8001 192.168.1.11:8002 192.168.1.11:8003
注意:修改成自己的ip地址。
4.2:Redis 5.0以后创建集群-※
我们使用的是Redis6.2.4版本,集群管理已经集成到了redis-cli中了。所以,我们可以通过redis-cli命令创建集群了。命令如下:
redis-cli --cluster create --cluster-replicas 1 192.168.1.11:7001 192.168.1.11:7002 192.168.1.11:7003 192.168.1.11:8001 192.168.1.11:8002 192.168.1.11:8003
注意:ip修改成自己的。
命令说明:
redis-cli --cluster 或者 ./redis-trib.rb:表示集群操作的命令
create:标识创建集群
--cluster-replicas 1 或者 --replicas 1:指定集群中每个master的副本个数为1.此是节点总数/(replicas+1)得到的就是master的数量。因此节点列表中的前N个就是master,其它节点都是slave节点,随机分配到不同的master。
本文来源:凯哥Java(www.kaigejava) http://www.kaigejava.com/newuiarticle/detail/1236 个人公众号:凯哥Java(kaigejava) 。福利公众号:凯哥优惠淘
命令执行后的样子:
输入yes后,则集群开始创建。如下图:
通过以下命令,可以查看集群状态:
redis-cli -p 7001 cluster nodes
我们从master的id可以查到和哪个slave关联上。如上图中,我们7001这个master就和8001这个slave匹配上了。
五:测试
我们尝试链接7001节点,存储一个数据。命令如下:
# 连接 redis-cli -p 7001 # 存储数据 set num 123 # 读取数据 get num # 再次存储 set a 1
在执行set num 123的时候没问题,但是在执行 set a 1的时候报错了。如下图:
这是因为,我们现在是分片集群了,在对集群操作的时候,需要给redis-cli 加上 -c参数才可以。
修改后命令:
redis-cli -c -p 7001
使用带有 -c 的命令连接到Redis之后,再次执行set a 1。看看效果:
可以看到,set成功了!
本文来源:凯哥Java(www.kaigejava) http://www.kaigejava.com/newuiarticle/detail/1236 个人公众号:凯哥Java(kaigejava) 。福利公众号:凯哥优惠淘
OK,至此,我们Redis搭建系列也完成了