сбой службы redis из-за отказа в разрешении на добавление файла

#redis

#redis

Вопрос:

Моя служба redis (установленная из исходного кода) завершается сбоем с этим сообщением в /var/log/redis.log

 2309:C 16 Mar 2019 20:16:10.633 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=2309, just started
2309:C 16 Mar 2019 20:16:10.633 # Configuration loaded
2311:M 16 Mar 2019 20:16:10.634 # Can't open the append-only file: Permission denied
  

Однако:

 root@redis:~# sudo su - redis
redis@redis:~$ touch /var/lib/redis/foobar.txt
redis@redis:~$ echo $?
0
  

Вот мой /etc/redis.conf

 root@redis:~# cat /etc/redis.conf 
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /var/lib/redis
daemonize yes
logfile "/var/log/redis.log"
  

и вот мой пользовательский модульный файл для redis

 root@redis:~# cat /etc/systemd/system/redis.service 
Description=Redis In-Memory Data Store                       
After=network.target                                         

[Service]                                                    
Type=forking                                                 
User=redis                                                   
Group=redis                                                                                
PermissionsStartOnly=true                                                              
ExecStop=/bin/kill -s TERM $MAINPID
PIDFile=/var/run/redis/redis-server.pid
ExecStart=/opt/redis-stable/src/redis-server /etc/redis.conf
Restart=always                                               
RestartSec=3                                                 
LimitNOFILE=65535
ReadWriteDirectories=-/var/lib/redis
ReadOnlyDirectories=/
ReadWriteDirectories=-/var/lib/redis
ReadWriteDirectories=-/var/log/redis
ReadWriteDirectories=-/var/run/redis



[Install]                                                    
WantedBy=multi-user.target  
  

Ответ №1:

Redis запускается как некорневая служба, поэтому вам необходимо настроить разрешения для вашего каталога данных перед запуском службы.

Вам просто нужно выполнить эту команду:

 sudo chown -R 1001:1001 redis-data/
  

И перезапустите redis

Комментарии:

1. какой пользователь 1001? Почему 1001?

2. @ante. сабо Вы можете видеть пользователя 1001 на изображении bitnami / redis. Если вы используете другой образ docker, вам нужно найти идентификатор пользователя аналогичным образом. github.com/bitnami/bitnami-docker-redis/blob/master/6.0 /…

Ответ №2:

Ошибка заключается в том, что redis не может записать файл только для добавления. По умолчанию файл только для добавления помещается в каталог, из которого запускается redis.

Я предполагаю, что у пользователя redis нет доступа на запись в папке, из которой запускается. Просто убедитесь, что вы запускаете redis из каталога woring, к которому у пользователя redis есть доступ.

Чтобы узнать больше о файле AOF, ознакомьтесь с документацией:http://redis.io/topics/persistence .

Комментарии:

1. Но я дал указание redis через директиву dir /var/lib/redis в /etc/redis.conf поместить туда файл только для добавления; и как redis пользователю мне удалось создать там файл;

2. Хммм … Я не знаю, но это, безусловно, ошибка с правами доступа к файлам. Попробуйте изменить dir директиву на другое место, а также попробуйте запустить в другом каталоге.

Ответ №3:

-известная проблема https://github.com/redis/redis/issues/8172 -Я все еще не смог выяснить, как заставить его работать в kubernetes

Комментарии:

1. Вам необходимо запустить initContainer с помощью команды ['sh', '-c', "until telnet <redis-service-name>.<k8s-user-namespace> 6379; do echo waiting for redis; sleep 1; done"]