热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

RedisCluster多实例扩容缩容

RedisCluster原理图一、RedisCluster单节点多实例实现方式:(1)创建工作目录mkdiroldboyedusoftwaresredisconfredis_clu

Redis Cluster原理图

一、Redis Cluster 单节点多实例实现方式:
(1)创建工作目录
mkdir /oldboyedu/softwares/redis/conf/redis_cluster
mkdir -pv /oldboyedu/data/redis_cluster/1000{1..6}
(2)创建配置文件
cd  /oldboyedu/softwares/redis/conf/redis_cluster 
cat > redis10001.conf <<'EOF'
port 10001
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10001"
logfile "/oldboyedu/data/redis_cluster/10001/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
# 关闭保护模式,这样就可以不用设置密码啦!
protected-mode no
# 配置Redis Cluster 启用redis集群功能
cluster-enabled yes
# 指定集群的配置文件,通常情况下无需修改,这是由redis集群自行维护。
cluster-config-file oldboyedu_linux79.conf
# 指定集群节点的超时时间,以毫秒为单位,此处我指定是5s。
cluster-node-timeout 5000
EOF
cat > redis10002.conf <<'EOF'
port 10002
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10002"
logfile "/oldboyedu/data/redis_cluster/10002/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
protected-mode no
cluster-enabled yes
cluster-config-file oldboyedu_linux79.conf
cluster-node-timeout 5000
EOF
cat > redis10003.conf <<'EOF'
port 10003
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10003"
logfile "/oldboyedu/data/redis_cluster/10003/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
protected-mode no
cluster-enabled yes
cluster-config-file oldboyedu_linux79.conf
cluster-node-timeout 5000
EOF
cat > redis10004.conf <<'EOF'
port 10004
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10004"
logfile "/oldboyedu/data/redis_cluster/10004/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
protected-mode no
cluster-enabled yes
cluster-config-file oldboyedu_linux79.conf
cluster-node-timeout 5000
EOF
cat > redis10005.conf <<'EOF'
port 10005
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10005"
logfile "/oldboyedu/data/redis_cluster/10005/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
protected-mode no
cluster-enabled yes
cluster-config-file oldboyedu_linux79.conf
cluster-node-timeout 5000
EOF
cat > redis10006.conf <<'EOF'
port 10006
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10006"
logfile "/oldboyedu/data/redis_cluster/10006/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
protected-mode no
cluster-enabled yes
cluster-config-file oldboyedu_linux79.conf
cluster-node-timeout 5000
EOF
(3)启动Redis实例
cd  /oldboyedu/softwares/redis/conf/redis_cluster 
redis-server redis10001.conf
redis-server redis10002.conf
redis-server redis10003.conf
redis-server redis10004.conf
redis-server redis10005.conf
redis-server redis10006.conf
(4)安装集群管理软件
yum -y install ruby rubygems
(5)配置ruby的gem工具软件源
gem sources -r https://rubygems.org/
gem sources -a https://mirrors.aliyun.com/rubygems/
(6)安装redis驱动
gem install redis -v 3.3.3
(7)初始化集群
redis-trib.rb create --replicas 1 10.0.0.51:10001 10.0.0.51:10002 10.0.0.51:10003 10.0.0.51:10004 10.0.0.51:10005 10.0.0.51:10006 
提示是否接受上述配置 : yes
(8)查看集群的状态
redis-cli -p 10001 CLUSTER NODES | grep master
redis-cli -p 10001 CLUSTER NODES | grep slave

...
参数说明: http://www.redis.cn/commands/cluster-nodes.html    
(9)测试集群使用
# redis-cli -p 10001 
>  set school oldboyedu   #提示取余超出了该节点槽位,报错
温馨提示:遇到上面的报错,去10002实例操作即可!读写都在该节点!slave只是同步数据而已。
(10)测试集群的可用性
此步骤只需要kill任意一个master角色即可,然后观察之前的slave角色是否转为master角色!
二、Redis Cluster集群扩容:
(1)创建工作目录
mkdir -pv /oldboyedu/data/redis_cluster/1000{7,8}
(2)创建配置文件并启动Redis实例
cd  /oldboyedu/softwares/redis/conf/redis_cluster
cat > redis10007.conf <<'EOF'
port 10007
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10007"
logfile "/oldboyedu/data/redis_cluster/10007/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
protected-mode no
cluster-enabled yes
cluster-config-file oldboyedu_linux79.conf
cluster-node-timeout 5000
EOF
cat > redis10008.conf <<'EOF'
port 10008
bind 0.0.0.0
databases 5
dbfilename "oldboyedu-linux79-redis-cluster.rbd"
dir "/oldboyedu/data/redis_cluster/10008"
logfile "/oldboyedu/data/redis_cluster/10008/oldboyedu-linux79-redis-cluster.log"
daemonize yes
save 900 1
save 300 10
save 60 10000
protected-mode no
cluster-enabled yes
cluster-config-file oldboyedu_linux79.conf
cluster-node-timeout 5000
EOF
# redis-server redis10007.conf
# redis-server redis10008.conf
(3)将节点加入到现有Redis Cluster集群
redis-trib.rb add-node 10.0.0.51:10007 10.0.0.51:10001
温馨提示: 新加入的master节点并没有solt槽位哟~
# redis-cli -p 10001 CLUSTER NODES | grep master
545a972fa68331 10.0.0.51:10007 master - 0 1648003108514 0 connected
(3)重新分配槽位
redis-trib.rb reshard 10.0.0.51:10005
提示给新节点分配多少槽位 (from 1 to 16384)? 4096  # 此数量根据集群分组数计算得出。echo "16384 / 4" | bc
提示接受solt槽位的节点ID: 545a92cb47791
提示选择所有的源节点进行分片: all
提示是否同意分配计划:yes
(4)加入slave节点
redis-trib.rb add-node --slave --master-id 545a92cb47 10.0.0.51:10008 10.0.0.51:10001
温馨提示: 节点添加成功的关系如下所示。
# redis-cli -p 10001 CLUSTER NODES | grep slave
cef1108 10.0.0.51:10008 slave 545a92cb47 0 1648003980515 8 connected
(5)验证从库
redis-cli -p 10008 info Replication
三、Redis Cluster 缩容:
(1)将现有的数据分片迁移到其他节点
# redis-trib.rb reshard 10.0.0.51:10005
提示要移除多少槽位 (from 1 to 16384)? 1365
提示接受solt槽位的节点ID: 1ecbdfa407
提示选择缩容节点ID: 545a92cb477
提示输入..完成:done
提示是否同意分配计划:yes
提示是否继续执行reshard计划:yes
缩容后会自动退出,然后继续重复此步骤,缩容其他几个节点
# redis-trib.rb reshard 10.0.0.51:10005
(2)删除master节点
redis-trib.rb  del-node 10.0.0.51:10007 545a92cb477
(3)删除slave节点
redis-trib.rb  del-node 10.0.0.51:10008 cef1108a7b7
温馨提示:
  (1)Redis Codis调研;
  (2)哨兵模式的VIP调研;
  (3)Redis Cluster ---> 建议拆分成多个哨兵模式。



推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • Redis Hash 数据结构详解
    本文详细介绍了 Redis 中的 Hash 数据类型及其常用命令。Hash 类型用于存储键值对集合,支持多种操作如插入、查询、更新和删除字段值。此外,文章还探讨了 Hash 类型在实际业务场景中的应用,并提供了优化建议。 ... [详细]
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • 本文详细探讨了如何在Docker环境中实现单机部署Redis集群的方法,提供了详细的步骤和配置示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 随着Redis功能的不断增强和稳定性提升,其应用范围日益广泛,成为软件开发人员不可或缺的技能之一。本文将深入探讨Redis集群的部署与优化,包括主从备份机制、哨兵模式以及集群功能,帮助读者全面理解并掌握Redis集群的应用。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文探讨了哪些数据库支持队列式的写入操作(即一个键对应一个队列,数据可以连续入队),并且具备良好的持久化特性。这类需求通常出现在需要高效处理和存储大量有序数据的场景中。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有