m42作业5
请同学们完成作业后,将本周博客作业提交地址:https://www.wjx.top/jq/85988108.aspx
1、RDB和AOF的优缺点
RDB优点:
RDB快照保存了某个时间点的数据,可以通过脚本执行redis指令bgsave(非阻塞,后台执行)或者
save(会阻塞写操作,不推荐)命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不
同时间点的版本,很适合备份,并且此文件格式也支持有不少第三方工具可以进行后续的数据分析
比如: 可以在最近的24小时内,每小时备份一次RDB文件,并且在每个月的每一天,也备份一个
ROB文件。这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。
RDB可以最大化Redis的性能,父进程在保存 RDB文件时唯一要做的就是fork出一个子进程,然后
这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘工/0操作。
RDB在大量数据,比如几个G的数据,恢复的速度比AOF的快
RDB缺点:
不能实时保存数据,可能会丢失自上一次执行RDB备份到当前的内存数据
如果你需要尽量避免在服务器故障时丢失数据,那么RDB不适合你。虽然Redis允许你设置不同的
保存点(save point)来控制保存RDB文件的频率,但是,因为ROB文件需要保存整个数据集的状
态,所以它并不是一个轻松的操作。因此你可能会至少5分钟才保存一次RDB文件。在这种情况
下,一旦发生故障停机,你就可能会丢失好几分钟的数据。
当数据量非常大的时候,从父进程fork子进程进行保存至RDB文件时需要一点时间,可能是毫秒或
者秒,取决于磁盘IO性能
在数据集比较庞大时,fork()可能会非常耗时,造成服务器在一定时间内停止处理客户端﹔如果数
据集非常巨大,并且CPU时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒或更久。
虽然 AOF重写也需要进行fork(),但无论AOF重写的执行间隔有多长,数据的持久性都不会有任何
损失。
AOF优点:
数据安全性相对较高,根据所使用的fsync策略(fsync是同步内存中redis所有已经修改的文件到存
储设备),默认是appendfsync everysec,即每秒执行一次 fsync,在这种配置下,Redis 仍然可以
保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync会在后台线程执
行,所以主线程可以继续努力地处理命令请求)
由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中不需要seek, 即使出
现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果本次操作只是写入了一半数据就出
现了系统崩溃问题,不用担心,在Redis下一次启动之前,可以通过 redis-check-aof 工具来解决
数据一致性的问题
Redis可以在 AOF文件体积变得过大时,自动地在后台对AOF进行重写,重写后的新AOF文件包含了
恢复当前数据集所需的最小命令集合。整个重写操作是绝对安全的,因为Redis在创建新 AOF文件
的过程中,append模式不断的将修改数据追加到现有的 AOF文件里面,即使重写过程中发生停
机,现有的 AOF文件也不会丢失。而一旦新AOF文件创建完毕,Redis就会从旧AOF文件切换到新
AOF文件,并开始对新AOF文件进行追加操作。
AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,也可以通过该文
件完成数据的重建
AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因
此 AOF文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。导出(export)AOF文件
也非常简单:举个例子,如果你不小心执行了FLUSHALL.命令,但只要AOF文件未被重写,那么只
要停止服务器,移除 AOF文件末尾的FLUSHAL命令,并重启Redis ,就可以将数据集恢复到
FLUSHALL执行之前的状态。
AOF缺点:
即使有些操作是重复的也会全部记录,
AOF 在恢复大数据集时的速度比 RDB 的恢复速度要慢
bug 出现的可能性更多
RDB和AOF 的选择
如果主要充当缓存功能,或者可以承受数分钟数据的丢失, 通常生产环境一般只需启用RDB即可,此也是默
认值
如果数据需要持久保存,一点不能丢失,可以选择同时开启RDB和AOF,一般不建议只开启AOF
2、master和slave同步过程
在从节点主机上执行
redis-cli replicaof 10.0.0.* 6379主节点ip 和端口
如果有密码需要在执行下一条命令才能实现主从
redis-cli config set masterauth 主节点密码
3、哨兵的使用和实现机制
准备3台机器实现主从
三台机器上全部更改
vim /etc/redis.conf
#bind 127.30.0.0 = bind 0.0.0.0
#masterauth <用户密码> = masterauth 123456
#requirepass "**" = requiepass 123456
在所有从节点执行
echo "replicaof 10.0.0.8 6379" >> /etc/redis.conf
然后重启主从节点
主从节点全部配置
vim /etc/redis.sentinel.conf
sentinel monitor mymaster 10.0.0.8 6379 2 更改
sentinel auth-pass mymaster 123456 增加
sentinel down-after-milliseconds mymaster 3000 更改
改完后重启redis redis-sentinel后可实现
4、redis cluster集群创建和使用
首先安装redis
yum -y install redis
vim /etc/redis.conf
#cluster-enabled yes= cluster-enabled yes cluster集群的使用
#cluster-config-file nodes-6379.conf=cluster-config-file nodes-6379.conf 开启这项
#cluster-full-coverage yes=cluster-full-coverage no 和集群的安全有关 选择关闭
启动服务
systemctl enable --now redis
使用meet将主机之间有关联
redis-cli -a 123456 --no-auth-warning cluster meet 10.0.0.78 6379
redis-cli -a 123456 --no-auth-warning cluster meet 10.0.0.88 6379
使主机们进行关联后平均分配槽位编写槽位自动分配脚本
host=$1
port=$2
start=$3
end=$4
pass=123456
for slot in `seq ${start} ${end}`;do
echo slot:$slot
redis-cli -h ${host} -p $port -a ${pass} --no-auth-warning cluster addslots
${slot}
done
0-5460的槽位分配给10.0.0.8
centos.10.0.0.8 bash addslot.sh 10.0.0.8 6379 0 5460
centos.10.0.0.78 bash addslot.sh 10.0.0.78 6379 5461 10922
centos. 10.0.0.88 bash addslot.sh 10.0.0.88 6379 10923 16383
分配完槽位后配置主从关系
redis-cli -a 123456 --no-auth-warning -h 从节点ip cluster replicate 主节点的uuid

浙公网安备 33010602011771号