INDEX

  • §1 集群解决的痛点
  • §2 集群方案
  • §3 无中心化集群搭建
  • §4 可视化工具
  • §5 集群指令
    • §5.1 cluster info [查看集群状态]
    • §5.2 cluster nodes [查看集群节点状态]
    • §5.3 redis-cli --cluster create[组建集群]
    • §5.4 redis-cli --cluster ckeck[查看集群状态]
    • §5.5 redis-cli --cluster add-node[增加集群节点]
    • §5.6 redis-cli --cluster reshard[重新分配 hash 槽(手动)]
    • §5.7 redis-cli --cluster rebalance [重新分配 hash 槽(自动)]
    • §5.8 redis-cli --cluster del-node [移除集群节点]
    • §5.9 cluster keyslot [计算 key 的插槽值]
    • §5.10 cluster countkeysinslot[查看指定插槽中 key 的个数]
    • §5.11 cluster getkeysinslot[查看指定插槽中 key 的个数]
  • §6 集群带来的问题
  • §7 故障恢复

§1 集群解决的痛点

  • 容量不够
  • 并发写操作的分流
  • 节点宕机重启切换主节点导致的 ip 地址变化

§2 集群方案

代理主机
类似 nginx,选用一台主机作为代理主机
代理主机对每组 redis 主从复制进行反向代理
为了健壮,代理主机也需要是集群的

无中心化集群
redis 3.0 后出现,目前通用集群方案,如下图

  • 主节点之间没有从属关系
  • 每个主节点都可以作为集群入口
  • 每个主节点存储一部分数据
  • 部分主节点挂掉不影响主节点功能

§3 无中心化集群搭建

最佳实践

  • 主节点分别使用不同的主机
  • 同组主从节点分别使用不同的主机

节点配置文件
注意打开 bind 配置

# inclue 引入原始配置文件
# 相当于用原始配置文件作为模板,然后进行增量配置
include /etc/redis/redis.confprot 6379
pidfile /var/run/redis_6379.pid
dbfilename dump6379.rdbdir "/redis/cluster01"
logfile "/redis/cluster01/reis_err_6379.log"# 集群配置
cluster-enabled yes
cluster-config-file nodes-6379.conf
# 节点失联时间
cluster-node-timeout 15000

启动节点
redis-server redis3679.conf

组建集群
cd /opt/redis-6.0.8/src
redis-cli --cluster create --cluster-replicas 1 192.1658.3.11:6379 192.168.3.11:6380 [...所有主机列表]

docker 版集群
参考 云原生 | Docker - [Redis 集群搭建]

§4 可视化工具

Redis Assistant (看上去很不错,但收费)
Another Redis Desktop Manager

无法连接时,查看防火墙相关配置,参考 firewall-cmd 指令

§5 集群指令

§5.1 cluster info [查看集群状态]

§5.2 cluster nodes [查看集群节点状态]

§5.3 redis-cli --cluster create[组建集群]

`redis-cli --cluster create --cluster-replicas 1 […所有主机 ip:端口 列表]``

  • –cluster-replicas 用于设置每个主节点备份的个数
§5.4 redis-cli --cluster ckeck[查看集群状态]

§5.5 redis-cli --cluster add-node[增加集群节点]

添加主节点

redis-cli --cluster add-node 新主节点Ip端口 集群中节点Ip端口

添加从节点

redis-cli --cluster add-node 新从节点Ip端口 集群中节点Ip端口 --cluster-slave  --cluster-master-id 主节点node-id
§5.6 redis-cli --cluster reshard[重新分配 hash 槽(手动)]
redis-cli --cluster reshard 集群中节点Ip端口
§5.7 redis-cli --cluster rebalance [重新分配 hash 槽(自动)]
redis-cli --cluster rebalance  集群中节点Ip端口

当每个节点的 key 都很少时,使用此命令无效,并提示

*** No rebalancing needed! All nodes are within the 2.00% threshold.
§5.8 redis-cli --cluster del-node [移除集群节点]
redis-cli --cluster del-node 集群中节点Ip端口
§5.9 cluster keyslot [计算 key 的插槽值]
cluster keyslot key_name
§5.10 cluster countkeysinslot[查看指定插槽中 key 的个数]
cluster countkeysinslot slot_no

只能查看当前节点的插槽

§5.11 cluster getkeysinslot[查看指定插槽中 key 的个数]
cluster getkeysinslot slot_no n

从 slot_no 号 hash 槽上获取前 n 个 key

§6 集群带来的问题

每个主节点并不包含所有数据
集群中的主节点分别负责一部分数据(key)的存储
具体一个 key 存放在哪个节点是由 hash 槽 算法决定
hash 槽相关说明参考 微服务架构 | 分布式存储 -算法

多 key 操作指令会受到影响
集群模式下,一口气操作多个 key 的指令会受到影响,比如 mset
因为涉及到的多个 key 可能经过计算 hash 槽后,分属于不同的主节点
可以通过对 keys 设置组来解决,如 mset k1(kk) v1 k2(kk) v2 k3(kk) v3

lua 脚本执行受到影响
lua 脚本在执行过程中很有可能遇到跨节点的操作
即,所有可能重定向节点 redirected 的操作都会受到影响

不同节点配置差异产生的问题
主要集中在两方面

  • 通用配置不一致
    比如节点配置了不同的 maxmemory
    某个从节点正常,但另一从节点因为此配置过小导致淘汰了大批 key
  • 数据结构优化不一致
    hash-max-ziplist-entries,配置了 hash 的压缩表大小

主从复制带来的问题

  • 挂载节点时全量复制
    比如加入节点时不可避免的全量复制,

    • 使用小节点,比如 2G
    • 访问低谷进行扩容,比如凌晨
  • 指令缓冲区不够导致时全量复制
    持久化过程中会用到指令缓冲区,用来缓冲从开始持久化到结束用户线程提交的新指令
    持久化结束后,会比较当前指令 offset,若在缓冲区队列中,则进行增量同步,否则全量复制

    • 缓冲区大小由 rel_backlog_size 指定,默认 1M,可以加大此配置
  • 全量复制风暴
    通常由主节点重启,众多从节点同时做全量更新导致
    可以通过修改拓扑优化,主从节点间增设从节点,即主节点只同步一个从节点,其余的同步由此节点复制
    但,比较新的集群中不会遇到此问题,因主节点挂掉后会由其原本的从节点补位

新老环境的迁移问题
如果有陈年老系统,可能最早不是使用的 redis 集群
而迁移需要保证数据的完整性,只能局限于整体迁移时,难度较大

§7 故障恢复

主节点宕机

  • 此主节点的从节点自动升为主节点
  • 原主节点恢复后自动成为新主节点的从节点

一段 hash 槽节点全部宕机

  • 集群是否还能正常工作取决于配置 cluster-require-full-coverage
    详见 中间件 | Redis - [安装 & 配置]

中间件 | Redis - [集群]相关推荐

  1. Redis数据库搭建集群(集群概念、redis集群、搭建集群(配置机器1、2、创建集群、数据操作验证)、Python与redis集群交互)

    1. 集群的概念 集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高可用性和可缩放性. ...

  2. redis集群扩容和缩容_redis集群cluster搭建,扩容缩容

    1.    概要说明 1.1.    概述 本文旨在说明平台部署环境搭建的过程和详细步骤说明,为后面系统部署提供清晰的参考依照. 以下搭建部署的环境,为一个小型的分布式集群环境.满足负载均衡和单点故障 ...

  3. Redis集群研究和实践(基于redis 3.0.5)

    前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本. redis在年初发布了3.0. ...

  4. redis 集群搭建_一文轻松搞懂redis集群原理及搭建与使用

    转载:https://juejin.im/post/5ad54d76f265da23970759d3 作者:SnailClimb 这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助. ...

  5. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  6. redis集群搭建及设置账户(转)

    Redis集群搭建以及为集群设置密码 介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. ...

  7. Redis:Redis集群实战

    Redis集群搭建与简单使用 介绍安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. 两台虚拟 ...

  8. Redis集群:redis cluster方案

    redis集群原理之官方的Redis Cluster方案 redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了. 官方的一个简单测试: 测试完成了50个并发执行10 ...

  9. Redis集群:sharding策略

    为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在 ...

  10. Redis集群技术及Codis实践

    前言 诚如开篇文章所言,高效运维包括管理的专业化和技术的专业化.前两篇我们主要在说些管理相关的内容,本篇说一下技术专业化.希望读者朋友们能适应这个转换,谢谢. 互联网早在几年前就已进入Web 2.0时 ...

最新文章

  1. L-SNET:从区域定位到尺度不变的医学图像分割
  2. python 迭代器 生成器 解析
  3. Bootstrap 表格
  4. Python深度学习:Python数据处理及可视化(读书笔记)
  5. 链接计算机 输入网络密码,联想电脑怎么连接无线网输入密码时怎么输入
  6. r语言和python语法对比_R语言和Python区别对比,你会选择哪一个?
  7. 微信小程序云函数数组删除和添加并排序操作pull,push 用法
  8. 如何提升w ndows10系统网速,Win10更新后网速变慢怎么办?教你一招提升Win10网速...
  9. 海森堡与他的矩阵力学分享者
  10. API接口:公司信息查询在线工具应用
  11. 用Python制作生日蛋糕、生日快乐,生日祝福代码
  12. python求平均值
  13. 启用Windows沙盒
  14. UDF函数和UDTF函数的图解举例,追加UDAF函数
  15. 实用技巧 | Chrome浏览器如何对标签页进行分组整理?
  16. 根据单选框的选择来决定下拉框的禁用与否
  17. java split 特殊字符_Java中split()分割字符串时对特殊符号的处理
  18. 关于使用C++万能头文件时定义y1报编译错误的那点事
  19. 魔兽8.0最新服务器人口普查,人口普查#8:血精灵增长第一 魔兽进入平缓期
  20. 白名单网站有哪些?盘点国家级门户网站认可的白名单来源媒体

热门文章

  1. 大工14秋《计算机应用基础》在线测试2,大工14秋《计算机应用基础》在线测试3.pdf...
  2. 百度AI开发者大会之DuerOS 回顾
  3. iOS小白点效果、打地鼠游戏、轮播效果、画板、富文本编辑器等源码
  4. 程序员晒三年跳槽经历,薪资涨到两万,网友:厉害了,word哥
  5. 傻傻分不清楚的sort,sorted,reverse,reversed
  6. 怎样查询快递物流筛选出无信息单号删除或者复制
  7. [wp7游戏]会说话系列合集
  8. JSP pass paramer to RPT(cristal report)
  9. 微信第三方平台--接收普通消息
  10. 国瀚实业|大额理财有什么需要注意的