Redis не будет синхронизироваться с ведущим

Редис-подчиненный не будет синхронизироваться с ведущим.

Связь:

Я могу подключиться к мастеру при выпуске

HOST_NAME=fakehost
redis-cli -h $HOST_NAME

и проверьте статус мастера с помощью команды типа INFO, поэтому подключение не является проблемой.

Параметры:

Из подчиненного блока я выпустил

SLAVEOF $HOST_NAME 6379

И получил OK.

Когда я выдаю команду INFO на подчиненном устройстве, я получаю

# Replication
role:slave
master_host:<removed>
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
master_link_down_since_seconds:1379450797
slave_priority:100
slave_read_only:1
connected_slaves:0

В главном окне я выдаю INFO и получаю

# Replication
role:master
connected_slaves:0

Поэтому, очевидно, я не подключен.

Журналы

[11225] 17 Sep 14:31:33.225 * Connecting to MASTER...
[11225] 17 Sep 14:31:33.226 * MASTER <-> SLAVE sync started
[11225] 17 Sep 14:31:33.226 * Non blocking connect for SYNC fired the event.
[11225] 17 Sep 14:31:33.226 * Master replied to PING, replication can continue...
[11225] 17 Sep 14:31:33.227 # MASTER aborted replication with an error: ERR Unable to perform background save

Испытания

Проверьте, что dump.rdb создан в BGSAVE

BGSAVE
> OK

Проверьте, что dump.rdb создается в SAVE

SAVE
> OK

Спасибо заранее.

Ответ 1

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

sysctl vm.overcommit_memory=1

и перезапустите сервер повторного использования. Эта ссылка может помочь.

Ответ 2

Эта проблема немного сложная,

причина, по которой подчиненный не может синхронизировать, находится в самом хозяине,

обратите внимание на вывод журнала:   МАСТЕР прервана репликация с ошибкой: ERR Не удалось выполнить сохранение фона

это означает, что мастер не может выполнять сохранение фона из-за низкого резерва памяти на мастер-машине,

чтобы решить эту проблему. Я перезапустил мастер-сервер redis, то все подчиненные были синхронизированы сами по себе.

Ответ 3

Для меня это было потому, что я установил requirepass, но не установил параметр masterauth.

Ответ 4

Я встретил ту же проблему, и моя причина заключается в том, что оба моих сервера не используют один и тот же redis version. Проверьте свою версию на обоих серверах:

127.0.0.1:6379> info server
# Server
redis_version:3.2.8

Ответ 5

мои настройки по умолчанию в redis.conf включены requirepass, выполнение "masterauth [passwordOfMaster]" в подчиненном терминале до того, как "SLAVEOF" устранит эту проблему.

Ответ 6

В моем случае это было связано с SELINUX, изменив его на разрешающий режим, разрешив проблему.

Ответ 7

Я исправил это следующим образом:

sudo -i
service redis-server stop
apt remove --purge redis-server
rm /var/lib/redis/dump.rdb
apt install redis-server
systemctl enable redis-server
service redis-server start

# i have not tried, but it is possible this is enough
service redis-server stop
rm /var/lib/redis/dump.rdb
service redis-server start

Ответ 8

Я обнаружил, что защищенный режим был включен, когда я попытался настроить его с помощью Redis 5.0.5. Когда я вошел в предполагаемый мастер на его интерфейсе eth0 (в отличие от loopback или сокета UNIX), я получил это сообщение при попытке запустить "INFO":

IP_ADDRESS_REDACTED:6379> info
DENIED Redis is running in protected mode because protected mode is
enabled, no bind address was specified, no authentication password
is requested to clients. In this mode connections are only accepted
from the loopback interface. If you want to connect from external
computers to Redis you may adopt one of the following solutions:
1) Just disable protected mode sending the command 'CONFIG SET 
protected-mode no' from the loopback interface by connecting to Redis
from the same host the server is running, however MAKE SURE Redis is
not publicly accessible from internet if you do so. Use CONFIG REWRITE 
to make this change permanent. 2) Alternatively you can just disable
the protected mode by editing the Redis configuration file, and
setting the protected mode option to 'no', and then restarting the
server. 3) If you started the server manually just for testing,
restart it with the '--protected-mode no' option. 4) Setup a bind
address or an authentication password. NOTE: You only need to do one
of the above things in order for the server to start accepting
connections from the outside.

Я следовал инструкциям, и раб немедленно подключился.