PHP Elasticache连接失败

时间:2016-05-18 17:09:59

标签: php laravel amazon-web-services amazon-elasticache

最近我刚开始将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')...

对于我的设置,我正在使用:

  • Laravel 5.2
  • AWS Elasticache t2.small
  • php5-memcached module libmemcached 1.0.18

暂时解决我的问题我已经在单独的EC2实例上安装了memcached并且没有任何问题。

我的问题是,我是否需要使用AWS Elasticache PHP Client而不是php5-memcached才能使用Elasticache?我的印象是Elasticache是​​Memcached的替代品,可以用于解决问题。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在AWS中使用诸如Elasticache之类的管理服务时,没有什么重要的考虑因素。

  1. 默认情况下,AWS Elasticache为not publicly accessible。仅可通过内部IP访问。 (但是有一些公共访问选项的解决方法,例如VPN连接,直接连接,Basion主机等。)
  2. Elasticache不提供安全性,例如密码(这就是为什么使用网络Nacl或以后的应用程序安全组限制密码的重要性)

关于您的问题,应用程序无法建立与缓存实例的连接,此错误表明问题出在网络的某个地方。这个问题很常见。

很可能是由

引起的
  1. EC2实例没有可用于访问Elasticache端点的路由。如果从其他VPC(与应用程序EC2使用的VPC不同)配置了Elasticache,则会出现此问题。要解决此问题,您可以将缓存移至EC2所在的同一VPC,或者需要对等2 VPC并创建本地路由以建立连接。

  2. EC2实例具有有效的路由,或者它们位于同一VPC中,但是已被Elasticache SecurityGroup(SG)阻止。要解决此问题,您需要检查您的EC2专用IP是否已使用memcache端口列出到Elasticache SG入站规则中。 allow IP 172.0.1.1/32 to port 11211

enter image description here

答案 1 :(得分:0)

检查您的安全组设置,然后将其设置为0.0.0.0/32(不安全-对所有人开放,但是一种很好的测试方法),如果可行,只需将其设置为您的公共IP地址即可https://www.whatismyip.com/what-is-my-public-ip-address/