通过 ssh 隧道传输 Cassandra 时出现连接关闭错误

通过 ssh 隧道传输 Cassandra 时出现连接关闭错误

我有一台有两个网络接口的服务器。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',)})

但是当我 telnet localhost 9161 时,我成功获得了一个 telnet shell。当然,cassandra 正在运行。

有什么想法可以使我的隧道正常运转吗?

答案1

我遇到了同样的问题,最终看起来像是 cqlsh 5.0.1(与 Ca​​ssandra 2.1.4 捆绑在一起,从其官方 APT 存储库安装)与我们的旧 Cassandra 2.0.14 节点(随 DataStax 一起提供)之间不兼容。

暂时降级到与 datastax 捆绑的 cqlsh 4.1 解决了该问题。

答案2

您需要代理端口 9160(Cassandra 客户端端口)和端口 9042(CQL 本机端口)。运行两个终端或使用以下标志让 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

现在您应该能够使用 cqlsh 在 localhost 上的默认端口进行连接。Localhost 也是默认主机。

cqlsh -u [username] -p [password]

相关内容