web-dev-qa-db-ja.com

redisスレーブがマスターと同期しない

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

前もって感謝します。

21
timsabat

今日も同じような状況に遭遇しました。 sysctlを使用するシステムでは、次のようにする必要があるようです:

sysctl vm.overcommit_memory=1

スレーブのredisサーバーを再起動します。 このリンク が役立つ場合があります。

10
yanhan

この問題は少しトリッキーですが、

スレーブが同期できない理由はマスター自体にあり、

ログ出力に注意してください:[〜#〜] master [〜#〜]エラーでレプリケーションが中止されました:ERR実行できませんバックグラウンド保存

これは、マスターマシンのメモリリザーブが低いため、マスターがバックグラウンドで保存できないことを意味します。

この問題を解決するために、マスターredisサーバーを再起動しました。その後、すべてのスレーブが自分で同期されました。

10
Tal Laitner

私にとっては、requirepassを設定したが、masterauthを設定しなかったためです。

6
K0D4

私は同じ問題に遭遇しましたが、私の理由は両方のサーバーが同じredis versionを使用していないことです。両方のサーバーでバージョンを確認してみましょう。

127.0.0.1:6379> info server
# Server
redis_version:3.2.8
4
Justin

「SLAVEOF」の前にスレーブの端末でredis.confのデフォルト設定でrequirepass、「masterauth [passwordOfMaster]」を実行すると、この問題が解決します。

3
何德福

私の場合、それはSELINUXに関連していたため、許容モードに変更すると問題が解決しました。

0
glm

以下を修正しました

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
0
Patrik Laszlo

Redis 5.0.5を使用してこれを設定しようとしたときに、保護モードがオンになっていることがわかりました。 (ループバックやUNIXソケットではなく)eth0インターフェイスで推定マスターにログインすると、「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.

私は指示に従い、スレーブをすぐに接続しました。

0
geezer_nerd