我有一台有两个网络接口的服务器。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(与 Cassandra 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]