zoukankan      html  css  js  c++  java
  • Redis 设计与实现 (五)--多机数据库的实现

    多机数据库的实现

    一、复制

       slaveof  主服务器ip地址。形成主从关系。

      1、同步  

         从向主服务器发送sync命令。

         主服务器收到sync命令执行bgsave,生成rdb文件,缓冲区同时记录从现在开始执行的所有命令。

         主服务器执行完毕bgsave命令,会将rdb文件发送给从服务器,从服务器接收并载入这个rdb文件,同步给主服务器状态

         主服务器发送缓冲区的命令给从服务器,从服务器执行当前命令,保持数据最终一致。 

      2、命令传播

        第一步同步,类似于初始化。

        后续还需要,主从服务器实时同步。

        主服务器将 写命令同步发送给从服务器执行。保持主从一致。

      3、断点续传

        psync 分为完全同步,部分同步

        (1)复制偏移量

        • 主服务器每次想从服务器创博N个字节数据时,同时将自己的复制偏移量加N.
        • 从服务器接收N个字节数据,同时更新自己的偏移量加N.       

        (2)复制积压缓冲区

        • 主服务器将缓冲区命令发送给从服务器,同时更新复制积压缓冲区,标记命令字节的偏移量。
        • 主服务器会根据这个积压偏移量,选择同步命令的方式。              

        (3)同步服务器ID

            根据ID和存储的ID对比选择不同的同步方式。

    二、Sentinel

       哨兵策略是redis高可用的解决方案(一个或者多个哨兵实例组成的哨兵系统),可以监视多个主服务器。

       (1)故障转移

        • 监测到主服务器下线,选举主服务器下的一个从服务器升级为主服务器.
        • 通知其他从服务器,更新主服务器地址.
        • 监视下线服务器,并将下线的服务器升级为从服务器.

    三、集群

       集群实现了分布式数据库解决方案

      1、节点:cluster meet <ip><port>

        node节点发送上述命令到指定的ip:port节点,它们进行握手,成功后,将指定的ip:port节点添加到node的集群中。

      2、启动节点

        一个节点就是一个运行在集群模式下的redis服务器,根据cluster-enable来判断是否开启集群模式。

      3、配置槽位:通过分片方式来保存数据库中的键值对,集群的整个数据库被分为 0~16384个槽位

        cluster addslots <一个或者多个槽位>

       节点之间互相同步自己的槽位

        数据库要处理的键属于哪个槽 ->指派当前节点->没有的话,moved,下一个->直到找到为止

           键槽位算法:cluster keyslot <key>

           4、重新分片

        moved  槽的负责权有一个节点转移到另一个节点

              ask   槽迁移过程中使用的临时措施

      5、复制故障转移

        集群分为主节点和从节点,主节点用于处理槽,子节点用于复制主节点   

        在主节点下线时,代替主节点继续处理命令请求。

        cluster replicate <node-id>  node-id 为主节点,接收此命令的节点为子节点

  • 相关阅读:
    MVC3的零散记录 EF常见的转换规则
    MVC3的零散记录 设置区域(Areas)后遭遇IE浏览器 jQuery未定义错误
    Visual Studio 2010 选中高亮插件 Highlight all occurrences of selected word
    asp.net mvc 在表单中输入html标记
    实验818 报数 (20 分)
    关于SQL SERVER中获取表的主键名
    MVC4的新增功能之前端优化
    winform中实现不重复创建窗体
    微盘产品分析(零):时代向前走了一步
    网络相册产品分析(一):十年需求变迁
  • 原文地址:https://www.cnblogs.com/sunchong/p/8404417.html
Copyright © 2011-2022 走看看