2つのネットワークインターフェイスを持つサーバーがあります。 Cassandraは、eth1上の専用の内部データベースネットワークでリッスンしています(外部からはアクセスできません)。したがって、トンネルは次のようにします:
ssh -f -N -L9161:192.XXX.XXX.200:9160 [email protected] -P 9922
XXXは内部データベースネットワーク、YYYはsshがリッスンしているネットワークです。 cqlsh localhost 9161
次の例外が発生します。
Connection error: ('Unable to connect to any servers', {'localhost': ConnectionShutdown('Connection <AsyncoreConnection(139691023521360) localhost:9161 (closed)> is already closed',)})
しかし、localhost 9161をtelnetすると、Telnetシェルが正常に取得されます。そしてもちろんcassandraが実行されています。
トンネルを機能させるにはどうすればよいですか?
私は同じ問題を抱えていましたが、cqlsh 5.0.1(Cassandra 2.1.4にバンドルされており、公式からインストールされたAPTリポジトリ)および私たちの古いCassandra 2.0.14ノード(DataStaxに付属)。
この問題は、datastaxにバンドルされているcqlsh 4.1に一時的にダウングレードすることで解決しました。
ポート9160(Cassandraクライアントポート)とポート9042(CQLネイティブポート)の両方をプロキシする必要があります。 2つの端末を実行するか、sshクライアントを次のフラグでバックグラウンドにします。
ssh -f -N -q -L 9042:192.XXX.XXX.200:9042 [email protected] -P 9922
ssh -f -N -q -L 9160:192.XXX.XXX.200:9160 [email protected] -P 9922
これで、localhostのデフォルトポートでcqlshに接続できるはずです。 Localhostもデフォルトのホストです。
cqlsh -u [username] -p [password]