说起redis有很多的使用场景,如缓存、队列、顺序排列、发布订阅、定位缓存等等,日常中大多使用redis做高速缓存以及分布式锁,那么我们需要如何保证redis的高可用呢?答案是>>集群模式。
大家都知道redis集群有三种模式:
1、主从模式
2、sentnal哨兵模式
3、cluster模式
今天我们先就主从模式做简单总结。
1、reids主从模式原理图
2、redis主从模式复制原理
redis 的复制分为两部分操作 同步(SYNC)和 命令传播(command propagate)
同步(SYNC)用来将从服务器的状态 更新到 和主服务器 一致。就是从服务器主动获取 主服务器的数据。保持数据一致。具体实现是,主服务器收到SYNC命令后,生成RDB快照文件,然后发送给从服务器。
命令传播 (command propagate)用于在主服务器数据被修改后,主从不一致,为了让从服务器保持和主服务器状态一致,而做的命令传播。就是主服务器收到客户端修改数据命令后,数据库数据发生变化,同时将命令缓存起来,然后将缓存命令发送到从服务器,从服务器通过载入缓存命令来达到主从数据一致。这就是所谓的命令传播。
为什么需要有同步和命令传播的两种复制操作:当只有同步操作时候,那么在从服务器向主服务器发送SYNC命令时候,主服务器在生成RDB快照文件时候,仍然会收到客户端的命令修改数据状态,这部分数据如果不能传达给从服务器,那么就会出现主从数据不一致的现象。这时候就出现了命令传播,主服务器收到从服务器的SYNC命令后,生成RDB快照文件同时,将此段时间内收到的命令缓存起来,然后使用命令传播的操作发送从服务器。来达到主从数据一致。
3、redis主从复制优缺点
优点:
1、实现读写分离,提高了可用性,解决了单机故障
2、主从复制期间master和slave都是非阻塞方式,仍然可用。
缺点:
1、master宕机期间,需要手动切换主机,同时会有部分数据不能及时同步从服务器,造成数据不一致(需要人工手动介入)
2、slave宕机后,多个slave恢复后,大量的SYNC同步会造成master IO压力倍增(可以手动规避启动时间)
3、在线扩容较复杂。
寄语:主从模式的Sync同步操作主要是从节点拉取主节点RDB快照实现同步数据,Command Propagate命令传播则是解决从节点同步主节点非阻塞产生的新数据的不一致问题,这部分主节点的缓存命令会发送到从节点从而实现数据一致性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154708.html