如果redis默认安装,不修改配置文件情况下。默认的'dir'目录是var/lib/redis
,当满足保存条件时,一般情况下是5分钟10个KEY或者15分钟1个KEY的情况,会在该目录下更新dump.rdb文件。
然而这一次我没有使用默认配置,而是修改了'dir'指向的目录,变更为/data/redis
之后,RGB就不能正常使用了。
需要说明的是, 我变更目录之后,对新的目录设置了跟默认目录一样的访问权限。
chown -R redis:redis /data/redis
查看redis的日志,里面基本都这样的错误
12472:M 04 Sep 15:38:02.097 * Background saving started by pid 12740
12740:C 04 Sep 15:38:02.098 # Failed opening the RDB file dump.rdb (in server root dir /data/redis) for saving: Permission denied
12472:M 04 Sep 15:38:02.198 # Background saving error
直接根据日志分析,应该是没有权限打开文件,我去/data/redis
里面查看,没有dump.rdb
文件。因为我是刚安装,第一次写入的时候,需要创建dump.rdb
,因为权限问题创建失败。
网上各种搜索,几乎都是说把rdb文件的权限改一下,可是我连这个文件都没有,怎么修改,基本等于没说。
在StackOverFlow上,只有一个人提出了不同的观点:
It wasn't exactly this issue, but SELinux was ultimately the corporate. I had to use the audit2allow tool to fix it.
这哥们还提到一个关于_audit2allow链接
看到这里,我马上去看了/var/log/audit/audit.log
。
type=AVC msg=audit(1504510400.051:9448): avc: denied { write } for pid=12625 comm="redis-server" name="redis" dev="sda5" ino=3145729 scontext=system_u:system_r:redis_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir
type=SYSCALL msg=audit(1504510400.051:9448): arch=c000003e syscall=2 success=no exit=-13 a0=7ffdb82cbf10 a1=241 a2=1b6 a3=0 items=0 ppid=12472 pid=12625 auid=4294967295 uid=997 gid=995 euid=997 suid=997 fsuid=997 egid=995 sgid=995 fsgid=995 tty=(none) ses=4294967295 comm="redis-server" exe="/usr/bin/redis-server" subj=system_u:system_r:redis_t:s0 key=(null)
redis-server写入操作被拒绝了,文章中提到的audit2allow没找到,但是我看到他说的SELinux,倒是觉得可能我关掉SELinux就好了。
于是尝试关闭SELinux, 重启机器,不再出现这个错误,dump.rdb
可以正常创建更新了。
虽然当前问题解决了,但是为什么SELinux会拒绝redis-server的创建请求,还需要深入研究。
网友评论