Redis持久化存储与主从复制
4. redis持久化
Redis
是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis
提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。
4.1 RDB持久化
redis
提供了RDB持久化
的功能,这个功能可以将redis
在内存中的的状态保存到硬盘中,它可以手动执行。
也可以再redis.conf
中配置,定期执行。
RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。
优点: 速度快,适合做备份,主从复制就是基于RDB持久化功能实现
配置参数:
touch redis-rdb.conf
加入如下的内容
daemonize yes #后台运行redis
port 6379 #指定redis的端口
logfile /data/6379/redis.log #redis日志文件
dir /data/6379/ #定义持久化文件存储位置,需要手动创建文件夹
dbfilename redis-rdb.rdb #rdb持久化文件
bind 0.0.0.0 #redis启动地址
save 10 5 #10秒内,超过5个修改类的操作,就触发持久化
手动触发
127.0.0.1:6379> save
OK
4.2 AOF持久化
AOF(append-only log file)
记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
优点:最大程序保证数据不丢
缺点:日志记录非常大
redis-client 写入数据 > redis-server 同步命令 > AOF文件
配置参数
AOF持久化配置,两条参数
appendonly yes
appendfsync always 总是修改类的操作
everysec 每秒做一次持久化
no 依赖于系统自带的缓存大小机制
touch redis-aof.conf
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
appendonly yes
appendfsync everysec
启动redis服务
redis-server /etc/redis.conf
检查redis数据目录/data/6379/是否产生了aof文件
[root@linux 6379]# ls
appendonly.aof dbmp.rdb redis.log
登录redis-cli,写入数据,实时检查aof文件信息
[root@linux 6379]# tail -f appendonly.aof
设置新key,检查aof信息,然后关闭redis,检查数据是否持久化
pkill -9 redis
redis-server /etc/redis.conf
redis-cli
4.3 不重启切换rdb数据到aof
第一步:首先准备一个rdb的redis数据库
第二步:在redis数据库中,激活aof模式,关闭rdb模式,命令如下
127.0.0.1:6379> CONFIG set appendonly yes
OK
127.0.0.1:6379> CONFIG SET save ""
OK
通过命令修改aof和rdb持久化机制,只是临时生效,永久生效需要修改配置文件
5. redis主从复制
原理:
- 从服务器向主服务器发送 SYNC 命令。
- 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
- 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB
- 而从服务器则会接收并载入这个文件。
- 主服务器将缓冲区储存的所有写命令发送给从服务器执行。
1、在开启主从复制的时候,使用的是RDB方式同步主从数据
2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
3、2.8以后实现PSYNC的机制,实现断线重连
5.1 环境准备
准备3个redis配置文件
6380.conf
mkdir /data/638{0..2} # 创建6380 6381 6382文件夹
6380.conf
vim /data/6380/redis.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
6381.conf
vim /data/6381/redis.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
6382.conf
port 6382
daemonize yes
pidfile /data/6382/redis.pid
loglevel notice
logfile "/data/6382/redis.log"
dbfilename dump.rdb
dir /data/6382
protected-mode no
启动三个redis实例
redis-server /data/6380/redis.conf
redis-server /data/6381/redis.conf
redis-server /data/6382/redis.conf
主从规划
主节点:6380
从节点:6381、6382
5.2 配置主从同步
6381/6382命令行
redis-cli -p 6381
SLAVEOF 127.0.0.1 6380 #指明主库的地址
redis-cli -p 6382
SLAVEOF 127.0.0.1 6380 #指明主库的地址
检查主从状态
从库:
127.0.0.1:6382> info replication
127.0.0.1:6381> info replication
主库:
127.0.0.1:6380> info replication
5.3 手动进行主从复制故障切换
# 关闭主库6380redis-cli -p 6380
shutdown
检查从库主从信息,此时master_link_status:down
redis-cli -p 6381
info replication
redis-cli -p 6382
info replication
1.关闭6381的从库身份
redis-cli -p 6381
info replication
slaveof no one
2.将6382设为6381的从库
6382连接到6381:
[root@linux ~]# redis-cli -p 6382
127.0.0.1:6382> SLAVEOF no one
127.0.0.1:6382> SLAVEOF 127.0.0.1 6381
3.检查6382,6381的主从信息
Redis持久化存储与主从复制的更多相关文章
- Part_three:Redis持久化存储
redis持久化存储 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. 1.RD ...
- Redis持久化存储与复制功能简述
一.分布式系统基础理论 分布式系统的两个基础理论: 1.CAP理论 如图: Consistency(强一致性):数据一致更新,所有数据变动都是同步的.Availability(可用性):好的响应性能. ...
- Redis持久化存储详解(一)
> 为什么要做持久化存储? 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存.我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的 ...
- Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)
第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Mem ...
- Redis持久化存储(AOF与RDB两种模式)
Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...
- Redis持久化存储(三)
redis高级特性-发布订阅消息服务功能 Pub/Sub 订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者).而是发布的消 ...
- Redis持久化存储——>RDB & AOF
Redis中两种持久化存储机制RDB和AOF redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB ...
- Redis持久化存储(RDB和AOF)
参考了: https://blog.csdn.net/canot/article/details/52886923 和 https://www.cnblogs.com/zhangchao-letv/ ...
- Redis持久化存储(一)
Redis介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化 ...
随机推荐
- Mapnik使用postgres中的栅格数据
XML: <?xml version="1.0" encoding="utf-8"?> <Map background-color=" ...
- MySQL教程-MyISAM和InnoDB的区别
MySQL的表类型MyISAM和InnoDB之间的最大区别是,InnoDB的支持事务.兄弟连教育( )来给大家做个对比: InnoDB支持一些新的功能:交易,行级锁,外键 InnoDB是高容量,高性能 ...
- 实战build-react(三)+ style-components
npm install --save style-components https://www.jianshu.com/p/27788be90605(copy) "axios": ...
- HDU 1097 快速幂
#include<iostream> using namespace std; long long quick(long long a,long long b,int c) { ; a=a ...
- codevs 5971 打击犯罪 x
题目描述 Description 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接 ...
- Python3学习笔记(四):序列
一.序列概览 Python 包含6 种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象.这里重点讨论最常用的两种类型:列表和元组. 列表与元组的主要区别在于: ...
- [BZOJ2729]:[HNOI2012]排队(组合数学)
题目传送门 题目描述 某中学有n名男同学,m名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) ...
- 快速排序和二分查找(Go)
package main import ( "fmt" "sync") var waitGroup sync.WaitGroup func main() { d ...
- 2018-2019-2 20165235《网络对抗技术》Exp7 网络欺诈防范
2018-2019-2 20165235<网络对抗技术>Exp7 网络欺诈防范 实验目的 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法 实验内容 (1)简单应 ...
- 如何解决两个相邻的span中间有空隙
span中间不要有换行.或者空格 或者在样式上加上float:left