redis-py icon indicating copy to clipboard operation
redis-py copied to clipboard

redis sentinel throw "Timeout connecting to server" error

Open hitrust opened this issue 3 years ago • 8 comments
trafficstars

Version: redis-py version 4.3.4 redis server version 6.2.7 redis sentinel version 6.2.7

redis server Platform: Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-21-cloud-amd64 Architecture: x86-64

docker: Docker version 20.10.17, build 100c701

redis image: docker official image

redis client Platform: Python 3.9.13 on Windows 10 virtual environment

Description: 1 master, 1 replica, 3 sentinel all in one host. discover_master and discover_slaves can get right result, but master.set throw error "timed out"

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d04dbb25a24 sentinel_redis-sentinel "/docker-entrypoint.…" 29 minutes ago Up 29 minutes 0.0.0.0:26381->26379/tcp, :::26381->26379/tcp sentinel-redis-sentinel-2 9280b646008b sentinel_redis-sentinel "/docker-entrypoint.…" 29 minutes ago Up 29 minutes 0.0.0.0:26380->26379/tcp, :::26380->26379/tcp sentinel-redis-sentinel-3 1d0df59ff350 sentinel_redis-sentinel "/docker-entrypoint.…" 29 minutes ago Up 29 minutes 0.0.0.0:26379->26379/tcp, :::26379->26379/tcp sentinel-redis-sentinel-1 886361c99913 sentinel_redis-slave "/docker-entrypoint.…" 29 minutes ago Up 29 minutes 6379/tcp, 0.0.0.0:6381->6381/tcp, :::6381->6381/tcp sentinel-redis-slave-1 d6827153fdd6 sentinel_redis-master "/docker-entrypoint.…" 29 minutes ago Up 29 minutes 6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp sentinel-redis-master-1

redis-cli -p 26379

127.0.0.1:26379> SENTINEL master mymaster

  1. "name"
  2. "mymaster"
  3. "ip"
  4. "172.25.0.2"
  5. "port"
  6. "6380"
  7. "runid"
  8. "78823b9e95971e48fc161987bc9db927db95f4a7"
  9. "flags"
  10. "master"
  11. "link-pending-commands"
  12. "0"
  13. "link-refcount"
  14. "1"
  15. "last-ping-sent"
  16. "0"
  17. "last-ok-ping-reply"
  18. "96"
  19. "last-ping-reply"
  20. "96"
  21. "down-after-milliseconds"
  22. "5000"
  23. "info-refresh"
  24. "8505"
  25. "role-reported"
  26. "master"
  27. "role-reported-time"
  28. "2267051"
  29. "config-epoch"
  30. "0"
  31. "num-slaves"
  32. "1"
  33. "num-other-sentinels"
  34. "2"
  35. "quorum"
  36. "2"
  37. "failover-timeout"
  38. "60000"
  39. "parallel-syncs"
  40. "1"

127.0.0.1:26379> SENTINEL replicas mymaster

    1. "name"
    2. "172.25.0.3:6381"
    3. "ip"
    4. "172.25.0.3"
    5. "port"
    6. "6381"
    7. "runid"
    8. "d1fb8b420957cd5c5172b2559d2b3c81310bed50"
    9. "flags"
  1. "slave"
  2. "link-pending-commands"
  3. "0"
  4. "link-refcount"
  5. "1"
  6. "last-ping-sent"
  7. "0"
  8. "last-ok-ping-reply"
  9. "97"
  10. "last-ping-reply"
  11. "97"
  12. "down-after-milliseconds"
  13. "5000"
  14. "info-refresh"
  15. "3327"
  16. "role-reported"
  17. "slave"
  18. "role-reported-time"
  19. "2352117"
  20. "master-link-down-time"
  21. "0"
  22. "master-link-status"
  23. "ok"
  24. "master-host"
  25. "redis-master"
  26. "master-port"
  27. "6380"
  28. "slave-priority"
  29. "100"
  30. "slave-repl-offset"
  31. "469845"
  32. "replica-announced"
  33. "1"

127.0.0.1:26379> SENTINEL sentinels mymaster

    1. "name"
    2. "a41ea1840b91accbb79f848bbedba9a53dfe2a9c"
    3. "ip"
    4. "172.25.0.5"
    5. "port"
    6. "26379"
    7. "runid"
    8. "a41ea1840b91accbb79f848bbedba9a53dfe2a9c"
    9. "flags"
  1. "sentinel"
  2. "link-pending-commands"
  3. "0"
  4. "link-refcount"
  5. "1"
  6. "last-ping-sent"
  7. "0"
  8. "last-ok-ping-reply"
  9. "1011"
  10. "last-ping-reply"
  11. "1011"
  12. "down-after-milliseconds"
  13. "5000"
  14. "last-hello-message"
  15. "876"
  16. "voted-leader"
  17. "?"
  18. "voted-leader-epoch"
  19. "0"
    1. "name"
    2. "88c6d217e0c959d7b67ff4af3b784d2a28cabb39"
    3. "ip"
    4. "172.25.0.4"
    5. "port"
    6. "26379"
    7. "runid"
    8. "88c6d217e0c959d7b67ff4af3b784d2a28cabb39"
    9. "flags"
  20. "sentinel"
  21. "link-pending-commands"
  22. "0"
  23. "link-refcount"
  24. "1"
  25. "last-ping-sent"
  26. "0"
  27. "last-ok-ping-reply"
  28. "1011"
  29. "last-ping-reply"
  30. "1011"
  31. "down-after-milliseconds"
  32. "5000"
  33. "last-hello-message"
  34. "790"
  35. "voted-leader"
  36. "?"
  37. "voted-leader-epoch"
  38. "0"
from redis.sentinel import Sentinel
sentinel = Sentinel([('host ip', 26379), ('host ip', 26380), ('host ip', 26381)], socket_timeout=0.1)
# sentinel = Sentinel([('localhost', 26379)], socket_timeout=0.1)

master_result = sentinel.discover_master('mymaster')
slaves_result = sentinel.discover_slaves('mymaster')
print(master_result)
print(slaves_result)

('172.25.0.2', 6380)
[('172.25.0.3', 6381)]
master = sentinel.master_for('mymaster', socket_timeout=0.1)
slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
master.set('foo', 'bar')
result = slave.get('foo')
print(result)

Traceback (most recent call last): File "F:\projects\mystuff\demo\lib\site-packages\redis\connection.py", line 609, in connect sock = self.retry.call_with_retry( File "F:\projects\mystuff\demo\lib\site-packages\redis\retry.py", line 51, in call_with_retry
raise error File "F:\projects\mystuff\demo\lib\site-packages\redis\retry.py", line 46, in call_with_retry
return do() File "F:\projects\mystuff\demo\lib\site-packages\redis\connection.py", line 610, in
lambda: self._connect(), lambda error: self.disconnect(error) File "F:\projects\mystuff\demo\lib\site-packages\redis\connection.py", line 675, in _connect
raise err File "F:\projects\mystuff\demo\lib\site-packages\redis\connection.py", line 663, in _connect
sock.connect(socket_address) socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "F:\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "F:\Python\Python39\lib\runpy.py", line 87, in _run_code exec(code, run_globals) File "F:\projects\mystuff\demo\demo\prodramatiq\redis_op.py", line 36, in master.set('foo', 'bar') File "F:\projects\mystuff\demo\lib\site-packages\redis\commands\core.py", line 2214, in set return self.execute_command("SET", *pieces, **options) File "F:\projects\mystuff\demo\lib\site-packages\redis\client.py", line 1232, in execute_command
conn = self.connection or pool.get_connection(command_name, **options) File "F:\projects\mystuff\demo\lib\site-packages\redis\connection.py", line 1383, in get_connection connection.connect() File "F:\projects\mystuff\demo\lib\site-packages\redis\sentinel.py", line 54, in connect return self.retry.call_with_retry(self._connect_retry, lambda error: None) File "F:\projects\mystuff\demo\lib\site-packages\redis\retry.py", line 51, in call_with_retry
raise error File "F:\projects\mystuff\demo\lib\site-packages\redis\retry.py", line 46, in call_with_retry
return do() File "F:\projects\mystuff\demo\lib\site-packages\redis\sentinel.py", line 44, in _connect_retry
self.connect_to(self.connection_pool.get_master_address()) File "F:\projects\mystuff\demo\lib\site-packages\redis\sentinel.py", line 34, in connect_to super().connect() File "F:\projects\mystuff\demo\lib\site-packages\redis\connection.py", line 613, in connect raise TimeoutError("Timeout connecting to server") redis.exceptions.TimeoutError: Timeout connecting to server

hitrust avatar Jul 19 '22 04:07 hitrust

seems i have the same issue!

machineCYC avatar Aug 14 '22 03:08 machineCYC

I get the same error

murliwatz avatar Nov 03 '22 12:11 murliwatz

Same issue here, has anybody found a workaround?

ant1fact avatar Jan 24 '23 12:01 ant1fact

Got same issue, need help

bygzyz avatar Feb 07 '23 03:02 bygzyz

seems i have the same issue!

Same issue here, has anybody found a workaround?

hi bro, did you got a solution?

bygzyz avatar Feb 07 '23 03:02 bygzyz

Have you tried to increase the value of socket_timeout? For example, using sentinel.master_for('mymaster') instead of sentinel.master_for('mymaster', socket_timeout=0.1).

nerg4l avatar Feb 13 '23 14:02 nerg4l

Thanks @nerg4l the same issue with or without 'timeout' setting

hitrust avatar Feb 14 '23 02:02 hitrust

I'm also experiencing this problem. Has anyone found a solution?

edit:

Sending a giant timeout works for me:

from django.conf import settings
from redis import Sentinel


def get_redis_client():
    sentinel = Sentinel(settings.REDIS_SENTINELS, socket_timeout=1000)
    client = sentinel.master_for(settings.REDIS_MASTER_NAME, socket_timeout=1000)
    return client

edit:

turns out this param units are milliseconds, not seconds

richardARPANET avatar Jan 06 '24 19:01 richardARPANET