【发布时间】:2019-09-19 23:30:05
【问题描述】:
我在 AWS 上运行 Django 2.2 应用程序,该应用程序与 AWS ElastiCache 上的 Memcached 一起正常工作,但由于某种原因,它无法连接到 AWS ElastiCache 上的 Redis 服务器。
我已将权限添加到我的安全组,但没有运气,http 请求只是挂起,直到超时。
尽管类似的行为通常与安全组有关,但我觉得我可能在 .ebextensions 中的 .requirements 或 Yum 包中缺少一些 Redis 特定包,因为一切都在本地正常工作,并且使用 @ AWS 上的 987654325@ 服务器也是如此。
也许,我是否必须以某种方式启动/启用 Redis 服务器才能开始接受连接?
这就是我所拥有的。
settings.py
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://myendpoint.cache.amazonaws.com:6379',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}
.ebextensions
packages:
yum:
python36-devel: []
mysql-devel: []
libmemcached-devel: []
gcc: []
gcc-c++: []
libffi-devel: []
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: "api.settings"
requirements.txt
blessed==1.15.0
botocore==1.12.137
cached-property==1.5.1
cement==2.8.2
certifi==2019.3.9
chardet==3.0.4
colorama==0.3.9
django-redis==4.10.0
Django==2.2.1
djangorestframework==3.9.2
docutils==0.14
future==0.16.0
future==0.16.0
idna==2.7
jmespath==0.9.4
jsonschema==2.6.0
mysqlclient==1.4.2.post1
pathspec==0.5.9
python-dateutil==2.8.0
python-memcached==1.59
pytz==2019.1
PyYAML==3.13
redis==3.2.1
requests==2.20.1
semantic-version==2.5.0
six==1.11.0
sqlparse==0.3.0
termcolor==1.1.0
texttable==0.9.1
urllib3==1.24.2
wcwidth==0.1.7
websocket-client==0.56.0
【问题讨论】:
-
您遇到的确切错误是什么? redis 实例和您的 ec2 实例是否共享同一个安全组?
-
ssh 进入你的 Django 机器,使用 manage.py shell --settings=path.to.settings 启动一个 shell 并直接尝试写入/读取缓存。这应该会显示错误。
-
您也没有显示错误的日志吗?
-
首先我会看看你的 Django 日志。如果您没有它们,那么这是您需要做的第一件事:启用将所有 Django 错误记录到文件中。然后在系统日志中。
-
这可以解释问题,所以你在正确的轨道上。我会再次检查您的 ElastiCache 实例的安全组设置。它必须接受端口 6379 上的传入 tcp 连接,源设置为您的 ec2 实例的 sg,并且与您的 ec2 实例在同一个 vpc 中。另外为什么错误会重复端口?
标签: python django amazon-web-services redis memcached