• Redis-主从复制/集群


    目录

    一、主从复制

    1.1 概念

    1.2 特点

    1.3 原理

    二、集群

    2.1 概念

    2.2 slots

    2.3 特点

    2.4 优缺点


    一、主从复制

    1.1 概念

            主从复制,简单来说就是主机数据更新后根据配置策略自动同步从机master/slaver机制Master以为主,Slave以为主。

            可以实现读写分离、性能扩展、容灾快速恢复

    1.2 特点

            1.可以在主机,在从机取数据,但在从机数据会被拒绝

            2.主机挂掉,重启就行;从机重启需重设(我附庸于谁?)

            3.假如从机是后来加入的,它将从头复制数据,而不是从切入点复制。

            4.若master挂掉,后面slave可以顶替master的位置,其后面slave不用做任何修改。以前的master恢复后只能做slave了(反客为主)。

            但这需要手动设置,想要自动设置要开启哨兵模式(反客为主的自动版),能够在后台监控主机是否故障。如果故障了根据投票数(优先级别)自动将从库转换为主库。这需要单独配置一个sentinel.conf,因为哨兵是一个单独服务器

     

    优先级 - 在redis.conf中默认:slave-priority 100,值越小优先级越高

    偏移量 - 是指获得原主机数据最全的

    rinid - 每个redis实例启动后都会随机生成一个40位的runid

            5.上一个Slave可以是下一个slaveMasterSlave同样可以接收其他 slaves连接同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master写压力,去中心化降低风险(薪火相传)。

    1.3 原理

    1. Slave启动成功连接到master后会发送一个sync命令
    2. Master接到命令启动后台的存盘进程(RDB),同时收集所有接收到的用于修改数据集的命令, 在后台进程执行完毕之后,master将传送整个数据文件(RDB)slave,以完成一次完全同步
    3. 全量复制slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
    4. 增量复制Master继续将新的所有收集到的修改命令依次传给slave,完成同步
    5. 重新连接master,会自动执行一次完全同步全量复制)
    6. 每次主服务器进行写操作后,都会和从服务器进行数据同步增量复制

    二、集群

            传统的主从复制模式可能存在容量不足、并发写的问题,另外,若主机宕机,会导致ip地址发生变化,应用程序中配置需要修改对应的主机地址端口等信息。之前通过代理主机来解决,但是redis3.0中提供了解决方案。就是无中心化集群配置。

     

    2.1 概念

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

            Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求

    2.2 slots

            假设一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个都属于这 16384 个插槽其中一个

            集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

            集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:

            节点 A 负责处理 0 号至 5460 号插槽

            节点 B 负责处理 5461 号至 10922 号插槽。

            节点 C 负责处理 10923 号至 16383 号插槽。

            其实就是很像hash算法,将数据分散存在多个区域中。

    2.3 特点

            1.在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址端口

            2.redis-cli客户端提供了 c 参数实现自动重定向

                    如 redis-cli  -c p 6379 登入后,再录入查询键值对可以自动重定向

            3.即使连接的不是主机,集群会自动切换主机存储。主机,从机

            4.无论从哪台主机写的数据,其他主机上都能读到数据

            5.不在一个slot下的键值,是不能使用mget,mset多键操。可以通过{ }来定义的概念,从而使key中{ }内相同内容的键值对放到一个slot中去。

            6.如果主节点下线,从节点自动升为主节点主节点恢复后,回来变成从机

            7.如果所有某一段插槽主从节点掉,根据配置文件的不同设置,整个集群挂掉或者插槽数据全都不能使用,也无法存储

    2.4 优缺点

    优点

            1.实现扩容

            2.分摊压力

            3.无中心配置相对简单

    不足

            1.多键操作是不被支持的

            2.多键的Redis事务是不被支持的。lua脚本不被支持

            3.由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

  • 相关阅读:
    【2024官方文档版学习笔记】React 状态管理
    奖励 CSDN 社区的领军人物
    python 图形界面“诈金花”游戏,更新了!附完整代码
    开源教育论坛| ChinaOSC
    算法手撕代码66~70
    手记系列之二 ----- 关于IDEA的一些使用方法经验
    逻辑回归与决策边界解析
    【Elasticsearch】ES选主流程分析
    对“方法”的解读
    密码技术 (6) - 证书
  • 原文地址:https://blog.csdn.net/weixin_62427168/article/details/126287360