Как я могу получить доступ к ScyllaDB в контейнере Docker, используя Python? - PullRequest
0 голосов
/ 30 мая 2018

Я установил контейнер Docker с ScyllaDB в соответствии с официальным документом .Я создал пространство ключей и таблицу.Теперь я хотел бы вставить некоторые данные в эту таблицу.Интересно, я могу это сделать?Я нашел пример:

import cql
con = cql.connect('localhost', 9160,  'logs', cql_version='3.0.0')
print ("Connected!")
cursor = con.cursor()
CQLString = "INSERT INTO event_attend (event_id, event_type, event_user_id) VALUES (131, 'Party', 3156);"
cursor.execute(CQLString)

однако я получаю ошибку, показанную ниже.Я не могу найти никаких примеров, которые показывают, как это можно сделать с помощью Docker.Есть идеи?

No handlers could be found for logger "thrift.transport.TSocket"
Traceback (most recent call last):
  File "scylla_test.py", line 2, in <module>
    con = cql.connect('localhost', 9160,  'logs', cql_version='3.0.0')
  File "/usr/local/lib/python2.7/dist-packages/cql/connection.py", line 143, in connect
    consistency_level=consistency_level, transport=transport)
  File "/usr/local/lib/python2.7/dist-packages/cql/connection.py", line 59, in __init__
    self.establish_connection()
  File "/usr/local/lib/python2.7/dist-packages/cql/thrifteries.py", line 151, in establish_connection
    self.transport.open()
  File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TTransport.py", line 271, in open
    return self.__trans.open()
  File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TSocket.py", line 113, in open
    raise TTransportException(TTransportException.NOT_OPEN, msg)
thrift.transport.TTransport.TTransportException: Could not connect to any of [('::1', 9160, 0, 0), ('127.0.0.1', 9160)]

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Можете ли вы проверить с портом 9042, который является портом CQL по умолчанию.9160 является экономичным портом, который менее используется в наши дни.Также вы можете убедиться, что вы перенаправляете порты, например:

docker run --name some-scylla \ --volume /var/lib/scylla:/var/lib/scylla \ -p 9042:9042 -p 7000:7000 -p 7001:7001 -p 7199:7199 \ -p 9160:9160 -p 9180:9180 -p 10000:10000 \ -d scylladb/scylla --overprovisioned 1

0 голосов
/ 30 мая 2018

Адрес локального хоста контейнера недоступен вне самого контейнера.

Возможно, вы захотите сделать следующее.Сначала убедитесь, что узлы ScyllaDB работают, используя

docker exec -it scylla nodetool status

. Он должен вывести что-то похожее на:

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.17.0.2  153.41 KB  256          100.0%            70a72849-5608-47d5-8c8d-0f1db0f57444  rack1

Если состояние всех узлов "вниз" (DN), вам может понадобитьсячтобы сначала вызвать их.

Теперь, используйте отображаемый адрес узла, который работает.Если в вашем кластере несколько узлов, подойдет любой из этих адресов.Сначала вы можете попытаться подключиться вручную с помощью cqlsh, если он установлен в вашей системе:

cqlsh 172.17.0.2

В противном случае просто вставьте его в скрипт Python и запустите.

...