【图文教程】Redis分片集群搭建

  • 作者: 凯哥Java(公众号:凯哥Java)
  • Redis
  • 时间:2023-01-04 15:56
  • 3997人已阅读
简介 前面,我们介绍了《【图文教程】Centos单机安装Redis》 和 《【图文教程】Redis主从集群安装》及《【图文教程】Redis哨兵集群的搭建》。本文咱们就来介绍Redis的分片集群怎么搭建。这些安装教程是一系列的。本文由凯哥Java,《Redis系列》教程中环境搭建相关文章。欢迎大家一起学习。一:分片集群结构图说明:分片集群需要的节点数量比较多,这里我们就搭建一个最小的分

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

前面,我们介绍了《【图文教程】Centos单机安装Redis》 和 《【图文教程】Redis主从集群安装》《【图文教程】Redis哨兵集群的搭建》。本文咱们就来介绍Redis的分片集群怎么搭建。这些安装教程是一系列的。

本文由凯哥Java,《Redis系列》教程中环境搭建相关文章。欢迎大家一起学习。

一:分片集群结构图

说明:分片集群需要的节点数量比较多,这里我们就搭建一个最小的分片集群,包含3个master节点,每个master接节点包含一个slave节点。结构如下图:

53b5b4a2b007f302121dd64b0faa7f3e.png

这里,我们还是在同一台虚拟机中开启6个Redis实例,模拟分片集群。6台Redis实例信息如下:

IPPORT角色
192.168.1.117001master
192.168.1.117002master
192.168.1.117003master
192.168.1.118001slave
192.168.1.118002slave
192.168.1.118003slave

说明:其中7xx开头的是master节点,8xx开头的时候从节点。

二:准备实例和配置

将之前测试哨兵模式的、主从模式时候的Redis杀掉:

6894ec0ce2f7153a57211775ff8cffaf.png

删除之前的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

e5e8323acbd75679426c35b4b64002a5.png

本文来源:凯哥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

dfaecdc60febab5f2903c1070c623f74.png

三:启动

因为已经配置了后台启动模式,所以可以直接启动服务。执行命令如下:

# 进入/tmp目录
cd /tmp
# 一键启动所有服务
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf

81f5d6cf7b89178d75470449f4121364.png

通过ps命令查看状态:

ps -ef | grep redis

2bab721f2a3d0729df23059edd8e0067.png

发现服务都已经正常启动了。

如果要关闭所有经常,可以使用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

05d6e9178f5017d5fed3b01f6b94c9ef.png

推荐使用第二种方式,关闭进程。

四:创建集群

虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联关系的。

我们需要执行命令来创建集群,在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) 。福利公众号:凯哥优惠淘

命令执行后的样子:c45ae1b27310e5f9827e7d583d238cd6.png

输入yes后,则集群开始创建。如下图:

b55ca964564532ea9b5d12ad2aafe2c3.png

通过以下命令,可以查看集群状态:

redis-cli -p 7001 cluster nodes

d74846b41c991257087cafad6b21b121.png我们从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的时候报错了。如下图:

085e318328d091d3a2576c486e1e2bc0.png

这是因为,我们现在是分片集群了,在对集群操作的时候,需要给redis-cli 加上 -c参数才可以。

修改后命令:

redis-cli -c -p 7001

使用带有 -c 的命令连接到Redis之后,再次执行set a 1。看看效果:

d95bf21c7755aaa9a0835391fbe20270.png

可以看到,set成功了!

本文来源:凯哥Java(www.kaigejava) http://www.kaigejava.com/newuiarticle/detail/1236  个人公众号:凯哥Java(kaigejava) 。福利公众号:凯哥优惠淘

OK,至此,我们Redis搭建系列也完成了



TopTop