Redis 的复制功能分为同步(sync)和命令传播(command propagate)这两个操作
命令传播:主服务器的数据库状态被修改,导致主从服务器的数据库状态不一致,让主从服务器数据库重新回到一致状态。
《Redis设计与实现》读书笔记(二十五) ——Redis主从复制具体过程 (原创内容,转载请注明来源,谢谢) 一、PSYNC命令执行过程 psync是新版redis复制使用的命令
技术是为了解决问题而生的,Redis 的 Sentinel 系统实现了 Redis 主从服务器的自动切换。
好的,今天我们要上【铂金二】了,如果还没有上铂金的,赶紧先去蹭蹭经验再回来(不然不带你上分了):
Redis中用户可以执行slaveof命令让一个服务器去复制另一个服务器,被复制的服务器称为主服务器,另一个服务器称为从服务器。例如服务器127.0.0.1:6379从服务器127.0.0.1:12345复制内容的命令如下所示:
《Redis设计与实现》读书笔记(二十七) ——Redis哨兵(sentinel)主服务器下线判断与故障转移 (原创内容,转载请注明来源,谢谢) 一、主观下线检测 默认情况下,sentinel会每秒
1、从库向主库发送sync命令,也就是从库向主库发送同步请求; 2、当主库接受到sync命令后,会执行bgsave命令(保存此刻主库的一个快照),创建一个RDB文件,创建RDB文件期间主库上的执行过的命令都会被保存到缓冲区中; 3、当主库执行完bgsave时,会向从库发送RDB文件,从库接受该文件并加载该文件,将自己的数据库状态更新至主服务器执行BGSAVE命令时的数据库状态; 4、主库将缓冲区的所有写命令发给从库执行; 5、至此可以认为redis主从建立成功,之后主库的每一个写命令都会传到从库上执行。 复制原理说明: master创建RDB文件是通过一个子进程进行的,所以master依然可以处理客户端发来的请求。但这也导致了在保存RDB文件期间,“键空间”可能发生变化(譬如接收到一个客户端请求,执行”set name diaocow”命令),因此为了保证数据同步的一致性,master会在保存RDB文件期间,把接受到的这些可能变更数据库“键空间”的命令保存到缓冲区中。
订阅连接:订阅某个频道,频道有消息马上读取,一个频道上的消息会发给多个订阅者,所以是一发多收
Redis的复制功能的作用和大多数分布式存储系统一样,就是为了支持主从设计,主从设计的好处有以下几点:
言归正传,今天要说的可是个大家伙,毕竟从现在开始,咱不整简单功能啦,整点厉害的,哈哈哈
面试官:要不你来讲讲你最近在看的点呗?可以拉出来一起讨论下(今天我也不知道要问什么)
Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成Sentinel Cluster,可以监控任意多个master服务器,及这些master下属的slave服务器。当被监视的master进入下线状态时,Sentinel Cluster会自动将其下属的slave中的一个升级为master,然后由新的master代替已下线的master继续提供服务。
Redis 作为一门非关系型数据库,其复制功能和关系型数据库(MySQL)来说,功能其实都是差不多,无外乎就是实现的原理不同。Redis 的复制功能也是相对于其他的内存性数据库(memcached)所具备特有的功能。
Redis支持主从复制功能,用户可以通过执行slaveof命令或者在配置文件中设置slaveof选项来开启复制功能。例如,现在有两台服务器—127.0.0.1:6379和127.0.0.1:7000,向服务器127.0.0.1:6379发送下面命令:
应用系统访问到master Redis服务器中,进行写数据的操作,当数据写入完成后,master服务器会将写入的数据复制到Slave从服务器中,进行数据的同步,当应用系统读取数据的时候,会去从服务器中读取数据。主服务器只做写数据操作,从服务器只做读数据的操作,这样减轻了各服务器的压力,提高读写效率,将读、写份离开,也就是数据的读写分离。
在Redis中,复制功能是通过使用主从模式来实现的。一台Redis服务器(称为主服务器)可以有多个从服务器连接到它。
Sentinel(哨兵、哨岗)是Redis的高可用(high availability)解决方案:由一个或多个Sentinel实例组成Sentinel系统可以监视任意多个主服务器以及它们属下的所有从服务器,并在监视主服务器进行下线时,将主服务器下属的从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
上一篇介绍了Redis的主从服务器之间是如何同步数据的。试想下,在一主一从或一主多从的结构下,如果主服务器挂了,整个集群就不可用了,单点问题并没有解决。Redis使用Sentinel解决该问题,保障集群的高可用。
MySQL的复制是指将一个数据库实例的数据复制到另一个数据库实例,使两个实例的数据保持一致。复制是MySQL高可用性和可扩展性的重要组成部分,它可以提供数据备份、读写分离以及故障恢复等功能。
好的,今天我们要上铂金段位了,如果还没经历过青铜和白银和黄金阶段的,可以先去蹭蹭经验再回来:
Redis作为一个支持分布式的数据库,多机操作显得格外重要,本文就Redis多机功能中的复制、哨兵与集群功能做简单的分析。
这篇文章主要讲述Redis的主从复制功能。会依次从环境搭建、功能测试和原理分析几个方面进行介绍。
《Redis设计与实现》读书笔记(二十四) ——Redis主从复制原理 (原创内容,转载请注明来源,谢谢) 一、概述 redis中,可以用slaveof命令,或者在配置中设置slaveof选项,让一个服务器去复制另一个服务器。去复制的服务器称为从服务器(slave),被复制的称为主服务器(master)。 主服务器的增删改,在从服务器中都会一并有改动。 redis2.8之前(不含2.8)的版本(下称旧版),和之后(含2.8)的版本(下称新版),对于复制的做法有所不同,
尽管 Redis 的性能很好,但是有时候依旧满足不了应用的需要,比如过多的用户进入主页,导致 Redis 被频繁访问,此时就存在大量的读操作。显然单靠一台 Redis 服务器是完全不够用的 当主服务器不能正常工作的时候,我们希望从服务器代替原来的主服务器,作为灾备,以保证系统可以继续正常的工作 。
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
复制功能是Redis提供的多机功能中最基础的一个,这个功能是通过主从复制(master-slave replication)模式实现的,它允许用户为存储着目标数据库的服务器创建出多个拥有相同数据库副本的服务器,其中存储目标数据库的服务器被称为主服务器(master server),而存储数据库副本的服务器则被称为从服务器(slave server,或者称为replica)
今天有位朋友私下和我说,他昨天电话面试被问到Redis的高可用方案。于是决定今天来分享这个问题。如果你对此有另外的答案,不妨微信联系我,我拉你进群,让更多的人知道,做一个纯粹的技术分享达人。
之前记录了关于Redis的数据结构和对象的知识(可以点Redis标签看看),下面开始填坑。
一、MySQL简单复制相关概念: mysql复制的意义:Mysql复制是使得mysql完成高性能应用的前提 mysql复制的机制: SLAVE端线程: IO thread: 向主服务请求二进制日志中的事件 当读取完毕后,IO线程将进行睡眠,当主服务器有新数据时,则主服务器唤醒从服务器的IO线程 SQL thread:从中继日志读取事件并在本地执行, 如果二进制日志开启式,同样会记录二进制日志,但为了节约空间和提高性能,需要关闭从服务器不能执行写操作,如果执行写操作则和主服务器不同步。 MASTER端
Redis哨兵系统由一个或者多个哨兵实例组成,它可以监视任意多个主服务器以及主服务器对应的从服务器,当主服务器下线后,哨兵系统会执行故障转移操作,挑选一个从服务器作为新的主服务器,并在下线服务器上线后将其作为新主服务器的从服务器。示意图如下:
前面介绍Redis,我们都在一台服务器上进行操作的,也就是说读和写以及备份操作都是在一台Redis服务器上进行的,那么随着项目访问量的增加,对Redis服务器的操作也越加频繁,虽然Redis读写速度都很快,但是一定程度上也会造成一定的延时,那么为了解决访问量大的问题,通常会采取的一种方式是主从架构Master/Slave,Master 以写为主,Slave 以读为主,Master 主节点更新后根据配置,自动同步到从机Slave 节点。
redis-server /path/to/sentinel.conf --sentinel
如果像面试官说的这种场景,再使用上面我提到的AOF缓冲区就有点浪费内存空间了。所以Redis会将主服务器的这条Del删除命令,发送给从服务器。
哨兵(Sentinel)是 redis 的高可用性解决方案,前面我们讲的主从复制它是高可用的基础,需要人工介入才能完成故障转移,哨兵可以解决这个问题,在主从复制情况下,当主节点发生故障时,哨兵可以自动的发现故障并且完成故障转移,实现真正的 redis 高可用。在哨兵集群中,哨兵会监视所有的 redis 服务器和其他 sentinel 节点状态,来保证 redis 的高可用。
主从复制,指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台 Redis 服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。您看,像在mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到从服务器的更新中去。当一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新
Redis的哨兵机制就是解决我们以上主从复制存在缺陷(选举问题),保证我们的Redis高可用,实现自动化故障发现与故障转移。
为什么要提这个呢,因为Redis主从库目的呢其实就是为了实现高可靠。上篇文章中我们说过Redis的AOF、RDB日志其实就是为了减少数据丢失,这是高可靠的一部分。
⚗ 可以通过复制功能来让主服务器免于执行持久化操作,由从服务器去执行持久化操作即可。
《Redis设计与实现》读书笔记(二十六) ——Redis哨兵(sentinel)启动与建立监听机制 (原创内容,转载请注明来源,谢谢) 一、概述 哨兵(Sentinel)是redis高可用性的解决方案,由一个或多个哨兵实例组成的哨兵系统,可以监视任意多个主服务器,以及这些主服务器属下的从服务器。 当被监视的主服务器下线时,根据某些规则挑选一个从服务器,作为新的主服务器。接着,其他从服务器会向新的主服务器发送复制指令,并且完成复制。同时,哨兵会监视下线的原主服务器,在它重新上线后,将它也置为从服务器。 二、
如果主服务器失效,则后备服务器应该开始故障转移过程。如果后备服务器失效,则不会有故障转移发生。如果后备服务器可以被重启(即使晚一点),由于可重启恢复的优势,那么恢复处理也能被立即重启。如果后备服务器不能被重启,则一个全新的后备服务器实例应该被创建。
在 redis3.0 以前的版本要实现集群一般是借助哨兵 sentinel 工具来监控 master 节点的状态,如果 master 节点异常,则会做主从切换,将某一台 slave 作为 master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。
Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝。需要清除Redis主从复制的几点重要内容: 1)Redis使用异步复制。但从Redis 2.8开始,从服务器会周期性的应答从复制流中处理的数据量。 2)一个主服务器可以有多个从服务器。 3)从服务器也可以接受其他从服务器的连接。除了多个从服务器连接到一个主服务器之外,多个从服务器也可以连接到一个从服务器上,形成一个 图状结构。 4)Redis主从复制不阻塞主服务器端。也就是说当若干个从服务器在进行初始同步时,主服务器仍然可以处理请
领取专属 10元无门槛券
手把手带您无忧上云