Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

redis sentinel throw "Timeout connecting to server" error #2290

Open
hitrust opened this issue Jul 19, 2022 · 8 comments
Open

redis sentinel throw "Timeout connecting to server" error #2290

hitrust opened this issue Jul 19, 2022 · 8 comments

Comments

@hitrust
Copy link

hitrust commented Jul 19, 2022

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

@machineCYC
Copy link

seems i have the same issue!

@murliwatz
Copy link

I get the same error

@ant1fact
Copy link
Contributor

Same issue here, has anybody found a workaround?

@bygzyz
Copy link

bygzyz commented Feb 7, 2023

Got same issue, need help

@bygzyz
Copy link

bygzyz commented Feb 7, 2023

seems i have the same issue!

Same issue here, has anybody found a workaround?

hi bro, did you got a solution?

@nerg4l
Copy link

nerg4l commented Feb 13, 2023

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).

@hitrust
Copy link
Author

hitrust commented Feb 14, 2023

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

@richardARPANET
Copy link

richardARPANET commented Jan 6, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants