当前位置: 首页 > 面试题库 >

负载平衡集群中的PHP会话-怎么样?

嵇丰
2023-03-14
问题内容

好的,因此我得到了一个非常罕见的负载均衡PHP网站的独特场景。令人讨厌的是-它曾经不是负载均衡的。现在我们开始遇到问题了…

当前唯一的问题是PHP会话。自然,起初没有人想到此问题,因此PHP会话配置保留为默认设置。因此,两个服务器都有自己的少量会话文件存储,而麻烦的是将下一个请求引发到另一个服务器的用户,因为该用户没有在第一个服务器上创建的会话。

现在,我一直在阅读有关如何解决这种情况的PHP手册。在那里,我发现的功能很不错session_set_save_handler()。(而且,与此同时,)整洁。除了我必须在网站的所有页面上调用此函数。而且未来页面的开发人员也必须记住始终都在调用它。感觉有点笨拙,更不用说违反了十几种最佳编码实践。如果我可以翻转一些全局配置选项和
Voilà ,那就更好了-所有会话都神奇地存储在DB或内存缓存或其他东西中。

有关如何执行此操作的任何想法?

补充: 为了澄清-我希望这是标准解决方案的标准情况。仅供参考-
我有一个MySQL数据库。当然,必须有一些可以立即使用的代码来解决这个问题?我当然可以编写自己的会话保存内容,auto_prepend而Greg指出的选择似乎很有希望-
但这就像重新发明轮子一样。:P

新增2:
负载平衡基于DNS。

补充3: 好,我看到一个解决方案是使用auto_prependoption
session_set_save_handler()在每个脚本中插入对的调用并编写我自己的DB持久性,也许抛出调用以memcached提高性能。很公平。

还有什么办法可以避免自己编写所有代码?像一些著名且经过测试的PHP插件吗?

另外,我只是在所有页面中手动添加了会话处理程序。


问题答案:

您可以将PHP设置为处理数据库中的会话,因此所有服务器共享相同的会话信息,因为所有服务器为此使用相同的数据库。

一个很好的教程可以在这里找到。



 类似资料:
  • 假设我在一个集群中有3个ActiveMQ Artemis代理: 经纪人_01 在给定的时间点,我有每个经纪人的消费者数量: 经纪人有50名消费者 让我们假设在这个给定的时间点,有70条消息要发送到集群中的一个队列。 我们期望集群完成负载平衡,以便Broker_01将接收50条消息,Broker_0210条消息,Broker_0310条消息,但目前我们正在经历70条消息通过所有3个代理随机分发。 是

  • 我在3个节点上进行了压力测试,但只有一个CPU很高,其他的都很低。Ignite集群使用TCP发现,我有一个jdbc连接,例如:jdbc:Ignite:Thin://172.16.14.15、172.16.14.16、172.16.14.17/

  • 包含负载均衡集群及节点。 云联壹云 平台提供的本地IDC的负载均衡功能需要管理员先部署负载均衡集群和LBAgent转发节点。 云联壹云 支持负载均衡多集群功能,用户可根据需求配置负载均衡集群以及集群下的转发节点LBAgent,部署集群和转发节点后才可以部署负载均衡实例等。 集群为一组LBAgent转发节点的集合,同一时刻集群中只有一个转发节点处于MASTER,用于监控负载监控实例配置的IP地址和端

  • 我必须手动在MS Azure中创建Kubernetes群集,而不是使用AKS。因此: > 我在一个可用性集中创建了2个VM:一个用于k8s master,第二个用于k8s节点。 我创建了外部负载均衡器并将2个VM添加到后端池。 我使用kubes祈祷创建了k8s集群。 我创建了部署和负载均衡器服务: 但LoadBalancer服务外部IP始终处于挂起状态: 此外,telnet azure\u loa

  • 我安装了一个kubernetes集群。我想为我的一个微服务使用外部数据库(在我的集群之外),但这个外部数据库被设置为集群,没有自己的负载均衡器。 有没有办法创建一个内部负载平衡器服务,让kubernetes始终将微服务定向到正在运行的实例? 我看到您可以设置loadbalancer类型的服务,我如何使用它?我尝试创建它,但我看到loadbalancer服务是用NodePort创建的。它可以在没有节

  • 如何使用MySQL NDB集群数据库来配置应用程序,以满足高可用性和负载平衡的要求。据我所知,我们可以通过适当配置数据库连接url,分别拥有这两个功能,如下所示。 JDBC:MySQL:LoadBalance://[host1][:port],[host2][:port][,[host3][:port]]...[/[database]]][?PropertyName1=PropertyValue1