主从和集群配置

未匹配的标注

主从架构

  • 主节点负责读和写, 从节点只负责读

  • 从节点配置:

    replicaof 主节点IP 主节点端口号
  • 进入 Redis 客户端之后, 就可以查看主从的配置信息

哨兵

  • 如果主节点突然挂掉后(即单点故障), 这个时候就需要用到哨兵机制

  • 在开启 Redis 的同时, 还会再次开启一个哨兵, 当主节点 Redis 挂掉之后, 主节点的哨兵会结合从节点的哨兵进行一次投票, 在剩余的从节点中选出来一个 Redis 节点来当主节点

  • 配置如下:

  • 配置文件名字是 sentinel.conf

    # 表示哨兵在后台启动
    daemonize yes
    
    # 指定 master 节点的 IP 和端口号(在主节点的 sentinel.conf 中配置下面内容)
    sentinel monitor master节点名称(自己起的) localhost master节点的端口号 从节点的个数
    
    # 指定 master 节点的 IP 和端口号(在从节点的 sentinel.conf 中配置下面内容)
    sentinel monitor master节点名称(自己起的) master节点的IP master节点的端口号 从节点的个数
    
    # 哨兵每隔多久监听一次 Redis 架构, 单位是毫秒
    sentinel down-after-milliseconds 上面起的 master 节点的名称 30000 
  • 启动哨兵
    redis-sentinel 哨兵的配置文件


集群

  • Redis 集群在保证主从+哨兵的基本功能之外, 还能够提升 Redis 存储数据的能力- Redis 集群是无中心的, 即没有主从

  • Redis 集群之间有一个 ping-pang 机制, 即 Redis1Redis2 发了一个 ping, 那么 Redis2 会给 Redis1 返回一个 pang

  • Redis 集群的节点数量必须是 2n+1 个, 因为会有一个投票机制, 例如:

  • Redis1Redis2 发送消息后, 没有收到 Redis2 的回复, 此时 Redis1 并不知道到底是自己挂掉还是 Redis2 挂掉

  • 这个时候, Redis1 会去找 Redis3, 让 Redis3 再联系一下 Redis2, 看一下到底是谁的问题

  • 正因为这个投票机制, 所以集群节点的个数就必须是奇数个, 不能是偶数


  • Redis 集群中默认分配了 16384 个 hash 槽, 在存储数据的时候, 会对 key 进行 crc16 算法, 并对 16384 进行取余, 根据最终的结果, 将 keyvalue 放到对应的节点中

  • 每一个 Redis 集群都维护着相应的 hash

  • 为了保证数据的安全性, 集群的每一个节点, 都会有一个从节点, 这个从节点并不做读操作, 当集群的节点进行了写操作后, 他们对应的从节点也会进行相应的写操作, 当集群的节点挂掉后, 对应的从节点会立即上位

  • 可以单独针对集群中的某一个节点搭建主从架构从而来进一步提高查询效率

  • 当集群中超过半数的节点挂掉后, 整个 Redis 集群就会挂掉


  • Redis 中的配置如下:
    # 指定端口号
    port 端口号
    # 开启 Redis 集群
    cluster-enabled yes
    # 集群的信息文件 (文件名可以自定义)
    cluster-config-file nodes-6379.conf
    # 集群的对外IP地址
    cluster-announce-ip IP地址, 可以写虚拟机的IP
    # 集群对外的port
    cluster-announce-port 端口号,即上面指定的端口号
    # 集群的总线端口号
    cluster-announce-bus-port 一般是 1 + 上面指定的端口号
  • 启动 Redis 服务之后, 随便进入一个 Redis 客户端, 用以下命令进入:
    redis-cli --cluster create 所有节点的ip:端口号(每个节点之间用空格隔开) --cluster-replicas 1 (最后的1表示的意思是每一个节点后面有一个从节点)
  • Redis 集群在启动的时候, 一定要保证 Redis 中没有任何持久化数据

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~