【发布时间】:2014-05-08 18:39:37
【问题描述】:
如何管理用于管理负载平衡的 2 个或多个 Web 服务器之间的会话?
我找到的点是
- 使用数据库会话CDbHttpSession
- 使用缓存会话 CCacheHttpSession
- 使用安全管理器CSecurityManager
【问题讨论】:
标签: php session yii load-balancing
如何管理用于管理负载平衡的 2 个或多个 Web 服务器之间的会话?
我找到的点是
【问题讨论】:
标签: php session yii load-balancing
你有几个选择:
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!!
还有其他方法吗?
【讨论】:
正如 Yii 项目负责人强所说,你需要注意的只有一件事,那就是 CSecurityManager 的validationKey。默认情况下,此密钥是第一次自动/随机生成的,并存储在运行时目录下。在多服务器环境中,您应该显式配置此属性,以便所有服务器共享相同的密钥。此密钥被广泛用于为各种安全相关措施生成哈希密钥。
【讨论】: