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文件
[root@localhost 6379]# ls
appendonly.aof dbmp.rdb redis.log
4.登录redis-cli,写入数据,实时检查aof文件信息
[root@localhost 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主从同步
原理
- 从服务器向主服务器发送 SYNC 命令。
- 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
- 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
- 主服务器将缓冲区储存的所有写命令发送给从服务器执行。
=====================================================
- 在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
- 同步开始之后,通过主库命令传播的方式,主动的复制方式实现
- 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:
[root@localhost ~]# 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的主从信息
redis持久化和主从同步的更多相关文章
- Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步
Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.
- MariaDB主从复制,redis发布订阅,持久化,以及主从同步
一. MariaDB主从复制 mysql基本操作 1 连接数据库 mysql -u root -p -h 127.0.0.1 mysql -u root -p -h 192.168.12.60 2 ...
- Redis之持久化和主从同步
Redis作为内存数据库,所有数据都保存在内存中, 一旦程序停止工作, 数据都将丢失. 需要我们重新从其他地方加载数据. 不过Redis提供了两种方式保存Redis中的数据一种是dump内存直接存入r ...
- redis 持久化 哨兵 主从
Redis搭建步骤 环境: 三台机器 centos7 关闭防火墙 selinux Redis版本 3.0.5 依赖环境 yum install gcc-c++ ruby rubygems –y 把版 ...
- Redis持久化、主从与哨兵架构详解
目录 Redis持久化 RDB快照(snapshot) AOF(append-only file) AOF重写 Redis 4.0 混合持久化 Redis数据备份策略: Redis主从架构 Redis ...
- redis学习笔记——主从同步(复制)
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复 ...
- redis 分布式,主从同步
redis和memcache比较像的,memcache可以实现服务器的集群,redis肯定也是可以的.下面在一台机,实现redis主从复制. 1,copy一下redis.conf,生成一个从机的配置 ...
- redis持久化以及主从服务器的配置
作者:silenceper 日期:2013-10-03 原文地址:http://silenceper.com/archives/959.html redis 与memcached 最大的一个区别就是R ...
- redis持久化,主从及数据备份
http://blog.csdn.net/lang_man_xing/article/details/38386113 现在在项目里已经大量使用redis了,为了提高redis的性能和可靠性我们需要知 ...
随机推荐
- vue的项目结构记录
vue的项目结构 不知道大家有没这样的情况,面对刚配置好的脚手架,创建的文件不知道该放哪个文件下,导致后面开发一些文件不好找,不利于维护. 接下来我说说我项目中的一些文件: 首先是components ...
- 浅谈ST表
发现自己学的一直都是假的ST表QWQ. ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到$O(nlogn)$预处理,$O(1)$查询最值 算法 ST表是利用 ...
- TS学习随笔(四)->数组的类型
少侠们,今天我们继续来搞一搞TS 今天我们要来看一看TS中数组的定义是个什么鬼样子 数组的类型: 在 TypeScript 中,数组类型有多种定义方式,比较灵活.下面我们来看看有哪些定义方法 「类型 ...
- java 应用程序的编译和运行
1.java 文件的编译和执行步骤. 第一步:使用编辑器编辑 后缀为java的文件,里面包含主类(包含 main()函数), 源文件的命名规则是,如果源文件中有多个类,那么只能有一个类是public ...
- Android细笔记--DataStorage
Shared Preferences 即使应用被杀了,shared preference也还是存在的 Internal Storage 创建于internal的文件只对本应用开放权限,即使手机用户本身 ...
- (最详细)小米MIX的Usb调试模式在哪里打开的教程
当我们使用安卓手机链接pc的时候,或者使用的有些应用比如我们团队营销团队当使用的应用引号精灵,以前老版本就需要开启Usb调试模式下使用,现当新版本不需要了,如果手机没有开启Usb调试模式,pc则没法成 ...
- 微信小程序(二)登录授权实现
相对于上一节,这一节主要是动态获取数据,主要是对登陆信息的接收,以及页面获取授权按钮的相对相应(未授权时,显示,授权后不显示) 关键在于状态值的判断,以及对页面的不同响应(m-->v) wxml ...
- textarea 输入长度限制
<textarea " placeholder="请输入详细地址(100字以内)"></textarea>
- Linux 中使用 firewalld
firewalld 是一种动态防火墙管理解决方案.Centos 7 默认使用 firewalld.firewalld 是对 iptables 的一个封装,可以让你更容易地管理 iptables 规则. ...
- Linux下创建桌面快捷方式
建立一个文本文件,文件名必须以.desktop结尾,.desktop前面的作为快捷方式的名称 添加如下内容 [Desktop Entry]Encoding=UTF-8Name=PostmanExec= ...