2017-11-17 18 views
0

MongoDB 3.4で動作するmongo dbレプリカセットを設定しようとしています。Mongodbレプリカがアービターのハートビートで許可を拒否しました

サーバーA:

  • SRV1:27017 - 主要
  • ARB:27027 - アービタ

サーバーB:

  • SRV2:27017 - 二

arbをServerAのsrv1でホストしないでください。後で移動する予定です。

サーバポートは開いており、すべてのインスタンスでmongoシェルが動作します。

rs.status()をsrv1で実行するとすべて正常です。

SRV2上でそれを実行している、しかし、示しています。アービタセクションの

{ 
    "_id" : 2, 
    "name" : "ServerA:27027", 
    "health" : 0, 
    "state" : 8, 
    "stateStr" : "(not reachable/healthy)", 
    "uptime" : 0, 
    "lastHeartbeat" : ISODate("2017-11-17T14::36:48.088Z"), 
    "lastHeartbeatMessage" : "Permission denied", 
    "configVersion" : -1 
} 

(残りは大丈夫です)。 SRV2上 ログは、これらの3行を繰り返している。それらの

2017-11-17T09:19:02.758-0500 | ASIO [NetworkInterfaceASIO-Replication-0] Failed to connect to ServerA:27027 - HostUnreachable: Permission denied 
2017-11-17T09:19:02.758-0500 | ASIO [NetworkInterfaceASIO-Replication-0] Dropping all pooled connections to ServerA:27027 due to failed operation on a connection 
2017-11-17T09:19:02.758-0500 | REPL [ReplicationExecutor] Error in heartbeat request to ServerA:27027; HostUnreachable: Permission denied 

なし同じマシン上でホストされている任意の認証セット、およびSRV1は、アービタとハートビートの問題を持っていませんでした。 Srv2ではsrv1にハートビートの問題はありません。 私は、IPアドレスがmongod.configにバインドされていないか、ファイアウォールされていないために人々が接続できないことを知りましたが、ここでは該当しません。

+0

srv1とarbは同じホストを共有しているため、ローカルループバックを介して通信しようとします。サーバが両方のインタフェースでリッスンすることを確認できますか? –

+0

mongoシェルをServerBからServerA:27017とServerA:27027に接続しようとしましたが、正常に動作します。また、srv2にはレプリカセット内のsrv1に問題はなく、arbのみが表示されます。他に何か意味がありましたか? – shwick

+0

'telnet serv1 27027'はserv 2を動作させますか? –

答えて

0

私はそれを理解しました。 SELinuxは27027の通信を妨げていたことが判明しました。mongoシェルとtelnetはtcpトラフィックを防ぐポリシーを持っていないと思います。両方のmongoインスタンスが同じホスト上にあるため、ServerAには問題はないと思います。

だから27017を可能にすることに加えて、私は27027にも許可する必要がありました:

semanage port -a -t mongod_port_t -p tcp 27027 

を追加したセキュリティを気にしない場合は、別の解決策は完全にSELinuxを無効にすることです。

SELinuxを持つサーバーでレプリカセットを実行している場合は、レプリカセットのメンバー間で使用されるすべてのポートを許可する必要があります。

これはRedHat 7.4を実行していますが、他のディストリビューションは異なるポリシーで出荷されることがあります。

関連する問題