最近我刚开始将AWS Elasticache用于Laravel应用程序。应用程序在ELB后面的2个实例上运行,处理大约6-10个请求/秒。当我启动应用程序时,一切都很顺利,但后来我开始接收应用程序的连接错误,具有高延迟和超时。错误消息如下:
[2016-05-17 07:28:25] production.ERROR: exception 'RuntimeException' with message 'Could not establish Memcached connection.' in /srv/ensemble/laravel/vendor/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php:38 Stack trace:
#0/srv/ensemble/laravel/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php(164): Illuminate\Cache\MemcachedConnector->connect(Array)
#1 /srv/ensemble/laravel/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php(102): Illuminate\Cache\CacheManager->createMemcachedDriver(Array) #2 /srv/ensemble/laravel/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php(77): Illuminate\Cache\CacheManager->resolve('memcached')...
对于我的设置,我正在使用:
暂时解决我的问题我已经在单独的EC2实例上安装了memcached并且没有任何问题。
我的问题是,我是否需要使用AWS Elasticache PHP Client而不是php5-memcached才能使用Elasticache?我的印象是Elasticache是Memcached的替代品,可以用于解决问题。
感谢您的帮助!
答案 0 :(得分:1)
在AWS中使用诸如Elasticache之类的管理服务时,没有什么重要的考虑因素。
关于您的问题,应用程序无法建立与缓存实例的连接,此错误表明问题出在网络的某个地方。这个问题很常见。
很可能是由
引起的EC2实例没有可用于访问Elasticache端点的路由。如果从其他VPC(与应用程序EC2使用的VPC不同)配置了Elasticache,则会出现此问题。要解决此问题,您可以将缓存移至EC2所在的同一VPC,或者需要对等2 VPC并创建本地路由以建立连接。
EC2实例具有有效的路由,或者它们位于同一VPC中,但是已被Elasticache SecurityGroup(SG)阻止。要解决此问题,您需要检查您的EC2专用IP是否已使用memcache端口列出到Elasticache SG入站规则中。 allow IP 172.0.1.1/32 to port 11211
答案 1 :(得分:0)
检查您的安全组设置,然后将其设置为0.0.0.0/32(不安全-对所有人开放,但是一种很好的测试方法),如果可行,只需将其设置为您的公共IP地址即可https://www.whatismyip.com/what-is-my-public-ip-address/。