我有 1 个负载平衡服务器和 2 个 Web 服务器:Server1 和 Server2。它们都与数据库服务器连接。 我的问题: 我正在使用 Yii session 来控制 session 。 成功登录Server1后,负载均衡服务器重定向到Server 2 => 它不保留我之前登录的 session (server1)
如何在 Server2 中保持 session
最佳答案
您有几个选择:
1) 如果您的负载均衡器支持,您可以启用 session 持久性,以便用户始终被发送到与他们最初访问的服务器相同的服务器。这样做的好处是,如果您不想更改任何代码,则可以轻松设置。缺点是,如果其中一台服务器出现故障,您将丢失该节点上的所有 session 。
2) 在node1 和node2 之间设置共享memcache(不是memcached) session 。相关设置如下。
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) 设置第三个节点来管理 session 并将 php session.save_path
配置为该服务器的 IP。这样做的好处是 session 现在由第三台服务器管理。缺点是您会失去冗余,如果该服务器出现故障,您就会丢失 session 。
关于session - Yii session 在多服务器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627999/