马哥博客作业第二十周

第20周作业:
1、搭建一个 LNMP 架构请写出它的底层原理,当用户访问的是静态资源、和动态资源这两种类型的资源是,其中各个 service 之间做了什么操作。请分别一 一写出
lnmp原理:首先用户通过浏览器输入域名请求访问nginx服务器,如果请求的静态资源,则由nginx服务器解析返回给用户,
如果用户访问的动态资源(.php)结尾,那么nginx就会把它通过FastCgi接口发送给php-fpm(FastCGI Process Manager:FastCGI进程管理器)进行解析,
将解析结果通过FastCgi接口发送给nginx服务器,在由nginx服务器发送给用户。
如果这个动态资源要读取数据库数据,那么php就会继续向后请求mysql数据库,读取需要的数据,并最终通过nginx服务器把获取的数据返回给用户。
2、AOF 和 RDB 的两者之间的区别以及优缺点
区别:RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后在替换之前的文件
用二进制进行压缩。

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,可以打开文件看到详细的记录。

RDB模式优点
1>.RDB快照保存了某个时间点的数据,可以通过脚本执行redis指令bgsave或者save命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不同
时间点的版本。
2>.RDB可以最大化redis性能,父进程在保存RDB文件时唯一要做的就是fork出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无需
执行任何磁盘I/O操作。
3>.RDB在大量数据,比如几个G的数据,恢复速度比AOF快。
RDB模式缺点
1>.不能实时备份数据,可能会丢失自上一次执行RDB备份到当前的内存数据。
2>.当数据量非常大的时候从父进程fork子进程进行保存至RDB文件时需要一点时间,可能是毫秒或者秒,取决于磁盘IO性能。

AOF模式优点
1>.数据安全性较高,根据所使用的策略(默认是每秒执行一次fsync),redis仍然可以保持良好的性能,就算发生故障,最多只会丢失一秒钟的数据。
2>.对日志文件的写入操作采用append模式,即使出现宕机现象,也不会破坏日志文件中已经存在的内容。
3>.redis可以在AOF文件体积变得过大时,自动地在后台对AOF进行重写,重写后新的AOF文件包含了恢复当前数据集所需的最小命令集合。
4>.AOF包含一个格式清晰,易于理解的日志文件用于记录所有的修改操作。
AOF模式缺点
1>.即使有些重复的操作也会全部记录,AOF文件大小要大于RDB格式的文件。
2>.AOF在恢复大数据集时比RDB的恢复速度慢。
3>.根据fsync策略不同,AOF的速度可能会慢与RDB

3、请问 Redis 持久化如何实现。
redis支持两种不同的方式实现持久化保存机制,分别是RDB和AOF。
RDB持久化流程
1>.redis根据配置去尝试生成一个.rdb快照。
2>.redis-server会frok一个子进程。
3>.子进程将数据库dump到一个临时的.rdb文件。
4>.然后通过临时文件来覆盖替换之前的持久化文件,并且每一次生成一个新的临时文件都会做替换
RDB持久化配置:(生产中建议关闭自动保存RDB功能,由自动化RDB备份脚本手动指定时间周期性保存)
[root@CentOS8 ~]#vim /etc/redis.conf (关闭自动保存功能)
save ""
#save 900 1
#save 300 10
#save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
[root@CentOS8 ~]#systemctl restart redis
AOF持久化流程
1>.redis-server先fork一个子进程。
2>.子进程基于当前的内存数据,构建日志,开始往新的临时AOF文件中写入日志
3>.redis主进程接到客户端的写操作时,继续往旧的AOF日志中追加数据,此时redis中有两个日志文件,一个是子进程创建的临时日志,一个是主进程的
AOF日志。
4>.子进程写完创建完临时AOF日志后,将redis主进程新追加的日志写入到临时日志中
5>.用临时日志覆盖主进程的旧AOF日志。
AOF持久化配置:
1>.连接到redis服务器,手动临时开启AOF功能(会自动把.rdb文件的内容同步到.aof文件)
[root@centos8 ~]#redis-cli
127.0.0.1:6379> config set appendonly  yes
2>.修改配置文件,永久保存配置
[root@CentOS8 ~]#vim /etc/redis.conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
[root@CentOS8 ~]#systemctl restart redis
4、通过脚本实现自动化RDB备份
#!/bin/bash
DATE=`date +%Y%m%d%H%M%S`
RDB_DIR=/var/lib/redis
BACK_DIR=/data/backup/redis-rdb
[ -e $BACK_DIR ] || mkdir -p $BACK_DIR
redis-cli -h 127.0.0.1 -a 123456 bgsave &> /dev/null
while true;do
[ ! -e $RDB_DIR/temp*.rdb ] && cp -a $RDB_DIR/dump*.rdb $BACK_DIR/dump_$DATE.rdb
[ -e $BACK_DIR/dump_$DATE.rdb ] && break
done

posted @ 2020-10-22 19:28  小小小小石头  阅读(83)  评论(0)    收藏  举报