• Redis Cluster集群方案


    RedisCluster 集群方案

    目录

    RedisCluster 集群方案

    简介

    核心原理

    配置

    节点配置

    集群配置

    健康检查

    常见管理手段

    扩容-增加 Redis 节点

    扩容-slot 自动平衡

    缩容-slot 手动分配

    缩容-删除 Redis 节点


    简介

    Redis 集群实现了一个数据分布式存储、节点水平扩容、故障自动转移的集群方案

    1. 存储:

    Redis 集群实现了对 Redis 的水平扩容,即启动 N 个 Redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N

    2. 水平扩容:

    Redis 集群模式用来解决单 Redis 数据量瓶颈,并且不再需要配置单独的哨兵,可以进行水平扩展

    3. 故障自动转移:

    Redis 集群将 key 通过 crc16 运算后与 16384 取模,将 key 分布到固定 16384 个槽位(slot)中的一个(0-16383),每个 redis 分别保管不同 的槽位,不同的 Redis 子集群分管不同的槽位,每个子集可用一主多从实现,进行故障自动转移

    4. 注意:

    并且集群模式默认使用 db0 不支持 select 别的 db

    核心原理

    Redis 集群采用了哈希 Slot+主从节点实现了一个数据分布式存储、节点水平扩容、故障自动转移的集群方案

    为了提高效率,Redis 集群客户端维护当前插槽配置的映射,比如像 Java 实现的 JedisCluster

    配置

    节点配置

    1. redis.conf 单点增加配置

    cluster-enabled yes

    cluster-config-file nodes-{port}.conf

    2. 节点数量

    要求节点数量为 2*N=2 *N个节点

    生产要求至少 2 台机器,保证挂掉一台机器或者一个节点后,服务仍能正常进行

    而且主从不能配对在同一台机器上

    3. 启动所有节点

    以 cluster 模式启动 2*N 个 redis 服务

    集群配置

    1. 创建集群 ./redis-cli --cluster create 192.168.128.167:6381 192.168.128.167:6382 192.168.128.167:6383

    192.168.128.167:6384

    192.168.128.167:6385 192.168.128.167:6386 --cluster-replicas 1

    2. 数据目录:这时候在数据目录下面会生成集群配置文件

    健康检查

    redis-cli --cluster info 192.168.128.167:6381

    redis-cli --cluster check 192.168.128.167:6381

    常见管理手段

    扩容-增加 Redis 节点

    准备单节点 (一主一丛)

    按集群环境搭建的要求准备好单节点

    192.168.128.167:6387 和 192.168.128.167:6388

    添加主节点

    redis-cli --cluster add-node 192.168.128.167:6387 192.168.128.167:6381

    第一个节点为待加入的新节点,后面一个节点为集群中的任意节点

    添加节点命令,默认是主节点

    添加从节点

    redis-cli --cluster add-node 192.168.128.167:6388 192.168.128.167:6381 --cluster-slave

    不指定主节点时,由 Redis 自动分配,一般会自动加入没有从节点的主下面

    redis-cli --cluster add-node 192.168.128.167:6388 192.168.128.167:6381 --cluster-slave --cluster-master-id

    0d77af6e29a5d11ecb9cadbd6ceb282cceaca2c4

    扩容-slot 自动平衡

    当 Redis 集群中的节点出现新增时,我们需要对数据进行 slot 重新划配,有两种模式,自动平衡模式和手动划配模式

    新增的时候我们一般采用自动平衡处理,这样方便快捷

    自动平衡命令

    ./redis-cli --cluster rebalance 192.168.128.167:6381 --cluster-use-empty-masters --cluster-replace

    缩容-slot 手动分配

    当我们想要对 Redis 集群进行缩容时,在删除 Redis 节点前,我们必须对要删除的节点上的数据进行手动划配迁移缩容前的 key 分布

    缩容-删除 Redis 节点

    从节点可以随时移除,0 slot 的孤主节点可以随时移除(无从节点),其它主节点无法删除

    红色框节点可以直接删除,1 号节点在删除对应的从节点后可以删除,2、3、4 号节点需要将数据迁走+删除对应的从节点后可删除

    redis-cli --cluster del-node 192.168.128.167:6388 eba6e33d52b8d77832f3590de76ca53b6f78e71a

  • 相关阅读:
    c++中和c语言不相同的地方
    Linux学习笔记——网络管理
    Flowable(三):Java知识学习
    AtCoder ABC239G 最小割集
    Django-入门
    Linux学习记录——이 基本指令(2)
    如何修复老照片?这三个方法建议收藏
    .net 转 JAVA ssm java整合
    【知识总结】开发提效50%的Javascript常用函数
    【IPC】消息队列
  • 原文地址:https://blog.csdn.net/qq_32378713/article/details/126363265