我有1个负载平衡服务器和2个Web服务器:Server1和Server2。它们都与DB Server连接。 我的问题: 我正在使用Yii会话来控制会话。 在我成功登录Server1后,loadbalancing服务器重定向到Server 2 =>它不会保留我之前登录的会话(server1)
如何在Server2中保留会话
答案 0 :(得分:4)
您有几个选择:
1)如果您的负载均衡器支持它,您可以启用会话持久性,以便始终将用户发送到与他们最初命中的服务器相同的服务器。这样做的好处是,如果您不想更改任何代码,则可以轻松设置。缺点是,如果您的某个服务器出现故障,您将丢失该节点上的所有会话。
2)在node1和node2之间设置共享内存缓存(不是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。这样做的好处是会话现在由第三台服务器管理。缺点是你失去了冗余,如果服务器出现故障,你会失去会话。
答案 1 :(得分:2)
除了查尔斯的评论之外还有其他一些想法。
1)您可以使用CDbHttpSession而不是单独获取memcached服务器设置。这会将您的会话存储在Web服务器后面的数据库服务器中。
2)您的服务器是否启用了Suhosin?如果这样做,它将导致许多令人头疼,因为Suhosin会加密您的会话变量(并且会在每台服务器上以不同方式执行),导致您的会话不在服务器之间共享。
祝你好运,如果你拥有它们,可以回答更多问题。当我们处理错误时,转移到负载平衡器花了我们一段时间。