redis持久化和主从同步

redis持久化rdb与aof

简介

Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。

RDB持久化

redis 提供了 RDB持久化 的功能,这个功能可以将 redis 在内存中的状态保存到硬盘中,它将手动执行。

也可以在 redis.conf 中配置,定期执行。

RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。

实例:

1,启动redis服务端,修改配置文件redis.conf(修改前先备份)

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379              #定义持久化文件存储位置
dbfilename  dbmp.rdb        #rdb持久化文件
bind 10.0.0.10  127.0.0.1    #redis绑定地址
requirepass 123            #redis登录密码
save 900 1                    #rdb机制 每900秒 有1个修改记录
save 300 10                    #每300秒        10个修改记录
save 60  10000                #每60秒内        10000修改记录

2.启动redis服务端

3.登录redis

redis-cli -a 123

4.此时检查目录,/data/6379底下还没有dbmp.rdb文件

5.通过save触发持久化,将数据写入RDB文件

127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> save
OK

6.此时再查看,发现多了两个文件

AOF持久化

AOF(append-only log file) 记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集 AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。 优点:最大程序保证数据不丢 缺点:日志记录非常大

redis-client   写入数据  >  redis-server   同步命令   >  AOF文件

配置参数介绍:

# AOF持久化配置,两条参数

appendonly yes
appendfsync  always  # 总是修改类的操作
                    everysec  # 每秒做一次持久化
                    no  # 依赖于系统自带的缓存大小机制

实例:

1.修改配置文件 redis.conf(先备份)

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename  dbmp.rdb
requirepass 123
save 900 1
save 300 10
save 60  10000
appendonly yes
appendfsync everysec

2.启动redis服务

redis-server /etc/redis.conf

3.检查redis数据目录/data/6379/是否产生了aof文件

[[email protected] 6379]# ls
appendonly.aof  dbmp.rdb  redis.log

4.登录redis-cli,写入数据,实时检查aof文件信息

[[email protected] 6379]# tail -f appendonly.aof

5.设置新key,检查aof信息,然后关闭redis,检查数据是否持久化

redis-cli -a 123 shutdown

redis-server /etc/redis.conf

redis-cli -a 123

区别:

  rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能

  aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog

redis主从同步

原理

  1. 从服务器向主服务器发送 SYNC 命令。
  2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
  3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
  4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。

=====================================================

  1. 在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
  2. 同步开始之后,通过主库命令传播的方式,主动的复制方式实现
  3. 2.8以后实现PSYNC的机制,实现断线重连

实例

环境准备


1,创建三个文件夹

 mkdir /data/ 6380 6381 6382

2,复制三份 nginx.conf 并修改内容

port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no

6380.conf

port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
protected-mode no

6381.conf

daemonize yes
pidfile /data/6382/redis.pid
loglevel notice
logfile "/data/6382/redis.log"
dbfilename dump.rdb
dir /data/6382
protected-mode no

6382.conf

3,分别启动三个实例

redis-server /data/6380/redis.conf
redis-server /data/6381/redis.conf
redis-server /data/6382/redis.conf

主从规则:

  主节点: 6380

  从节点: 6381, 6382

4,配置主从同步

# 6381窗口界面命令行
redis-cli -p 6381  # 启动6381客户端
SLAVEOF 127.0.0.1 6380  #指明主的地址

# 6382窗口界面命令行
redis-cli -p 6382  # 启动6382客户端
SLAVEOF 127.0.0.1 6380  #指明主的地址

5,检测主从状态

# 从库
127.0.0.1:6382> info replication
127.0.0.1:6381> info replication

#  主库
127.0.0.1:6380> info replication

6,测试写入数据,主库写入数据,检测从库数据

# 主:
127.0.0.1:6380> set name peng

# 从:
127.0.0.1:6381>get name 

如果主库挂了!

解决方案:

1,手动进行主从复制故障切换

# 关闭主库6380
redis-cli -p 6380
shutdown

2,检查从库主从信息,此时 master_link_status:down

redis-cli -p 6381
info replication

redis-cli -p 6382
info replication

3,既然主库挂,那就在6380和6382之间选一个新的主库

a,关闭6381的从库身份

redis-cli -p 6381
info replication
slaveof no one

b,将6382设为6381的从库

# 6382连接到6381:
[[email protected] ~]# redis-cli -p 6382
127.0.0.1:6382> SLAVEOF no one
127.0.0.1:6382> SLAVEOF 127.0.0.1 6381

c,检查6382,6381的主从信息

原文地址:https://www.cnblogs.com/peng104/p/10274857.html

时间: 2024-11-06 13:54:04

redis持久化和主从同步的相关文章

redis学习笔记——主从同步(复制)

在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),如图所示. 假设现在有两个Redis服务器,地址分别为127.0.0.1:6379和127.0.0.1:12345,如果我们向服务器127.0.0.1:12345发送以下命令: 127.0.0.1:12345> SLAVEOF 127.0.0.1 6379O

redis持久化,主从及数据备份

http://blog.csdn.net/lang_man_xing/article/details/38386113 现在在项目里已经大量使用redis了,为了提高redis的性能和可靠性我们需要知道和做到以下几件事: 常用内存优化手段与参数 redis的性能如何是完全依赖于内存的,所以我们需要知道如何来控制和节省内存. 首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本

【转】Redis主从同步与集群管理

转自http://blog.csdn.net/u012152619/article/details/52854465 1.主从同步原理 像MySQL一样,Redis是支持主从同步的,而且也支持一主多从以及多级从结构.主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担.Redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低Redis的处理性能.主从架构中,可以考虑关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提

redis主从同步原理

redis主从: 作用: 实现数据的实时备份,可用来实现redis的读写分离及redis高可用 主从同步原理: 一主一从环境: 环境:2台redis,一台master一台slave 1,master等待命令进入 2,slave连接master,发送一个sync命令 3,master开始执行BESAVE,并使用缓冲区记录BESAVE之后所执行的所以写命令 4,slave端如果现在有请求进来,可以根据配置项来决定是继续用当前数据做处理客户端的请求还是给客户端返回报错 5,master BESAVE执

Redis主从同步之主库挂死解决方案

Redis实现了主从同步,但是主库挂死了,如何处理 方案:切换主库的身份 # 连接从库 [[email protected] redis-4.0.12]# redis-cli -p 6380 # 取消从库身份 127.0.0.1:6380> slaveof no one # 连接从库 [[email protected] redis-4.0.12]# redis-cli -p 6381 # 重新设置从库 127.0.0.1:6381> slaveof 127.0.0.1 6380 切换完成!

Redis发布-不重启转换-持久化-主从同步

redis发布订阅 应用场景 1.今日头条订阅号.微信订阅公众号.新浪微博关注.邮件订阅系统 2.即使通信系统 3.群聊部落系统(微信群) 使用方法: # 发布者: PUBLISH 频道 消息 # 订阅者: SUBSCRIBE 频道 # 正则匹配:(订阅者订阅) PSUBSCRIBE *频道 (例: *zhibo或zhibo*) 例子 redis-cli: # 发布者: > PUBLISH wang 123 redis-cli: # 订阅者: > SUBSCRIBE wang # 发布者发送1

redis持久化策略梳理及主从环境下的策略调整记录

redis是一个内存数据库,它的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为"半持久化模式"):也可以把每一次数据变化都写入到一个Append Only File(AOF)里面(这称为"完全持久化模式").redis提供了两种不同级别的持久化方式:一种是默认的RDB(filesnapshotting快照)持久化,一种是AOF持久化,这两种持久化方式都可以将内存中的数据库状态保存到磁盘上,但是原理非常不同,区别很明显! 1.RDB持久化可以在

Redis(三)-- 主从同步

一.主从同步的工作原理 redis主从复制过程: 当配置好slave后,slave与master建立连接,然后发送sync命令.无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存.后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave.如果master同时收到多

Redis主从同步分析

一.Redis主从同步原理1.1 Redis主从同步的过程配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令.无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中.同时master主进程会开始收集新的写命令并缓存起来.当后台进程完成写文件后,master就将快照文件发送给slave,slave将文件保存到磁盘上,然后加载到内存将数据库快照恢复到slave上.slave完成快照文件的恢复后