Тайм-аут при доступе к mongoDB из pymongo с туннелированием
Я пытаюсь получить доступ к кластеру mongoDB с помощью туннелирования. установка:
моя машина => прыгать машина => mongod/mongos...
Я нашел этот ответ: /questions/22548946/kak-svyazat-udalennyij-mongodb-s-pymongo/22548960#22548960, но продолжаю получать тайм-аут от mongodb.
Что я пробовал до сих пор:
- точка останова после кода туннелирования и перед кодом Pymongo; затем доступ к монго из оболочки монго - это сработало (поэтому работает туннелирование)
- подключитесь к: mongos, mongod primary, mongod primary, удалите настройки чтения и так далее.
- попробовал код с несколькими разными средами с похожими настройками
- играть с адресом удаленного связывания (имя хоста / IP)
- играть с локальным адресом привязки ("0.0.0.0" / "127.0.0.1" / "localhost")
Каждый раз, когда я пытаюсь запросить монго (например, col.count(), col.find_one() и т. Д.), Я получаю тайм-аут.
код:
#! /usr/bin/python
from pymongo import MongoClient, ReadPreference
from sshtunnel import SSHTunnelForwarder
import paramiko
SSH_KEY_LOCATION = '...'
JUMP_MACHINE_ADDRESS = '...'
SSH_USER = '...'
REMOTE_MONGO_ADDRESS = '...'
DB_NAME = '...'
COLLECTION_NAME = '...'
pkey = paramiko.RSAKey.from_private_key_file(SSH_KEY_LOCATION)
server = SSHTunnelForwarder(
(JUMP_MACHINE_ADDRESS),
ssh_username=SSH_USER,
ssh_private_key=pkey,
remote_bind_address=(REMOTE_MONGO_ADDRESS, 27017),
local_bind_address=('127.0.0.1', 27017)
)
server.start()
client = MongoClient('mongodb://127.0.0.1:27017', readPreference=ReadPreference.SECONDARY)
db = client[DB_NAME]
col = db[COLLECTION_NAME]
count = col.count({})
print(count)
server.stop()
Любая идея? Спасибо!
=== ОБНОВЛЕНИЕ ===
Вывод ошибки:
File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 1560, in count
return self._count(cmd, collation, session)
File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 1504, in _count
with self._socket_for_reads() as (sock_info, slave_ok):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/Library/Python/2.7/site-packages/pymongo/mongo_client.py", line 982, in _socket_for_reads
server = topology.select_server(read_preference)
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 224, in select_server
address))
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 183, in select_servers
selector, server_timeout, address)
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 199, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: timed out