码迷,mamicode.com
首页 > 其他好文 > 详细

Redis 集群

时间:2020-04-21 09:14:21      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:key   ica   命中   info   ref   migration   使用   保存   命令   

集群简介

业务发展过程中碰到的峰值瓶颈

  • redis 提供的服务 OPS(操作) 可以达到 10万/秒,当前业务 OPS 已经达到 20万/秒
  • 内存单机容量达到 256G,当前业务需求内存容量 1 T

使用集群方式可以解决上述问题

集群架构

  • 集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

集群作用

  • 分散单台服务器的访问压力,实现负载均衡

  • 分散单台服务器的存储压力,实现可扩展性

  • 降低单台服务器宕机带来的业务灾难

    技术图片

Redis 集群结构设计

数据存储设计

在 redis 的每个节点上,都有两个东西:

  • slot(插槽): 一个可以存储两个数值的变量,取值范围 0~1383
  • cluster(群):能够进行集群管理

当我们向 redis 集群(cluster)中加入一个 key 时,redis 会根据 CRC16 的算法对 key 计算得到一个值(类似求哈希值)然后把结果对 16384 取余,计算出的结果,就是 key 存储的 slot(插槽)位置。

  • 通过算法设计,计算出 key 应该保存的位置
  • 将所有的存储空间计划切割成 16384 份,每台主机保存一部分
    • 每份代表的是一个存储空间,可以存多个 key
  • 将 key 按照计算出的结果放到对应的存储空间
  • 增加机器,会在原有的机器上分一部分槽给到新的机器
  • 减少机器,会把该机器上的槽分到其他机器

集群内部通讯设计

  • 各个数据库相互通信,保存各个库中槽的编号数据
  • 当查找 key 时,一次命中直接返回,如果没有命中会获取到确切的槽在哪台机器上,然后再次请求数据,这次肯定能成功

cluster 集群结构搭建

  1. 先新建一个配置 redis-6379.conf,然后在从这个配置修改出6份配置,如下

    技术图片

    ...
    # 证明该节点是一个 cluster 节点
    cluster-enabled yes
    # 指定 cluster 节点启动的配置文件
    cluster-config-file nodes-6379.conf
    # 节点超时时间10s,企业开发一般不会设置这么短
    cluster-node-timeout 100000 
    
  2. 启动所有服务

    redis-server /redis-4.0.0/conf/redis-6379.conf
    redis-server /redis-4.0.0/conf/redis-6380.conf
    redis-server /redis-4.0.0/conf/redis-6381.conf
    redis-server /redis-4.0.0/conf/redis-6382.conf
    redis-server /redis-4.0.0/conf/redis-6383.conf
    redis-server /redis-4.0.0/conf/redis-6384.conf
    

    6379、6380、6381 后面用作 master
    6382、6383、6384 后面用作 slave

    使用 ps -ef | grep redis 命令查看服务状态
    技术图片

    发现每个服务后面都有一个[cluster]标识

  3. 连接启动的 cluster 服务

    提示:

    查询 redis 命令在 redis-4.0.0\src 中执行 ll | grep redis-这里面有个命令叫redis-trib.rb这其实是一个 ruby 的脚本,需要 ruby 和 rubyg,如果命令运行有问题,根据提示安装相应东西,要保证 ruby 与 gem 版本一样,可以通过 reby -vgem -v 查看对应版本

    创建集群(在 redis-4.0.0\src 目录下):
    ./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 代表 1 个 master 服务连接 1 个 slave 服务;如果跟 2 代表 1 个 master 服务连接 2 个 slave 服务;匹配规则是按照写的个数进行比对的,如果是 2 的话,后面要写 1+2=3 的倍数个服务器

    技术图片

  4. 存取数据测试

    连接 6379 master 服务,连接命令: redis-cli -c 这是专门用来操作 cluster 集群的操作,然后执行set name zhangsan

    连接 6382 slave 服务,连接命令: redis-cli -c -p 6382 然后再执行 get name

  5. 如果某个 slave 服务停止掉,slave 服务连接的 master 服务会得到通知,其余的 master 服务都会得到通知(不过信息与有关系的那个master不一样),并不会对整个集群造成多大影响

  6. 如果某个 master 服务停止掉,slave 多次尝试连接 master 失败,会自己转为 master, 等到原先的 master 再次启动时,会作为 slave 去同步数据。总结一下就是会出现角色互换

cluster 配置

  • 设置加入 cluster, 成为其中的节点

    cluster-enabled yes|no

  • cluster 配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容

    cluster-config-file <filename>

  • 节点服务响应超时时间,用于判断该节点是否下线或切换为从节点,线上一般30s1min,测试的话5s10s

    cluster-node-timeout <milliseconds>

  • master 连接的 slave 最小数量

    cluster-migration-barrier <count>

cluster 节点指令操作

  • 查看集群节点信息

    cluster nodes

  • 进入一个从节点 redis,切换其主节点

    cluster replicate <master-id>

  • 发现一个新节点,新增主节点

    cluster meet ip:port

  • 忽略一个没有 solt 的节点

    cluster forget <id>

  • 手动故障转移

    cluster failover

Redis 集群

标签:key   ica   命中   info   ref   migration   使用   保存   命令   

原文地址:https://www.cnblogs.com/wuyongqiang/p/12742249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!