2015-09-02 24 views
6

nie mogę cqlsh do zdalnego hostaJak podłączyć do Cassandry (remotehost) używając cqlsh

./cqlsh xx.xx.x.xxx 9042 
    Connection error: ('Unable to connect to any servers', {'10.101.33.163': 
    ConnectionException(u'Did not get expected SupportedMessage response; 
    instead, got: <ErrorMessage code=0000 [Server error]  
    message="io.netty.handler.codec.DecoderException: 
    org.apache.cassandra.transport.ProtocolException: Invalid or unsupported 
    protocol version: 4">',)}) 

Używam cqlsh 5.0.1 i Python 2.7.10

./cqlsh --version 
    cqlsh 5.0.1 
    python -V 
    Python 2.7.10 

Jestem na mac i skorzystał z instrukcji od http://www.datastax.com/2012/01/working-with-apache-cassandra-on-mac-os-x, aby pobrać kasandra.

Cassandra na moim lokalnym jest 2.2.1 (jak rozumiem z pliku zip) i wydaje się, że Kasandra na zdalnym hoście NIE JEST 2.2.1 (Zakładam, że jest to albo 2.0 albo 2.1). Bez definitywnie wiedząc jaka wersja jest na zdalnym komputerze, jak mogę próbować połączyć się z Cassandrą na zdalnym hostem

+0

wygląda następująco - http: // stackoverflow. com/questions/31444098/python-cassandra-driver-invalid-or-unsupported-protocol-version-4 – LHWizard

Odpowiedz

5

1) Upewnij się, że usługa jest uruchomiona:

$ ps aux | grep cassandra

Przykład: 106 7387 5.1 70,9 2019816 1454636? SLL Sep02 16:39/usr/lib/jvm/java-7-oracle/jre // bin/java -Ddse.system_cpu_cores = 2 -Ddse.system_memory_in_mb = 2003 -Dcassandra.config.loader = com.datastax.bdp.config .DseConfigurationLoader -Ddse.system_cpu_cores = 2 -Ddse.system_memory_in_mb = 2003 -Dcassandra.config.loader = com.datastax.bdp.config.DseConfigurationLoader -EA -javaagen ...

2) Upewnij się, że używając poprawne IP zaznaczając config serwera:

$ ifconfig

Przykład:

eth1 link ENCAP: Ethernet H Waddr 08: 00: 27: a6: 4e: 46
inet addr: 192.168.56.10 bcast: 192.168.56.255 Maska: 255.255.255.0 inet6 addr: FE80 :: A00: 27ff: fea6: 4e46/64 Zakres: link UP BROADCAST RUNNING Multicast MTU: 1500 Metric: 1

3) Zapewnić można podłączyć do tego IP z serwera jesteś na:

$ ssh [email protected]

4) Sprawdź status węzła, a także potwierdź, że pokazuje to samo IP:

stan $ nodetool

5) uruchomić polecenie, aby połączyć się z IP (tylko określenie portu, jeśli nie jest używany domyślnie):

$ cqlsh xxx.xxx.xx.xx

+0

możesz rozróżnić, które polecenie możemy uruchomić na którym serwerze. próbując osiągnąć to samo. łączenie z jednego serwera na drugi, w którym zainstalowany jest pojedynczy klaster cassabdra " –

3

Być może będziesz musiał umieścić cqlsh z wersji 2.1 lub 2.0 na swoim mac, aby dopasować serwer, z którym próbujesz się połączyć. Tak więc najpierw spróbowałem.

+0

Zwykły i prosty. Pracuje dla mnie! –

2

byłem przeżywa ten sam błąd (bieg Cassandrę 2.2.0 na Windows 8.1), i znalazłem obejście Gustav Grusell który pracował dla mnie: https://issues.apache.org/jira/browse/CASSANDRA-9467?focusedCommentId=14693410&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14693410

Obejście przedstawia on jest zmodyfikować cqlsh.py skrypt, aby zaakceptować wersję protokołu. Po wprowadzeniu tych zmian będzie można określić wersję protokołu 3 (na przykład), przekazując --protocolversion=3 do cqlsh.

Znajdź cqlsh.py w folderze bin Cassandra i wykonaj kopię zapasową przed wprowadzeniem tych zmian.

Dodaj następujący wiersz obok innych parser.add_option sprawozdania (~ linia 175):

parser.add_option("--protocolversion", default=DEFAULT_PROTOCOL_VERSION, help='Specify protocol version (default: %default).') 

Dodaj następujące obok innych optvalues ​​pod def read_options(cmdlineargs, environment): (~ linia 2520):

optvalues.protocolversion = option_with_default(configs.get, 'cql', 'protocolversion', DEFAULT_PROTOCOL_VERSION) 

Dodać następujące przed zwrotnym oświadczeniem w def read_options(cmdlineargs, environment): (~ linia 2574)

if options.protocolversion: 
    try: 
     options.protocolversion = int(optvalues.protocolversion) 
    except ValueError: 
     options.protocolversion=DEFAULT_PROTOCOL_VERSION 

Modyfikuj polecenia Shell w def main(options, hostname, port): zawierać wersję protokołu (~ linia 2657):

    connect_timeout=options.connect_timeout, 
        protocol_version=options.protocolversion) 

Oto co moja cqlsh.py teraz wygląda: http://pastebin.com/f9D2zEE4