【问题标题】:How to use Redis as a session storage for multiple aws instances or ELB?如何使用 Redis 作为多个 AWS 实例或 ELB 的会话存储?
【发布时间】:2015-03-19 14:37:40
【问题描述】:

我是在我的 nodejs 应用程序中使用 redis-server 的初学者 我正在使用 redis 服务器作为我的应用程序的会话存储:

var RedisStore = require('connect-redis')(express);

var admin_session = express.session({
    key: 'admin_token',
    store: new RedisStore({
        host: 'localhost',
        port: 6379,
        db: 2
        // pass: 'RedisPASS'
    }),
    secret: 'aersda@#$32sfas2342'
});

这适用于单实例。但我的查询是针对从 aws elb 提供的多个实例。

实际上,我希望将 redis 服务器作为一个集群,如果任何实例内部有任何更改可用,它会清除所有实例的会话,并清除所有代码级缓存。

如果可能的话,任何人都可以帮助我如何做到这一点以及步骤是什么?

提前致谢, 维杰

【问题讨论】:

  • 您需要在一个地方运行 Redis 并从您的各种节点服务器连接到它。您可以运行 Amazon 的托管 redis,它为您提供了一个跨集群使用的 dns 端点。
  • 不可能每个aws实例上都有redis服务器并且都处于同步模式或集群模式,根据单个实例的更改清除缓存或会话?如果可能的话,请给我一些想法或链接我看到的步骤。
  • 您有多个服务器吗?或者你只是在一个盒子里运行一个节点集群?
  • 是的,我在负载均衡器中有 3 台服务器。

标签: node.js amazon-web-services express redis


【解决方案1】:

当负载均衡器后面有多个 Web 服务器时,这是一种相当标准的会话方法。

如果您在每个 Web 实例上运行一个 redis 服务器,那么您需要在负载均衡器上启用粘性会话。在您开始自动缩放之前,这将正常工作:一旦从池中删除您的一个 Web 实例,在该实例上拥有会话的任何人都会丢失它。

所以你想为你的缓存和/或会话运行一个共享的 redis(或 memcached)服务器。使用 elasticache,您可以选择运行单个节点“集群”并使用标准连接方式,或者运行真正的集群并使用 AWS 库连接到它。

对于会话,我可能只使用单个节点而不用打扰 elasticache 客户端。

如果您想在进行部署时清除缓存,则必须有一个钩子并编写代码来执行此操作。或者你可以简单地启动一个新的 Elasticache 服务器,更新你的配置,然后销毁旧的。

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2014-09-28
    • 2012-05-03
    • 2016-11-11
    相关资源
    最近更新 更多