Я использую kazooclient для связи с ZK-сервером для распределенной операции. Не-SSL-соединение работало безупречно, однако, когда я интегрировал изменения с SSL-соединением, я вижу много разрывов соединений и сокетов в рабочем потоке ZK-сервера, и моя служба также больше не находится в рабочем состоянии.
Ниже приведены некоторые фрагменты исключений kazoolib:
Connection dropped: socket connection error: The operation did not complete (read) (_ssl.c:1977)
Transition to CONNECTING
Traceback (most recent call last):
File "analyzer_mapper.py", line 349, in redistribute
analyzer_dict = json.loads((zkc.get(parseConfig.ANALYZERS_PATH))[0].decode('UTF-8'))
File "/a/lib/kazooclient/kazoo/client.py", line 1075, in get
return self.get_async(path, watch=watch).get()
File "/a/lib/kazooclient/kazoo/handlers/utils.py", line 75, in get
raise self._exception
kazoo.exceptions.ConnectionLoss
Exception in worker queue thread
Traceback (most recent call last):
File "/a/lib/kazooclient/kazoo/handlers/threading.py", line 128, in _thread_worker
func()
File "/a/lib/kazooclient/kazoo/handlers/threading.py", line 291, in <lambda>
self.callback_queue.put(lambda: callback.func(*callback.args))
TypeError: watcher() takes 1 positional argument but 2 were given
Exception in worker queue thread
Traceback (most recent call last):
File "/a/lib/kazooclient/kazoo/handlers/threading.py", line 128, in _thread_worker
func()
File "/a/lib/kazooclient/kazoo/handlers/threading.py", line 291, in <lambda>
self.callback_queue.put(lambda: callback.func(*callback.args))
Разница между вызовами SSL и NON-SSL:
ВЫЗОВ SSL:
get_zookeeper_client_zkc = KazooClient(server_ips, keyfile = keyfile, certfile = certfile, use_ssl = True, verify_certs = False)
Вызов NON-SSL :
get_zookeeper_client_zkc = KazooClient(server_ips, connection_retry = False)
Сбои:
В основном все мои операции set () и get () также не выполняются, из-за чего мое приложение не работает, так как мое приложение зависит от данных API set () и get ().
А также много раз вызывается экземпляр слушателя для разъединения и повторного соединения служб с узлами ZK.
Ниже представлен API-интерфейс обратного вызова моего слушателя:
def my_listener(state):
global zk_reconnect
logger.info('Inside listener()')
if state == KazooState.LOST:
# Register somewhere that the session was lost
logger.info('Lost')
elif state == KazooState.SUSPENDED:
# Handle being disconnected from Zookeeper
logger.info('Disconnected')
else:
# Handle being connected/reconnected to Zookeeper
logger.info('Reconnecting')
zk_reconnect = True