Назад | Перейти на главную страницу

Redis: ошибка при перемещении файла временной базы данных в конечный пункт назначения: операция не разрешена

У меня есть установка nodeBB, которая использует Redis как хранилище данных. На данный момент это всего лишь тестовая установка, пока я устраняю любые проблемы. Экземпляр Redis не работал несколько дней, но затем упал со следующими ошибками в журналах:

3693:C 01 Dec 03:34:22.056 # Error moving temp DB file on the final destination: Operation not permitted
7089:M 01 Dec 03:34:22.155 # Background saving error
7089:M 01 Dec 03:34:28.067 * 1 changes in 900 seconds. Saving...
7089:M 01 Dec 03:34:28.068 * Background saving started by pid 3699
3699:C 01 Dec 03:34:28.069 # Error moving temp DB file on the final destination: Operation not permitted
7089:M 01 Dec 03:34:28.168 # Background saving error
7089:M 01 Dec 03:34:34.080 * 1 changes in 900 seconds. Saving...
7089:M 01 Dec 03:34:34.081 * Background saving started by pid 3700
3700:C 01 Dec 03:34:34.083 # Error moving temp DB file on the final destination: Operation not permitted
7089:M 01 Dec 03:34:34.181 # Background saving error

Redis был установлен как root на Centos 6.7 с использованием следующих инструкций (пакет yum по умолчанию слишком старый) с использованием следующий метод:

tar xzf redis-3.0.x.tar.gz
cd redis-3.0.1
make
make test
make install
cd utils
chmod +x install_server.sh
./install_server.sh

Рабочий каталог, установленный в /etc/redis/6379.conf :

# The filename where to dump the DB
dbfilename dump.rdb

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis/6379

Может ли кто-нибудь предложить, что могло бы вызвать это и как лучше всего решить проблему? Где Redis будет пытаться сохранить временные файлы, какого пользователя он будет использовать и какие разрешения будут безопасно решать эту проблему?

Также интересен был бы бесплатный метод мониторинга экземпляра Redis, чтобы я знал, когда он упадет.

6359.conf:

daemonize yes

pidfile /var/run/redis_6379.pid

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 0

loglevel notice

logfile /var/log/redis_6379.log


databases 16

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir /var/lib/redis/6379


slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100


appendonly no


appendfilename "appendonly.aof"


appendfsync everysec


no-appendfsync-on-rewrite no


auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes


lua-time-limit 5000


slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-entries 512
list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

Redis очень удобен для резервного копирования данных, так как вы можете копировать файлы RDB во время работы базы данных: RDB никогда не модифицируется после создания, и, когда он создается, он использует временное имя и переименовывается в конечный пункт назначения атомарно с использованием только rename (2). когда новый снимок будет готов. Я думаю, что redis или система не работает, указанный выше процесс не требует никаких дополнительных привилегий, пока redis не будет настроен должным образом или не возникнут проблемы с системой.

OP неясно, удалось ли когда-либо сохранить фоновое сохранение до того, как начались ошибки, но я видел эту ошибку, связанную с проблемами дискового пространства - при возможности заявить очевидное, проверьте с df если у вас закончилось место.

ВАЖНЫЙ - приложенный вами conf предполагает, что ваш сервер не использует аутентификацию по паролю ( requirepass директива), не переименовывает команды администратора и не привязан к конкретному интерфейсу ( bind директива). Это потенциальная угроза безопасности - подробнее на http://antirez.com/news/96.

Проверьте, включен ли у вас SELinux с sestatus. Если он включен (рекомендуется), переведите его в разрешающий режим через setenforce 0.

После этого проверьте еще раз вашу систему, и я предполагаю, что ошибка исчезнет, ​​проверьте журнал безопасности, чтобы увидеть, что было заблокировано SELinux, включите его в своей политике и верните SELinux в принудительный режим (конечно, если вы хотите, чтобы ваш сервер был защищен от SELinux)