- Notifications
You must be signed in to change notification settings - Fork 2.6k
Description
Version: What redis-py and what redis version is the issue happening on?
redis-py 4.3.4, 4.3.5
redis 7.0.4
Platform: What platform / version? (For example Python 3.5.1 on Windows 7 / Ubuntu 15.10 / Azure)
Python 3.6.8, 3.8.2 Linux
Python 3.10.7 MacOS
Description: Description of your issue, stack traces from errors and code that reproduces the issue
I have a redis cluster running on a server that has two network interfaces.
Locally on the server, the following code works for connecting to the cluster:
>>> import redis >>> rc = redis.RedisCluster(host="127.0.0.1", port=30001) >>> rc = redis.RedisCluster(host="my.public.ip.address", port=30001) >>> rc = redis.RedisCluster(host="my.private.ip.address", port=30001)
On a separate host that can only reach the cluster via its public IP address, the following succeeds:
>>> import redis >>> rc = redis.RedisCluster(host="my.public.ip.address", port=30001)
On a third host that can only reach the cluster via its private IP address, the following FAILS:
>>> import redis >>> rc = redis.RedisCluster(host="my.private.ip.address", port=30001)
And produces the following errors:
<class 'redis.exceptions.ConnectionError'> Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 611, in connect sock = self.retry.call_with_retry( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry return do() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 612, in <lambda> lambda: self._connect(), lambda error: self.disconnect(error) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 677, in _connect raise err File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 665, in _connect sock.connect(socket_address) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1067, in _execute_command connection = get_connection(redis_node, *args, **kwargs) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 50, in get_connection return redis_node.connection or redis_node.connection_pool.get_connection( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 1387, in get_connection connection.connect() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 617, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:30001. Connection refused. <class 'redis.exceptions.ConnectionError'> Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 611, in connect sock = self.retry.call_with_retry( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry return do() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 612, in <lambda> lambda: self._connect(), lambda error: self.disconnect(error) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 677, in _connect raise err File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 665, in _connect sock.connect(socket_address) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1067, in _execute_command connection = get_connection(redis_node, *args, **kwargs) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 50, in get_connection return redis_node.connection or redis_node.connection_pool.get_connection( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 1387, in get_connection connection.connect() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 617, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:30001. Connection refused. <class 'redis.exceptions.ConnectionError'> Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 611, in connect sock = self.retry.call_with_retry( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry return do() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 612, in <lambda> lambda: self._connect(), lambda error: self.disconnect(error) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 677, in _connect raise err File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 665, in _connect sock.connect(socket_address) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1067, in _execute_command connection = get_connection(redis_node, *args, **kwargs) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 50, in get_connection return redis_node.connection or redis_node.connection_pool.get_connection( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 1387, in get_connection connection.connect() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 617, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:30001. Connection refused. <class 'redis.exceptions.ConnectionError'> Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 611, in connect sock = self.retry.call_with_retry( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry return do() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 612, in <lambda> lambda: self._connect(), lambda error: self.disconnect(error) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 677, in _connect raise err File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 665, in _connect sock.connect(socket_address) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1067, in _execute_command connection = get_connection(redis_node, *args, **kwargs) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 50, in get_connection return redis_node.connection or redis_node.connection_pool.get_connection( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 1387, in get_connection connection.connect() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 617, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:30001. Connection refused. <class 'redis.exceptions.ConnectionError'> Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 611, in connect sock = self.retry.call_with_retry( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry return do() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 612, in <lambda> lambda: self._connect(), lambda error: self.disconnect(error) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 677, in _connect raise err File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 665, in _connect sock.connect(socket_address) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1067, in _execute_command connection = get_connection(redis_node, *args, **kwargs) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 50, in get_connection return redis_node.connection or redis_node.connection_pool.get_connection( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 1387, in get_connection connection.connect() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 617, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:30001. Connection refused. Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 611, in connect sock = self.retry.call_with_retry( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/retry.py", line 46, in call_with_retry return do() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 612, in <lambda> lambda: self._connect(), lambda error: self.disconnect(error) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 677, in _connect raise err File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 665, in _connect sock.connect(socket_address) ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1067, in _execute_command connection = get_connection(redis_node, *args, **kwargs) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 50, in get_connection return redis_node.connection or redis_node.connection_pool.get_connection( File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 1387, in get_connection connection.connect() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/connection.py", line 617, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:30001. Connection refused. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1450, in initialize copy_kwargs = copy.deepcopy(kwargs) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 237, in _deepcopy_method return type(x)(x.__func__, deepcopy(x.__self__, memo)) File "/usr/lib/python3.8/copy.py", line 172, in deepcopy y = _reconstruct(x, memo, *rv) File "/usr/lib/python3.8/copy.py", line 270, in _reconstruct state = deepcopy(state, memo) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib/python3.8/copy.py", line 172, in deepcopy y = _reconstruct(x, memo, *rv) File "/usr/lib/python3.8/copy.py", line 270, in _reconstruct state = deepcopy(state, memo) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib/python3.8/copy.py", line 172, in deepcopy y = _reconstruct(x, memo, *rv) File "/usr/lib/python3.8/copy.py", line 270, in _reconstruct state = deepcopy(state, memo) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib/python3.8/copy.py", line 172, in deepcopy y = _reconstruct(x, memo, *rv) File "/usr/lib/python3.8/copy.py", line 270, in _reconstruct state = deepcopy(state, memo) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib/python3.8/copy.py", line 172, in deepcopy y = _reconstruct(x, memo, *rv) File "/usr/lib/python3.8/copy.py", line 270, in _reconstruct state = deepcopy(state, memo) File "/usr/lib/python3.8/copy.py", line 146, in deepcopy y = copier(x, memo) File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/usr/lib/python3.8/copy.py", line 161, in deepcopy rv = reductor(4) TypeError: cannot pickle '_thread.lock' object During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 572, in __init__ self.commands_parser = CommandsParser(self) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/commands/parser.py", line 16, in __init__ self.initialize(redis_connection) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/commands/parser.py", line 19, in initialize commands = r.execute_command("COMMAND") File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1029, in execute_command raise e File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1019, in execute_command res[node.name] = self._execute_command(node, *args, **kwargs) File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1103, in _execute_command self.nodes_manager.initialize() File "/usr/local/share/pynq-venv/lib/python3.8/site-packages/redis/cluster.py", line 1486, in initialize raise RedisClusterException( redis.exceptions.RedisClusterException: ERROR sending "cluster slots" command to redis server 127.0.0.1:30001. error: cannot pickle '_thread.lock' object >>>
From this same third host that produces the above error, I can successfully connect with redis-cli via the following command:
redis-cli -c -h my.private.ip.address -p 30001