redis的主从复制和持久化

主从复制

虽然redis有持久化机制,但是有时redis服务器重启也会丢失数据,因为redis重启后会将硬盘中的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能就会导致数据丢失,如果通过redis的主从复制就能很好的避免这种单点故障。

主redis数据库有两个从redis,即使其中一台服务器宕机,其他两台服务器照样可以正常工作

主redis和从redis是保持实时同步的,当主redis写入数据时通过主从复制机制会复制到两个从redis服务器上。

只有一个主redis,可以有多个从redis

主从复制不会阻塞主redis,在同步数据时,主redis可以继续处理客户端的请求

一个redis可以既是主又是从

主从配置

主redis配置:

无需特殊配置

从redis配置:

修改redis服务器上的redis.conf配置文件,添加slaveof 主redis ip 主redis端口

说明当前从redis服务器对应主redis服务器的的IP,端口

主从复制过程

完成复制过程

在redis2.8之前主从复制过程如图:

复制过程:

  1. slave服务启动,slave会建立和master的联系,发送sync同步命令
  2. master启动一个后台进程将数据库快照保存到rdb文件中

此时如果生成rdb文件过程中存在写数据操作会导致rdb文件和当前主redis数据不一致,所以此时master主进程会开始收集写命令缓存起来

  1. master就发送rdb文件给slave
  2. slave将rdb文件保存在磁盘中,加载到内存中恢复
  3. master把缓存命令转发给slave

后续master收到的写命令会通过之前建立的连接发送给slave,当master和slave连接断开时slave会自动重新建立连接,如果master同时收到多个slave发来的命令时,只启动一个进程写数据库镜像,发送给多个slave。

完成复制过程的问题:

Redis2.8之前从redis每次同步会从主redis复制全部数据,如果从redis是新建立的从主redis复制全部数据是没有问题的,但是如果当从redis停止运行,再启动运行时可能只有少部分数据不同步,这时从redis又要从主redis复制全部数据,这样性能肯定没有复制那一小部分没有同步数据快。

部分复制:

部分复制说明:

从redis连接主redis时,会主动发起psync命令,从机会提供主机的runid(机器标识,随机生成)和offset(数据偏移量,如果主从offset不一致则说明数据不同步)主机验证runid和offset是否有效,runid相当于主机身份验证码,用来验证从机上一次连接的主机,如果runid验证未通过则进行全同步(首次同步),验证通过则说明曾经同步过,根据offset同步部分数据。

持久化:

在这里顺便介绍下redis的持久化。

Redis的高性能是由于其数据全部存储到内存中,为了是redis重启后保证数据不会丢失,需要把redis内存中的数据同步到硬盘中,这一过程就是持久化。

RDB持久化:

RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时redis会自动将内存中的数据进行快照并持久化到硬盘中。

save 900 1

save 300 10

save 60 10000

save开头的一行就是持久化配置,可以配置多个条件(每一行配置一个条件),每个条件时“或”的关系,“save 900 1”表示15分钟(900秒)内至少1个键被更改则进行快照,

“save 300 10”表示5分钟(300秒)内至少10个键被更改则进行快照。

在redis.conf中

配置dir指定rdb快照文件的位置

配置dbfilenam指定rdb快照文件名

redis启动后会读取rdb快照文件,将数据从硬盘中加载到内存中,根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需要花费20~30秒钟。

问题总结:

通过RDB方式实现持久化,一旦redis异常退出,就会丢失最后一次快照以后更改的所有数据。一般根据应用场景来进行合理持久化将数据损失控制在接受范围内,如果是很重要的数据可以通过AOF方式持久化。

AOF持久化

默认情况下redis没有开启AOF(append only file)方式持久化,可以通过appendonly参数开启:

appendonly yes

开启AOF持久化后每执行一条会更改redis中的数据的命令,redis就会将该命令写入硬盘中的aof文件,aof文件保存位置和rdb文件保存位置相同,都是通过dir参数设置的,默认的文件名为appendonly.aof , 可以通过appendfilename参数修改:appendfilename appendonly.aof

原文地址:https://www.cnblogs.com/yumingzhao/p/8666521.html

时间: 2024-10-01 19:35:27

redis的主从复制和持久化的相关文章

redis内存优化、持久化以及主从复制

Redis 数据库内存优化参数的配置,每种持久化方式的利与弊以及主从复制的原理以及配置 一.常用内存优化手段与参数 redis的性能如何是完全依赖于内存的,所以我们需要知道如何来控制和节省内存. 首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本非常的高,所以要关闭VM功能,请检查你的redis.conf文件中 vm-enabled 为 no. 其次最好设置下redis.c

Redis基础学习(五)—Redis的主从复制

一.概述     Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件全量传输给slave,然后再将dump后的操作实时同步到slave中.让从服务器(slave server)成为主服务器(master server)的精确复制品. 以下是关于 Redis 复制功能的几个重要方面: (1)Redis 使用异步复制.从Redis 2.8 开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度. (

redis的主从复制部署和使用

reids一种key-value的缓存数据库目前非常流行的被使用在很多场景,比如在数据库读写遇到瓶颈时缓存且读写分离会大大提升这块的性能,下面我就说说redis的主从复制 首先需要启动多个redis实例,master.slave.slave,持久化.端口更改等其他配置在此不在多说,所有的配置都在.conf文件中 作为master节点的conf不需做配置,其中slave-read-only yes表示所有和master相关的字节都为只读的, 要作为slave字节的conf需要配置,放开slaveo

菜鸟爬坑--Redis学习与探索(三):Redis的主从复制

什么是Redis主从复制 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制非常简单. Redis主从复制原理 在Slave启动并连接到Master之后,它将主动发送一个SYNC命令.此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步.而Slave服务器在接收到数据库

redis的主从复制配置

redis的主从复制配置 一.     原理 Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面是关于redis主从复制的一些特点:1.master可以有多个slave2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构3.主从复制不会阻塞master.也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理cl

redis之(十四)redis的主从复制的原理

一:redis主从复制的原理,步骤. 第一步:复制初始化 --->从redis启动后,会根据配置,向主redis发送SYNC命令.2.8版本以后,发送PSYNC命令. --->主redis收到SYNC命令后,开始在后台保存快照文件(即RDB持久化的过程),并将保存快照期间接收到的命令缓存起来. --->当主redis完成快照后,主redis会将快照文件和缓存命令发送给从redis.复制初始化结束. --->当主redis的复制初始化结束后,主redis每当收到写命令就会异步将写命令

(转载).NET中使用Redis(三)Redis 的主从复制

Redis跟MySQL一样,拥有非常强大的主从复制功能,而且还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构. redis的主从复制是异步进行的,它不会影响master的运行,所以不会降低redis的处理性能.主从架构中,可以考虑关闭Master的数据持久化功能,只让Slave进行持久化,这样可以提高主服务器的处理性能.同时Slave为只读模式,这样可以避免Slave缓存的数据被误修改. 1.配置 实际生产中,主从架构是在几

【深入学习Redis】主从复制(上)

前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的是Redis数据的单机备份问题(从内存到硬盘的备份):而主从复制则侧重解决数据的多机热备.此外,主从复制还可以实现负载均衡和故障恢复. 这篇文章中,将详细介绍Redis主从复制的方方面面,包括:如何使用主从复制.主从复制的原理(重点是全量复制和部分复制.以及心跳机制).实际应用中需要注意的问题(如数

企业——Redis的主从复制的搭建

一.Redis的基本简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是:redis会周期性的把更新的数据写入磁盘或者把修改