2015-09-02 11 views
6

non posso cqlsh all'host remotoCome connettersi a Cassandra (remotehost) utilizzando 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">',)}) 

Sto usando cqlsh 5.0.1 e pitone 2.7.10

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

Sono su Mac e usato le istruzioni da http://www.datastax.com/2012/01/working-with-apache-cassandra-on-mac-os-x per scaricare cassandra.

Cassandra sul mio locale è 2.2.1 (come ho capito dal file zip) e sembra che cassandra sull'host remoto NON sia 2.2.1 (presumo sia 2.0 o 2.1). Senza sapere che cosa definitivamente la versione è su host remoto, come posso provare a connettersi a Cassandra su host remoto

+0

assomiglia a questo - http: // StackOverflow. it/questions/31444098/python-cassandra-driver-invalid-or-unsupported-protocol-version-4 – LHWizard

risposta

5

1) Assicurarsi che il servizio è in esecuzione:

$ ps aux | grep cassandra

Esempio: 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) assicurarsi che si sta utilizzando il IP corretto controllando la configurazione del server:

$ ifconfig

Esempio:

eth1 link encap: Ethernet H Waddr 08: 00: 27: A6: 4e: 46
inet addr: 192.168.56.10 Bcast: 192.168.56.255 Mask: 255.255.255.0 inet6 addr: fe80 :: A00: 27ff: fea6: 4e46/64 Campo di applicazione: collegamento UP BROADCAST RUNNING MULTICAST MTU: 1500 Metrica: 1

3) Assicurarsi è possibile collegarsi a quella IP dal server si è in:

$ ssh [email protected]

4) Verificare lo stato del nodo e confermare anche che mostri lo stesso IP:

stato $ nodetool

5) eseguire il comando per la connessione con l'IP (solo specificare la porta se non si utilizza il valore predefinito):

$ cqlsh xxx.xxx.xx.xx

+0

puoi distinguere quale comando possiamo eseguire su quale server. cercando di ottenere la stessa cosa connessione da un server all'altro dove è installato il singolo cluster Cassabdra ' –

3

Potrebbe essere necessario inserire cqlsh da 2.1 o 2.0 sul Mac per abbinare il server a cui si sta tentando di connettersi. Quindi è quello che proverei prima.

+0

Semplice e chiaro. Per me va bene! –

2

stavo sperimentando lo stesso errore (in esecuzione Cassandra 2.2.0 su Windows 8.1), e hanno trovato una soluzione alternativa da Gustav Grusell che ha funzionato per me: https://issues.apache.org/jira/browse/CASSANDRA-9467?focusedCommentId=14693410&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14693410

La soluzione si presenta è quello di modificare il vostro cqlsh.script py per accettare una versione di protocollo. Dopo aver apportato queste modifiche, sarà possibile specificare la versione 3 del protocollo (ad esempio) passando a --protocolversion=3 in cqlsh.

Individuare cqlsh.py nella cartella Cassandra bin e eseguirne il backup prima di apportare queste modifiche.

Aggiungere la seguente riga a fianco degli altri parser.add_option dichiarazioni (~ linea 175):

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

Aggiungere il seguente accanto agli altri optvalues ​​sotto def read_options(cmdlineargs, environment): (~ linea 2520): Aggiungi

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

la seguente prima della dichiarazione di ritorno in def read_options(cmdlineargs, environment): (~ riga 2574)

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

Modificare il comando di Shell in def main(options, hostname, port): per includere la versione del protocollo (~ linea 2657):

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

Ecco ciò che il mio cqlsh.py ora assomiglia: http://pastebin.com/f9D2zEE4