复制过程中丢失文件-(复制过程中丢失文件怎么办)

路由设置 次浏览手机阅读
文件在复制过程中丢失 (文件在复制过程中丢失怎么办) 1.redis 从复制原理出发从库到主库发送同步请求,主库接收从库发送的同步请求,主库开始使用 bgsave 生成 rdb 文件主库 rdb 将文件生成后保存到磁盘中 rdb 从仓库接收主仓库发送的文件 rdb 文件,将 rdb 内存中载入文件

与主库同步时,从库中清空所有数据,因此在做 redis 尽量选择没有任何数据的主从 redis

架构图


环境准备

2.部署两台 redis

2.1 192.168.81.210 配置

1.创建redis部署路径[root@redis-1 ~]# mkdir -p /data/redis_cluster/redis_6379/{conf,pid,logs,data}[root@redis-1 ~]# tree /data/redis_cluster//data/redis_cluster/└── redis_6379 ├── conf ├── logs ├── pid └── data 2.下载redis[root@redis-1 ~]# mkdir /data/soft[root@redis-1 ~]# cd /data/soft[root@redis-1 /data/soft]# wget https://repo.huaweicloud.com/redis/redis-3.2.9.tar.gz3.编译安装redis[root@redis-1 /data/soft]# tar xf redis-3.2.9.tar.gz -C /data/redis_cluster/[root@redis-1 /data/soft]# cd /data/redis_cluster/[root@redis-1 /data/redis_cluster]# ln -s redis-3.2.9/ redis[root@redis-1 /data/redis_cluster]# cd redis/src[root@redis-1 /data/redis_cluster/redis]# make && make install4.准备配置文件[root@redis-1 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf daemonize yesbind 192.168.81.210 127.0.0.1port 6379pidfile /data/redis_cluster/redis_6379/pid/redis_6379.pidlogfile /data/redis_cluster/redis_6379/logs/redis_6379.logdatabases 16dbfilename redis_6379.rdbdir /data/redis_cluster/redis_6379/data/save 900 1save 300 100save 60 10000appendonly yesappendfilename "appendonly.aof"appendfsync alwaysappendfsync everysecappendfsync nono-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yes5.启动redis[root@redis-1 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf2.2 192.168.81.220 配置

由于 redis-1 一套已经部署好了 redis,我们可以直接复制使用

1.使用rsync将redis-1的redis复制你的目录[root@redis-1 ~]# rsync -avz /data root@192.168.81.220:/2.查看复制的目录文件[root@redis-2 ~]# ls /data/redis_cluster/redis redis-3.2.9 redis_6379[root@redis-2 ~]# ls /data/redis_cluster/redis_6379/conf data logs pid3.编译安装redis,使系统能够使用redis直接执行命令make install即可,因为编译步骤在redis-1已经做了[root@redis-2 ~]# cd /data/redis_cluster/redis-3.2.9/[root@redis-2 /data/redis_cluster/redis-3.2.9]# make install4.修改redis配置文件[root@redis-2 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf bind 192.168.81.220 127.0.0.15.启动redis[root@redis-2 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf3.redis 主从复制配置

3.1.批量创建主库 key

[root@redis-1 ~]# for i in{0..2000}; do redis-cli set k_${i}v_${i}; echo "k_${i}is ok"; done127.0.0.1:6379> DBSIZE(integer) 2001

3.2.配置从库连接主库

实现两种配置方式 Redis 主从复制:

配置文件实现命令执行命令

3.2.1.在配置文件中设置

1.修改配置文件[root@redis-2 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf slaveof 192.168.81.210 6379 #指定主库ip和端口2.重启redis[root@redis-2 ~]# redis-cli shutdown[root@redis-2 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf

3.2.2.命令行热更新配置

[root@redis-2 ~]# redis-cli127.0.0.1:6379> SLAVEOF 192.168.81.210 6379OK

3.3.检查主库数据同步主库数据

1.从库中执行keys检查数据是否相同[root@redis-2 ~]# redis-cli 127.0.0.1:6379> keys * 2.在主库上新建一个key,检查从库是否存在主:127.0.0.1:6379> set name jiangxlOK从:127.0.0.1:6379> get name "jiangxl"k_114,检查从库是否也删除了主:127.0.0.1:6379> del k_114(integer) 1从:127.0.0.1:6379> get k_114(nil)

3.4.在查看日志时,主要从同步原理

主库从库有记录复制的详细日志

4.redis 从复制危险操作开始

4.1.使用热更新配置误操作

redis 如果使用热更新配置进行主从复制,有时候因为选错了主机,把从库误认为是主库,所以在主库上执行了 slaveof,这将导致主库上的数据被清空,因为从库中没有数据

从库同步主库时,将清空所有原始数据

误操作过程

从库数据为0127.0.0.1:6379> DBSIZE(integer) 0主库数据为2001127.0.0.1:6379> DBSIZE(integer) 2001在主库上同步操作本应从库的数据127.0.0.1:6379> SLAVEOF 192.168.81.220 6379OK再次查看数据,127数据已清空.0.0.1:6379> DBSIZE(integer) 0

4.2.避免热更新配置误操作

在配置文件中直接配置主从而不使用热更新 slaveof 先执行 bgsave,手动备份数据,然后在数据目录中,将 rdb 将文件复制成另一个文件备份,这样即使有问题,也可以恢复

bgsave 之后不需要重启,直接备份 rdb 文件即可

1.手动持久化127.0.0.1:6379> BGSAVEBackground saving started2.备份rdb文件[root@redis-1 ~]# cd /data/redis_cluster/redis_6379/[root@redis-1 /data/redis_cluster/redis_6379]# cd data/[root@redis-1 /data/redis_cluster/redis_6379/data]# cp redis_6379.rdb redis_6379.rdb.bak3.主库再次同步错误,数据丢失127.0.0.1:6379> SLAVEOF 192.168.81.220 6379OK127.0.0.1:6379> keys *(empty list or set)4.还原备份rdb先停止文件redis,在还原[root@redis-1 ~]# redis-cli shutdown[root@redis-1 /data/redis_cluster/redis_6379/data]# cp redis_6379.rdb.bak redis_6379.rdb5.检查还原后的数据[root@redis-1 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf 127.0.0.1:6379> DBSIZE(integer) 20015.模拟 redis 主要从复制错误数据恢复

模拟 redis 恢复同步误操作数据

大致思路:

清空两台 redis 在主库上创建一些数据,然后使用 bgsave 命令将数据保存到磁盘中,然后将磁盘 rdb 文件备份将从数据库中同步,模拟主库数据丢失 rdb 还原数据库备份文件

本实验的主要目的是操作 redis 备份还原

5.1.清空数据

两台 redis 都需要操作

先关闭再删除数据再启动

[root@redis-1 ~]# redis-cli shutdown[root@redis-1 ~]# rm -rf /data/redis_clu st

喜欢 ()