搭建Redis高可用Cluster集群环境

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 首先搭建单机版 Redis 环境

1、准备工作

搭建好了之后,在目录 /usr/local/redis/ 下,新建 myredis 目录

mkdir myredis

进入 myredis 目录中,新建6个文件夹,分别用端口来命名,例如:

mkdir redis7000

mkdir redis7005

这样我们就得到了6个文件夹

2、基础配置信息

我们从 /usr/local/redis/bin/ 目录下,复制一份配置文件出来,修改里面的配置内容

# 端口
port 7000
# 守护进程模式启动
daemonize yes
# 外部可连接,云服务器,写内网即可
# bind 127.0.0.1
# 外部所有的IP地址访问
protected-mode no
# 进程文件,以端口号区分
pidfile /var/run/redis_7000.pid
logfile "/usr/local/redis/myredis/redis7000/redis.log"
# 持久化文件存放位置
dir /usr/local/redis/myredis/redis7000/

3、集群配置信息

# 以集群的方式启动
cluster-enabled yes
# 集群配置信息文件
cluster-config-file nodes-7000.conf
# 超时时间
cluster-node-timeout 15000
cluster-replica-validity-factor 10
cluster-migration-barrier 1

保存,退出

4、复制配置文件

我们已经改好了 7000 端口实例的配置文件,我们使用命令,批量替换

sed 's/7000/7001/g' redis7000/redis.conf > redis7001/redis.conf

sed 's/7000/7005/g' redis7000/redis.conf > redis7005/redis.conf

这样就在 redis7001 里面得到了一份 redis.conf 文件,里面的端口从 7000 替换成了 7001,重复命令即可

5、启动实例

/usr/local/redis/bin/redis-server /usr/local/redis/myredis/redis7000/redis.conf

/usr/local/redis/bin/redis-server /usr/local/redis/myredis/redis7005/redis.conf

启动6个实例,查看 redis 运行情况

ps -ef | grep redis


可以看出,都是以集群的方式启动了实例

6、创建集群

/usr/local/redis/bin/redis-cli --cluster create 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 --cluster-replicas 1
  • –cluster-replicas 1 表示主从比例 1:1,这样我们就得到三主三从的一个集群环境

7、登录 Redis

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 7000

查看节点信息

cluster nodes

可以看到 三主三从的节点信息

8、添加节点

  • 1、添加主节点
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
  • add-node:添加节点
  • 127.0.0.1:7006:添加的节点 ip:port
  • 127.0.0.1:7000:已存在集群的任意节点 ip:port


  • 2、添加从节点
/usr/local/redis/bin/redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000 --cluster-slave --cluster-master-id nodeId
  • add-node:添加节点
  • 127.0.0.1:7007:添加的节点 ip:port
  • 127.0.0.1:7000:已存在集群的任意节点 ip:port
  • –cluster-slave:添加为从节点
  • –cluster-master-id:主节点 id

9、扩容

我们的集群存在槽位的概念,不用的 key 通过算法之后,确定它最终存放在哪个节点中,总的槽位有16384个,从 0 - 16383。

/usr/local/redis/bin/redis-cli --cluster reshard 127.0.0.1:7000
  • reshard:指派槽
  • 127.0.0.1:7000:已存在集群的任意节点 ip:port

输入:分配槽位的大小,这个根据实际情况而定

输入:分配的 nodeId

输入:从哪个 master 节点分配出来,有三种选项:all(全部,平均分配)、nodeId(具体的某一节点的id)、done(最后分配完成)

输入:yes

10、缩容

/usr/local/redis/bin/redis-cli --cluster reshard --cluster-from outNodeId--cluster-slots quantity inNode ip:port
  • outNodeId:迁出的节点 id
  • quantity:迁出的数量
  • inNode ip:port:迁入的 ip:port

输入:接收的 nodeId

输入:yes

11、删除节点

/usr/local/redis/bin/redis-cli --cluster del-node 127.0.0.1:7000 nodeId
  • 127.0.0.1:7000:已存在集群的任意节点 ip:port
  • nodeId:要删除的节点的 id

注意:应先删除从节点,再删除主节点

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
24天前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
58 2
基于Redis的高可用分布式锁——RedLock
|
27天前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
47 0
|
17天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
1月前
|
存储 NoSQL 算法
深入理解Redis分片Cluster原理
本文深入探讨了Redis Cluster的分片原理,作为Redis官方提供的高可用性和高性能解决方案,Redis Cluster通过数据分片和横向扩展能力,有效降低单个主节点的压力。
深入理解Redis分片Cluster原理
|
26天前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
|
26天前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)
【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)
|
1月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
37 0
|
存储 缓存 负载均衡
分布式缓存Redis分区(分片)的高可用方案在大厂中的实践(下)
分布式缓存Redis分区(分片)的高可用方案在大厂中的实践
566 0
分布式缓存Redis分区(分片)的高可用方案在大厂中的实践(下)
|
缓存 监控 NoSQL
超全面Redis分布式高可用方案:哨兵机制
开发工作中对于分布式缓存高可用方案(搭建 Redis 缓存高可用方案),Redis 主从架构下是如何保证高可用的呢?
超全面Redis分布式高可用方案:哨兵机制
|
缓存 算法 NoSQL
分布式缓存Redis分区(分片)的高可用方案在大厂中的实践(中)
分片,Redis 数据的分布方式,分片就是将数据拆分到多个 Redis 实例,这样每个实例将只是所有键的一个子集。
154 0
分布式缓存Redis分区(分片)的高可用方案在大厂中的实践(中)