我们知道不建议在Amazon实例外部访问ElastiCache,因此我们只在Amazon EC2实例中尝试以下内容.
我们有一个包含9个节点的ElastiCache Redis集群.当我们尝试使用普通的redis实现连接到它时,它会抛出一些Moved错误
按照@Miller尝试了重试策略方法.还尝试使用不稳定且稳定(可怜的人)实现的RedisCluster.
这些实现都不起作用.有什么建议吗?
amazon-ec2 amazon-web-services redis node.js amazon-elasticache
我有一个在Amazon Web Services上运行的网站,它使用Elastic Beanstalk部署并运行至少2个EC2微实例.自动扩展策略已到位,因此可以根据网站中的流量进行扩展和缩小.由于这种自动扩展策略,我想避免使用粘性会话,因此我使用的是memcached-session-manager.我正在使用Amazon ElastiCache(小实例)作为memcached服务器.
context.xml中的配置如下:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="sessions.myinstancecode.0001.use1.cache.amazonaws.com:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="none"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
Run Code Online (Sandbox Code Playgroud)
当流量较低(即少于10个在线用户)时,此工作正常,但有时会导致EC2实例重新启动.您可以想象,如果网站当前正在两个实例上运行并且他们都决定同时重新启动,那么该网站将无法访问,这是一个大问题.这些是在EC2实例决定重新启动之前在Amazon S3上轮换的tail_catalina.log中的最后一行:
Jun 13, 2012 12:32:27 AM de.javakaffee.web.msm.BackupSessionTask handleException
WARNING: Could not store session 42F9761AC24F826E1FC3F2A834FBF442 in memcached.
Note that this session was relocated to this node because the original node was not available.
net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: sessions.myinstancecode.0001.use1.cache.amazonaws.com/10.194.23.99:11211
at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:73)
at de.javakaffee.web.msm.BackupSessionTask.storeSessionInMemcached(BackupSessionTask.java:230)
at de.javakaffee.web.msm.BackupSessionTask.doBackupSession(BackupSessionTask.java:195)
at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:120)
at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:51)
at de.javakaffee.web.msm.BackupSessionService$SynchronousExecutorService.submit(BackupSessionService.java:339)
at de.javakaffee.web.msm.BackupSessionService.backupSession(BackupSessionService.java:198)
at de.javakaffee.web.msm.MemcachedSessionService.backupSession(MemcachedSessionService.java:967)
at de.javakaffee.web.msm.SessionTrackerValve.backupSession(SessionTrackerValve.java:226)
at de.javakaffee.web.msm.SessionTrackerValve.invoke(SessionTrackerValve.java:128)
at …Run Code Online (Sandbox Code Playgroud) memcached session-replication session-management amazon-web-services amazon-elasticache
我目前正在运行一个通过Elasticache使用Redis的站点.我们希望移动到具有更多RAM的更大实例,因为我们在当前实例类型上达到了大约70%.
有没有办法按照扩展RDS实例的方式扩展Elasticache实例?
另外,我想创建一个副本组并添加一个更大的实例.然后,一旦它被复制并运行,就将新实例提升为主实例.这似乎不可能通过AWS控制台实现,因为副本是使用与主节点相同的实例类型创建的.
我错过了什么,或者只是一个无法实现的用例.我知道我可以启动一个更大的实例并手动处理复制,然后移动Web服务器以使用新服务器,但由于DNS迁移等原因需要一些停机时间等.
谢谢!,艾伦
最近我刚开始将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')...
Run Code Online (Sandbox Code Playgroud)
对于我的设置我使用:
为了解决我的问题,我已经在单独的EC2实例上安装了memcached并且没有任何问题.
我的问题是,我是否需要使用AWS Elasticache PHP Client而不是php5-memcached来使用Elasticache?我的印象是Elasticache是Memcached的替代品,可以用于解决问题.
感谢您的帮助!
我想在 ElastiCache 上监控我的 redis 缓存集群。从 AWS/Elasticache,我能够获得 FreeableMemory 和 BytesUsedForCache 等指标。如果我没看错,BytesUsedForCache 是集群使用的内存(假设集群中只有一个节点)。我想计算内存的使用百分比。任何人都可以帮助我获得 Redis 中内存使用的百分比。
我一直使用Lettuce作为Redis客户端与AWS Elasticache交谈.我当前使用的具体配置是具有预定义节点地址的静态主站/从站.最近,主节点开始启动故障转移过程并最终导致所有应用程序写入请求失败,并出现以下错误:
redis.RedisCommandExecutionException: READONLY You can't write against a read only slave.
Run Code Online (Sandbox Code Playgroud)
从那时起,我一直在做一些研究,并意识到Standalone Master/Slave可能是符合与Elasticache交谈的目的(在非集群模式下),因为根据AWS文档,客户端应始终只与主要端点 - 在发生故障转移时更新为指向新主服务器.
这让我想知道,为什么作者在使用AWS Elasticache时建议使用Static Master/Slave和预定义的节点地址方法?
有什么想法吗?
配置:1个主节点和2个从节点
我正在处理ClusterAllFailedError: Failed to refresh slots cache.来自 ioredis 和 Elasticache的问题。这是我的集群配置
const clusterOptions = {
enableReadyCheck: true,
retryDelayOnClusterDown: 300,
retryDelayOnFailover: 1000,
retryDelayOnTryAgain: 3000,
slotsRefreshTimeout: 200000000000000,
clusterRetryStrategy: (times) => Math.min(times * 1000, 10000),
dnsLookup: (address, callback) => callback(null, address),
scaleReads: 'slave',
showFriendlyErrorStack: true,
redisOptions: {
keyPrefix: config.queue.prefix,
autoResubscribe: true,
autoResendUnfulfilledCommands: true
}
}
const redisClientInstance = new Redis.Cluster([{ host: '', port: ''}], clusterOptions);
Run Code Online (Sandbox Code Playgroud)
但是尝试访问 Redis 总是会导致Failed refresh slots cache. 还有其他人处理过这个问题吗?
谢谢你。
我有使用 Jedis 连接工厂连接到 Redis 集群的 Spring Boot 应用程序:
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());
redisClusterConfiguration.setPassword(redisProperties.getPassword());
jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration);
Run Code Online (Sandbox Code Playgroud)
并从 application.yml 读取节点列表:
spring:
redis:
host: 127.0.0.1
port: 6379
timeout: 300s
cluster:
nodes: 127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382
Run Code Online (Sandbox Code Playgroud)
现在我们想切换到 Elasticache,因为我们无论如何都要在 AWS 上托管我们的 Redis 集群。这将很容易完成。如果可以使用 AmazonElastiCache 库。然后我们可以使用 AWS 凭证连接到 Elasticache 集群,拉取可用节点并将其放入列表并将其传递给 Jedis,而不是在 application.yml 中对其进行硬编码,例如:
spring:
redis:
host: 127.0.0.1
port: 6379
timeout: 300s
cluster:
nodes: 127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382
Run Code Online (Sandbox Code Playgroud)
但 DevOps 团队表示,他们无法在所有实验室上配置 AWS 访问权限,他们有理由这样做。此外,我们需要通过 URL 连接到特定的集群,而不是连接到 AWS 并拉取所有可用的集群。
所以我尝试将 Elasticache 集群 url 作为独立的和作为 application.yml 配置中的集群直接传递给 Jedis。在这两种情况下都建立了连接,但是当 App 尝试写入 Elasticache 时,它会出现 MOVED …
amazon-web-services redis jedis amazon-elasticache spring-boot
我目前在Rails 3应用程序中使用Heroku的Memcached,并希望转移到Elasticache,因为价格更优惠.这可能吗?配置相对简单吗?关于性能,我应该注意什么?
如何在Django中更改Memcached/Elasticache缓存后端的检索超时?
我正在使用亚马逊的Elasticache在Django中缓存内容,我经常看到如下错误:
File "/usr/local/myproject/.env/lib/python2.7/site-packages/django/template/defaulttags.py", line 285, in render
return nodelist.render(context)
File "/usr/local/myproject/.env/lib/python2.7/site-packages/django/template/base.py", line 830, in render
bit = self.render_node(node, context)
File "/usr/local/myproject/.env/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
return node.render(context)
File "/usr/local/myproject/.env/lib/python2.7/site-packages/django/templatetags/static.py", line 109, in render
url = self.url(context)
File "/usr/local/myproject/.env/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 12, in url
return staticfiles_storage.url(path)
File "/usr/local/myproject/.env/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 136, in url
hashed_name = self.cache.get(cache_key)
File "/usr/local/myproject/.env/lib/python2.7/site-packages/django/core/cache/backends/memcached.py", line 64, in get
val = self._cache.get(key)
Error: error 31 from memcached_get(myproject:1:staticfiles:27e4bc0): A TIMEOUT OCCURRED
Run Code Online (Sandbox Code Playgroud)
我已经尝试增加我的Elasticache集群中的节点数量,但这没有任何效果.我的下一个想法是增加memcached检索的超时,但Django文档似乎没有为此提供选项.
有一个"TIMEOUT"选项,但这似乎定义了内容到期之前的默认时间,而不是HTTP请求到memcached服务器的超时.