Redis-搭建分片集群

╰半橙微兮° 2023-09-24 15:52 174阅读 0赞

目录

一.集群结构

二.准备实例和配置

三.启动

四.创建集群

1.Redis5.0之前

2.Redis5.0以后

五.测试

六:补充

  1. 添加节点

1.1 创建7004新目录,添加配置文件

1.2 启动端口为7004的服务

1.3 添加集群

1.4 添加插槽(移动插槽)

2.删除节点

2.1 删除插槽(移动插槽)

2.2 删除节点


此篇 redis 目录 在 /usr/redis-6.2.4 ,版本即为 6.2.4。

一.集群结构

分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:56239517500f4a608c8af2fdf839c0e4.png

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









































IP PORT 角色
192.168.150.101 7001 master
192.168.150.101 7002 master
192.168.150.101 7003 master
192.168.150.101 8001 slave
192.168.150.101 8002 slave
192.168.150.101 8003 slave

二.准备实例和配置

创建出7001、7002、7003、8001、8002、8003目录:

  1. # 创建/usr/redis目录
  2. mkdir /usr/redis
  3. # 进入到/usr/redis目录
  4. cd /usr/redi
  5. # 创建目录
  6. mkdir 7001 7002 7003 8001 8002 8003

在/usr/redis下准备一个新的redis.conf文件,

  1. vim redis.conf

添加以下内容:

  1. port 6379
  2. # 开启集群功能
  3. cluster-enabled yes
  4. # 集群的配置文件名称,不需要我们创建,由redis自己维护
  5. cluster-config-file /usr/redis/6379/nodes.conf
  6. # 节点心跳失败的超时时间
  7. cluster-node-timeout 5000
  8. # 持久化文件存放目录
  9. dir /tmp/6379
  10. # 绑定地址
  11. bind 0.0.0.0
  12. # 让redis后台运行
  13. daemonize yes
  14. # 注册的实例ip
  15. replica-announce-ip 192.168.1.100
  16. # 保护模式
  17. protected-mode no
  18. # 数据库数量
  19. databases 1
  20. # 日志
  21. logfile /usr/redis/6379/run.log
  22. 将这个文件拷贝到每个目录下:
  23. # 进入/usr/redis目录
  24. cd /usr/redis
  25. # 执行拷贝
  26. echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf

修改每个目录下的redis.conf,将其中的6379修改为与所在目录一致:

  1. # 修改配置文件
  2. printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf

三.启动

因为已经配置了后台启动模式,所以可以直接启动服务:

  1. cd /usr/redis-6.2.4/src/
  2. # 一键启动所有服务
  3. printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t ./redis-server /usr/redis/{}/redis.conf

通过ps查看状态:

  1. ps -ef | grep redis

发现服务都已经正常启动:

9cda97d21f9b43c691fb636bd822be57.png

如果要关闭所有进程,可以执行命令:

  1. #方法一
  2. ps -ef | grep redis | awk '{print $2}' | xargs kill
  3. #方法二
  4. printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t ./redis-cli -p {} shutdown

四.创建集群

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

我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。

1.Redis5.0之前

Redis5.0之前集群命令都是用redis安装包下的src/redis-trib.rb来实现的。因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。

  1. # 安装依赖
  2. yum -y install zlib ruby rubygems
  3. gem install redis

然后通过命令来管理集群:

  1. # 进入redis的src目录
  2. cd /usr/redis-6.2.4/src
  3. # 创建集群
  4. ./redis-trib.rb create --replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003

2.Redis5.0以后

我们使用的是Redis6.2.4版本,集群管理以及集成到了redis-cli中,格式如下:

  1. ./redis-cli --cluster create --cluster-replicas 1 192.168.1.100:7001 192.168.1.100:7002 192.168.1.100:7003 192.168.1.100:8001 192.168.1.100:8002 192.168.1.100:8003

命令说明:

  • redis-cli --cluster或者./redis-trib.rb:代表集群操作命令
  • create:代表是创建集群
  • --replicas 1或者--cluster-replicas 1 :指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master

运行后的样子:

640d31da273141d89731981ef104399a.png 这里输入yes,则集群开始创建:

702f87520d1d45fa9d0609265c682986.png

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

  1. ./redis-cli -p 7001 cluster nodes

56e599b339b34084b5e34bbd86a334f9.png

Redis 集群中内置了 16384 个哈希槽(0-16383),现在有三个主节点,自然会将16384分成三份。

五.测试

集群操作时,需要给redis-cli加上-c参数才可以

  1. ./redis-cli -c -p 7001

c0a0286bdc6545b799e9b02b61cf398f.png

因为7002节点的哈希槽是5461-10922,5798自然落在了7002节点上。

六:补充

1. 添加节点

1.1 创建7004新目录,添加配置文件

重复以上步骤

1.2 启动端口为7004的服务

1.3 添加集群

  1. cd /usr/redis-6.2.4/src/
  2. # ./redis-cli --cluster add-node 新master节点IP:端口 旧master节点IP:端口
  3. ./redis-cli --cluster add-node 192.168.1.100:7004 192.168.1.100:7001

1.4 添加插槽(移动插槽)

  1. # ./redis-cli --cluster reshard 已有master节点IP:端口
  2. ./redis-cli --cluster reshard 192.168.1.100:7001

执行后:d9fde293965145c685219eaf104499bd.png

执行后:

62cebe2f47ce4e78a9cb92a5011b013b.png

查看集群状态:

f65bb2532ff0458ca0461d8a49e6fc8a.png

2.删除节点

2.1 删除插槽(移动插槽)

与添加节点 1.4 同理

2.2 删除节点

  1. #
  2. ./redis-cli --cluster del-node 要删除节点的IP:端口 节点ID
  3. ./redis-cli --cluster del-node 192.168.1.100:7004 f47dd502bc9db9d59d2d5f5eebc638f3bb325cb3

执行后

1f179d6bb7dc4b3b878b33c4d61dc478.png

发表评论

表情:
评论列表 (有 0 条评论,174人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis--

    集群概述 redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里