【问题标题】:Load balancing and session management in yiiyii 中的负载均衡和会话管理
【发布时间】:2014-05-08 18:39:37
【问题描述】:

如何管理用于管理负载平衡的 2 个或多个 Web 服务器之间的会话?

我找到的点是

  1. 使用数据库会话CDbHttpSession
  2. 使用缓存会话 CCacheHttpSession
  3. 使用安全管理器CSecurityManager

【问题讨论】:

    标签: php session yii load-balancing


    【解决方案1】:

    你有几个选择:

    1) 如果您的负载均衡器支持它,您可以启用会话持久性,以便用户始终被发送到与他们最初访问的服务器相同的服务器。这样做的好处是,如果您不想更改任何代码,它很容易设置。不利的一面是,如果您的其中一台服务器出现故障,您将丢失该节点上的所有会话。

    2) 在 node1 和 node2 之间设置一个共享的 memcache(不是 memcached)会话。相关设置正在。

    php.ini

    session.save_handler memcache
    session.save_path tcp://<ip1>, tcp://<ip2>
    memcache.ini
    
    memcache.allow_failover 1
    memcache.default_port   11211
    memcache.hash_strategy  standard
    memcache.max_failover_attempts  20
    

    设置起来有点棘手,但一旦你让它工作,如果一个服务器出现故障,你就有两台服务器之间的完全冗余。

    3) 设置第三个节点来管理会话并将 php session.save_path 配置为该服务器的 ip。这样做的好处是会话现在由第三台服务器管理。缺点是您失去冗余,如果该服务器出现故障,您将失去会话。

    这是我得到的最佳答案。但是我不能用APC!!

    还有其他方法吗?

    【讨论】:

      【解决方案2】:

      正如 Yii 项目负责人强所说,你需要注意的只有一件事,那就是 CSecurityManager 的validationKey。默认情况下,此密钥是第一次自动/随机生成的,并存储在运行时目录下。在多服务器环境中,您应该显式配置此属性,以便所有服务器共享相同的密钥。此密钥被广泛用于为各种安全相关措施生成哈希密钥。

      【讨论】:

      • 您应该将两个答案合二为一。
      • @topher 怎么样?根据qiang,我们只需要使用 CSecurityManager 。
      猜你喜欢
      • 2014-01-24
      • 1970-01-01
      • 2015-09-28
      • 2023-03-10
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2021-09-06
      相关资源
      最近更新 更多