Muitas conexões simultâneas do banco de dados Cassandra através do túnel SSH

2

Eu tenho um aplicativo que usa o cliente PyCassa Cassandra para abrir várias conexões simultâneas para um servidor Cassandra. Quando executo o aplicativo cliente localmente no servidor de banco de dados, ele funciona. No entanto, quando eu encaminhar a porta Cassandra através de um túnel ssh para o servidor de banco de dados e conectar o aplicativo cliente para o servidor através deste túnel, algumas conexões recebem, mas geralmente eu recebo erros como este:

'2012210105:49:49'|WARNING |_append_historyStorage|75  |Exception when appending to CassandraTimeSeries
Traceback (most recent call last):
  File "atr/cassandratimeseries.py", line 140, in append
    cf = self._getColumnFamily(duration, 'main')
  File "atr/cassandratimeseries.py", line 63, in _getColumnFamily
    return ColumnFamily(ConnectionPool(self._keyspace, pool_timeout=100, timeout=15, max_overflow=5), self._columnFamilyName(duration, table_type), **self._column_family_op_options)
  File "/usr/local/lib/python2.7/dist-packages/pycassa/pool.py", line 356, in __init__
    self.fill()
  File "/usr/local/lib/python2.7/dist-packages/pycassa/pool.py", line 415, in fill
    conn = self._create_connection()
  File "/usr/local/lib/python2.7/dist-packages/pycassa/pool.py", line 403, in _create_connection
    (exc.__class__.__name__, exc))
AllServersUnavailable: An attempt was made to connect to each of the servers twice, but none of the attempts succeeded. The last failure was TTransportException: TSocket read 0 bytes

Em um terminal onde eu estava ssh'd no servidor é impresso uma linha de mensagens como:

channel 1034: open failed: administratively prohibited: open failed
channel 1035: open failed: administratively prohibited: open failed
channel 1036: open failed: administratively prohibited: open failed
channel 1037: open failed: administratively prohibited: open failed
channel 1038: open failed: administratively prohibited: open failed
channel 1039: open failed: administratively prohibited: open failed
channel 1040: open failed: administratively prohibited: open failed

Curiosamente, se eu tentar ssh no servidor, obtenho:

channel 1023: chan_read_failed for istate 1
channel 1023: chan_write_failed for ostate 3
Shared connection to xx.xxx.xxx.xxx closed.

Se eu excluir o arquivo de soquete principal em / tmp, então eu posso ssh para ele novamente.

Alguma idéia do que poderia estar dando errado? Eu já aumentei o limite de nofile via /etc/security/limits.conf para o cliente e o servidor (para dez mil) e reiniciei. O "open failed: administratively prohibited" sugere que há algum limite administrativo sendo atingido. O que é e como faço para aumentar (e como eu deveria ter percebido isso por mim mesmo?)

Existem outras maneiras pelas quais os túneis ssh são mais limitados do que se conectar a uma porta local?

obrigado

    
por bshanks 21.01.2012 / 14:58

1 resposta

0

Interessante, eu não encontrei isso antes. Eu tentaria o que você já fez para os próximos passos eu persegui a mensagem "administrativamente proibida" na fonte ssh, ocorre apenas em um caso e é levantada em sshd.c a partir daí eu segui a lógica em channels.c e session.c

Este parece ser o único código no SSH que iria diminuir o número de canais permitidos, não há limite máximo que eu possa ver em sshd.c ou canais.c

/* setup the channel layer */
if (!no_port_forwarding_flag && options.allow_tcp_forwarding)
    channel_permit_all_opens();

Você pode verificar seu sshd_config no servidor e garantir que a seguinte opção esteja configurada:

AllowTcpForwarding yes

A coisa que eu não gosto sobre a minha resposta é que parece haver um limite de 1024 em algum lugar que eu esperaria ter traçado no código. 1024 é frequentemente o limite padrão para numer de arquivos abertos em limits.conf - existe algum outro lugar em que um ulimit está sendo configurado no shell do qual o sshd é iniciado?

    
por 03.09.2012 / 12:01