Назад | Перейти на главную страницу

Туннелирование кассандры через ssh дает мне ошибку закрытия соединения

У меня есть сервер с двумя сетевыми интерфейсами. Кассандра прослушивает выделенную внутреннюю сеть базы данных на eth1 (недоступна извне). Итак, я делаю свой туннель так:

ssh -f -N -L9161:192.XXX.XXX.200:9160 user@192.YYY.YYY.200 -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. И конечно кассандра работает.

Есть идеи, как заставить работать туннель?

Вам необходимо проксировать порт 9160 (порт клиента Cassandra) и порт 9042 (собственный порт CQL). Либо запустите два терминала, либо заставьте ssh-клиент работать в фоновом режиме с этими флагами:

ssh -f -N -q -L 9042:192.XXX.XXX.200:9042 user@192.YYY.YYY.200 -P 9922
ssh -f -N -q -L 9160:192.XXX.XXX.200:9160 user@192.YYY.YYY.200 -P 9922

Теперь у вас должна быть возможность подключиться к cqlsh через порт по умолчанию на localhost. Localhost также является хостом по умолчанию.

cqlsh -u [username] -p [password]

У меня была такая же проблема, и это выглядело как несовместимость между cqlsh 5.0.1 (в комплекте с Cassandra 2.1.4, установленным из их официального репозитория APT) и нашими старыми узлами Cassandra 2.0.14 (поставляется с DataStax).

Временное понижение версии до cqlsh 4.1 в комплекте с datastax решило проблему.