雷迪斯 : Connection Closed by Server Error with Django

标签 redis haproxy

我已经配置了一个 Redis sentinel 组(1 个主站和两个自动故障转移的从站),连接都很好,sentinel 故障转移正在工作,但是当从应用程序连接时它会抛出以下错误:

Request Method: GET
Request URL: https://node-app/leaderboard/5790778dd4a8db6171625910/

Django Version: 1.9.9
Python Version: 2.7.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_mongoengine',
 'django_mongoengine.mongo_auth',
 'django_mongoengine.mongo_admin.sites',
 'django_mongoengine.mongo_admin',
 'mongonaut',
 'rest_framework',
 'rest_framework_swagger',
 'rest_framework_mongoengine',
 'rest_framework.authtoken',
 'social.apps.django_app.me',
 'rest_social_auth',
 'django_s3_storage',
 'mongoengine',
 'corsheaders',
 'seacucumber',
 'djcelery',
 'src',
 'oauth2_provider',
 'rest_framework_social_oauth2']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'social.apps.django_app.middleware.SocialAuthExceptionMiddleware']



Traceback:

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in dispatch
  466.             response = self.handle_exception(exc)

File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py" in dispatch
  463.             response = handler(request, *args, **kwargs)

File "./src/apps/users/views/rankview.py" in get
  16.         ranks, status = RankClass.retrieve_rank(id)

File "./src/apps/users/libraries/ranklib.py" in retrieve_rank
  132.             ranks[name][TOP] = leaderboard.top(TOPRANKUPTO, with_member_data=True)

File "/usr/local/lib/python2.7/dist-packages/leaderboard/leaderboard.py" in top
  890.         return self.top_in(self.leaderboard_name, number, **options)

File "/usr/local/lib/python2.7/dist-packages/leaderboard/leaderboard.py" in top_in
  903.         return self.members_from_rank_range_in(leaderboard_name, 1, number, **options)

File "/usr/local/lib/python2.7/dist-packages/leaderboard/leaderboard.py" in members_from_rank_range_in
  861.         if ending_rank > self.total_members_in(leaderboard_name):

File "/usr/local/lib/python2.7/dist-packages/leaderboard/leaderboard.py" in total_members_in
  323.         return self.redis_connection.zcard(leaderboard_name)

File "/usr/local/lib/python2.7/dist-packages/redis/client.py" in zcard
  1595.         return self.execute_command('ZCARD', name)

File "/usr/local/lib/python2.7/dist-packages/redis/client.py" in execute_command
  578.             connection.send_command(*args)

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in send_command
  563.         self.send_packed_command(self.pack_command(*args))

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in send_packed_command
  538.             self.connect()

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in connect
  446.             self.on_connect()

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in on_connect
  514.             if nativestr(self.read_response()) != 'OK':

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in read_response
  577.             response = self._parser.read_response()

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in read_response
  238.         response = self._buffer.readline()

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in readline
  168.             self._read_from_socket()

File "/usr/local/lib/python2.7/dist-packages/redis/connection.py" in _read_from_socket
  143.                                   (e.args,))

Exception Type: ConnectionError at /leaderboard/5790778dd4a8db6171625910/
Exception Value: Error while reading from socket: ('Connection closed by server.',)

我按照以下文档进行 haproxy-redis-sentinel 设置:https://discuss.zendesk.com/hc/en-us/articles/205309388-How-to-setup-HAProxy-and-Redis-Sentinel-for-automatic-failover-between-Redis-Master-and-Slave-servers

我可以使用 redis-cli 连接到 haproxy,但是当运行 info 命令时,会弹出连接关闭错误(尽管它会将我带到 redis-cli shell),并且在 redis 中启用了身份验证并且它在没有任何问题。

配置等都是一样的,我检查了防火墙、安全组等,nc -zv 一切正常,等等。

最佳答案

问题是 Elastic Load-balancer 配置了错误的检查,因此它假设 HA 实例停止服务。因此放弃任何通信。我的错。

关于雷迪斯 : Connection Closed by Server Error with Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39011976/

相关文章:

azure - HAProxy 中的 Proxy_pass 等效项

docker - haproxy SSL 终止后的 Browsersync,无法正常工作

openshift - 我可以使用可扩展应用程序的 git 存储库中的文件调整 Openshift 的 haproxy.cfg 吗?

amazon-web-services - 当多个客户端尝试同时读/写一个项目时,Redis 是原子的吗?

远程服务器上的 Redis 批量插入

ruby-on-rails - rails - WebSocket

php - ZF2 Redis : how to set expiration time for a key

sockets - 如何在 HA 代理中使用 http-tunnel 在同一套接字上支持 HTTP 然后 TCP

php - 使用 haproxy 和 php websocket 执行查询

sorting - 如何最好地使用 Redis 创建排序集