SystemdDoctor
служба не работает базы данных копирование

Запись в Redis отказывает: узел работает как копия

Копия по умолчанию доступна только для чтения. Если приложение пишет на такой узел, оно получает отказ при исправной службе. Причина обычно не в настройках приложения, а в том, что узел остался копией после переключения или перезапуска.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Узел остался копией после переключения

    После сбоя и переключения прежний главный узел возвращается копией. Запись на него отклоняется.

  2. Роль задана в настройках и восстанавливается при перезапуске

    Запись о роли копии в файле настроек возвращает узел в эту роль при каждом запуске, даже после ручного перевода.

  3. Приложение обращается ко всем узлам без учёта роли

    При нескольких адресах в настройках приложения запись может уйти на копию случайно.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Роль узла и состояние копирования.

redis-cli info replication 2>/dev/null | head -10

Задана ли роль копии в настройках.

sudo grep -iE "^(replicaof|slaveof)" /etc/redis/redis.conf

Сообщения службы о роли и копировании.

journalctl -u redis-server -n 20 --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Узел остался копией после переключения
Почему происходит
После сбоя и переключения прежний главный узел возвращается копией. Запись на него отклоняется.
Как проверить
Посмотрите роль узла.
redis-cli info replication 2>/dev/null | head -8
Как исправить
Направьте запись на действующий главный узел или переведите этот узел в главную роль осознанно. Автоматическое переключение для этого и существует.
2. Роль задана в настройках и восстанавливается при перезапуске
Почему происходит
Запись о роли копии в файле настроек возвращает узел в эту роль при каждом запуске, даже после ручного перевода.
Как проверить
Посмотрите настройки роли.
sudo grep -iE "^(replicaof|slaveof|replica-read-only)" /etc/redis/redis.conf 2>/dev/null
Как исправить
Уберите запись о роли из файла настроек, если узел должен быть главным. Ручной перевод роли без правки настроек не переживает перезапуск.
3. Приложение обращается ко всем узлам без учёта роли
Почему происходит
При нескольких адресах в настройках приложения запись может уйти на копию случайно.
Как проверить
Посмотрите, куда пишет приложение.
journalctl -u myapp.service -n 20 --no-pager | grep -iE "READONLY|redis"
Как исправить
Используйте средство определения главного узла или направляйте запись только на его адрес. Перебор узлов без учёта роли даёт плавающие отказы.

Пример вывода

Приложение пишет на узел в роли копии. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

myapp[11700]: redis: READONLY You can't write against a read only replica.

$ redis-cli info replication | head -4
# Replication
role:slave
master_host:10.0.0.5
master_link_status:up

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация Redis: копирование документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено записью на узел в роли копии.
    собственная проверка, systemd 255
    сверено 15 сентября 2026