1. ホーム
  2. レディス

Redis マスター・スレーブ構成の例外を解決しました。SYNC用ソケットのエラー条件:接続拒否

2022-03-03 16:11:40
<パス

Redis マスター・スレーブ構成の例外を解決しました。SYNC用ソケットのエラー条件:接続拒否

docker で redis のマスター・スレーブクラスタを構築すると、スレーブサーバの redis ログでエラーが報告されます。

32677:S 08 Feb 16:14:38.947 * Connecting to MASTER 172.168.10.70:6379
32677:S 08 Feb 16:14:38.948 * MASTER <-> SLAVE sync started
32677:S 08 Feb 16:14:38.948 # Error condition on socket for SYNC: Connection refused
32677:S 08 Feb 16:14:39.950 * Connecting to MASTER 172.168.10.70:6379
32677:S 08 Feb 16:14:39.950 * MASTER <-> SLAVE sync started
32677:S 08 Feb 16:14:39.950 # Error condition on socket for SYNC: Connection refused
32677:S 08 Feb 16:14:40.952 * Connecting to MASTER 172.168.10.70:6379
32677:S 08 Feb 16:14:40.952 * MASTER <-> SLAVE sync started
32677:S 08 Feb 16:14:40.953 # Error condition on socket for SYNC: Connection refused

解決策
redisマスターサーバーのredis.confのbindフィールドを以下のように変更します。

bind 127.0.0.1

に変更します。

bind 0.0.0.0

または、bindフィールドをコメントアウトするだけです。

# bind 127.0.0.1

理由
redis のマスターサーバーが 127.0.0.1 にバインドされている場合、サーバー間の IP アクセスは失敗します。マスターサーバーがIPとポートでアクセスすると、ローカルホストの6379ポートが127.0.0.1にバインドされていることがわかります。つまり、ローカルホストのみがアクセス可能で、外部からのリクエストはフィルタリングされ、これはLinuxのネットワークセキュリティポリシーによって管理されます。bindのIPアドレスが172.168.10.70の場合、localhostと127.0.0.1、または直接redis-cliコマンドを入力してローカルredisにログインしても失敗します。ローカルIPのみ追加してアクセスすることが可能です。
そのため、R&Dやテスト環境では0.0.0.0をバインドし、オンラインの本番環境ではIPアドレスをバインドすることが推奨されると考えてよいでしょう。