昨晚我们进行了一次服务器迁移操作,按照常规流程,服务器上的数据应该保持不变。然而,令人意外的是我们发现其中一台服务器上的Redis数据丢失了。以下是针对此问题的详细排查步骤与优化措施。
一、问题排查
1.检查持久化设置
首先,我们怀疑可能是Redis的持久化设置未开启,导致数据在重启后丢失。但经过检查配置文件,发现RDB持久化默认已经开启。
2.比较配置文件
由于怀疑以前运行的redis.conf和现在的redis.conf文件可能不同,我们比较了这两个文件,特别是关于rdb文件存储路径的设置。我们按照当前的redis.conf文件重新启动了Redis服务。
# 停止Redis服务 [root@yunweixia.com]# pkill -f redis-server # 使用新的配置文件启动Redis服务 [root@yunweixia.com]# redis-server /home/app01/redis/redis.conf
3.开启AOF持久化
为了增强数据的安全性,我们在原来配置中已经尝试开启了AOF持久化。
# 运行时开启AOF(不推荐,应在配置文件中设置) [root@yunweixia.com]# redis-cli config set appendonly yes # 修改配置文件以永久开启AOF [root@yunweixia.com]# vi /home/app01/redis/redis.conf appendonly yes
4.查找持久化文件
重启Redis服务后,返现数据依然丢失。我们怀疑可能是持久化文件的位置不正确或被覆盖。通过全局搜索,我们发现系统中存在多个位置的持久化文件。
# 查找rdb文件 [root@yunweixia.com]# find / -name "*.rdb" # 查找aof文件 [root@yunweixia.com]# find / -name "*.aof"
5.确定工作目录
通过查看redis.conf文件,我们发现工作目录(dir)被设置为了./,这意味着Redis将在启动时的当前目录下创建持久化文件。由于启动位置的不同,Redis可能找不到原来的持久化数据。
# 查看redis.conf中的工作目录设置 [root@yunweixia.com]# cat /home/app01/app01/redis/redis.conf | grep dir dir ./
二、优化措施
1.明确持久化文件位置
在redis.conf中明确指定持久化文件的存储路径,避免使用相对路径(如./)。确保该路径在服务器迁移后仍然有效。
2.备份配置文件
在服务器迁移或配置更改之前,备份redis.conf文件。这样,如果出现问题,可以快速回滚到之前的配置。
3.检查文件权限
确保Redis进程对持久化文件所在的目录具有读写权限。
4.统一操作方式
在修改Redis配置时,尽量通过编辑配置文件并重启服务的方式进行,而不是在运行时通过命令进行。这有助于保持配置的一致性。
5.定期检查和备份数据
定期检查和备份Redis数据,确保在出现意外情况时能够迅速恢复数据。
三、总结
工作目录./不是梦想中的/home/app01/redis目录,而是,你在启动redis-server时候的当前目录。所以,随着启动redis-server次数及位置不同,你重启后的redis-server可能会找不到原来的持久化数据。
原创文章,作者:运维侠,如若转载,请注明出处:https://www.yunweixia.com/solutions/diagnosing-redis-data-loss-post-migration.html