Redis 集群

集群简介 

1. 现状问题

  • 业务发展过程中遇到的峰值瓶颈
    • redis 提供的服务OPS 可以达到10万/秒
    • 内存单机容量达到256G,当前业务需求内存容量1T
  • 问题解决:集群的搭建

2. 集群架构

  • 定义:集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
  • 作用
    • 分散单台服务器的访问压力,实现负载均衡
    • 分散单台服务器的存储压力,实现可扩展性
    • 降低单台服务器宕机带来的业务灾难

Redis 集群结构设计

1. 数据存储设计

  • 通过算法设计,计算出key 应该保存的位置
  • 将所有的存储空间计划切割成16384份,每台主机保存一部分
    • 每份代表的是一个存储空间,不是一个key的保存空间
    • k = CRC16(key) % 16384,其中CRC16 是将key 转化为相当于hash值的函数,k为第k份空间,这样的单元称为槽,16384是空间总份数,key是存储时用的key
    • 当有新机器加入到了集群中,其他每一台机器把一部分槽中的数据分给这个机器(是以槽为单位进行的)。从集群中删除机器时,则去除的机器会将其存储的数据以槽为单位分配到其他机器中去

2. 集群内部通信设计

  • 各个数据库相互通信,保存各个库中槽的编号数据
  • 当一个指令对一个key 进行操作时,如果计算key 对应的槽就在访问的服务器内,则一次命中,直接返回;如果计算key 对应的槽不在访问的服务器内,则会通过保存在该服务器内部的槽编号数据告知客户端直接去槽所在的服务器中找。

cluster 集群结构搭建

  • 进行集群配置
    • cluster-enabled yes                               
      • 注册为集群中的节点
    • cluster-config-file nodes-端口号.conf     
      • 该节点的集群配置文件的名称,当构建集群时会自动创建,并加入集群的构建信息(包括槽的分配信息,主从信息等)
    • cluster-node-time 10000                       
      • 该节点超时多久算为下线
  • 启动所有主从节点
  • 创建集群(使用命令redis-trib.rb)
./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \
                                127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

# 其中 --replicas 选项的意思是以什么样的结构来构建集群
# 1 的含义是一个master 对应一个 slave
# 后面的地址对应的是redis 数据库,其中master 全写在前面
#     并且后面的以n 为单位作为前面以此master 的slave(此处c=1)
redis-trib.rb 执行结果

        解读:其中slots 即为分配的槽数

        注意:运行上述命令需要安装ruby和gem,才能运行

  • 设置与获取数据
    • 以redis-cli -c 命令连接数据库服务器
      • -c 选项是专门用来操控redis 集群的,不加该选项,只要不是一次命中就会报错

集群出现异常情况时如何自处理

1. slave 出现下线问题

  • 对功能不产生影响
  • 只是对应的master 会将slave 标记为下线,并通知其他master
  • 当slave重新上线时,对应的master 会对该slave 进行数据同步,并进行标记清除

2. master 出现下线问题

  • 对应的slave会反复给master发送连接请求,直到超过设置的时间还未连接成功,则判断master下线,并将master标记为fail
  • 当slave 确定master 下线之后,slave 将成为新的master(当slave 只有一个时)
  • 当master 重新上线,对应的slave 会对标记进行清除,但是会清除失败,之后会直接将master转为自己的slave
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值