【问题标题】:How to share php sessions across multiple servers using memcached of same domain如何使用同一域的 memcached 在多个服务器之间共享 php 会话
【发布时间】:2015-06-27 09:22:00
【问题描述】:

我有三台服务器用于单个域

我使用 nginx 作为负载均衡器。

我想在这些服务器之间共享 php 会话。

我的应用程序严重依赖会话。将会话存储在文件中是个坏主意。我正在为此使用 memcached。

我应该如何准确有效地配置 memcached 以在服务器之间快速读写会话和共享。

或任何其他好的替代建议。

【问题讨论】:

  • 你能解决你的问题吗?

标签: php session memcached load-balancing


【解决方案1】:

当我阅读您的问题时,看起来您在每台服务器上都安装了 Memcache(这就是您询问“服务器之间共享”的原因?)。

我会做的是有一个服务器,你只有有 Memcached。每个 Web 服务器都会连接到您的 Memcache 实例。如果需要,您还可以拥有一个 Memcache 服务器池,Memcache 将负责正确分发您的数据和会话。

首先,您可能希望更改 PHP 中处理会话的方式(针对每个服务器),以便在 Memcache 中读取会话数据。您的 php.ini 文件将需要这个:

[Session]
; Handler used to store/retrieve data.
session.save_handler = memcache[d] ; memcache or memcached
session.save_path = "127.0.0.1:11211"

看看Session Handlers 是如何工作的。请注意,您可以使用 memcachememcached 扩展。它们不一样。

这是两个扩展的文档:

如果您想了解有关选择正确内存缓存的更多详细信息,我建议您检查以下内容: https://serverfault.com/questions/63383/memcache-vs-memcached

请注意,在 Memcache 中存储会话可能会出现问题。如果 Memcache 停止(无论出于何种原因),您将丢失其中的所有数据。您可能需要考虑将会话存储在数据库中,并将它们存储在 Memcache 中以加快处理速度。

您可以构建一个自定义会话处理程序来执行此操作并确保它适合您的需求。你可以阅读更多关于The SessionHandler class的信息。

最后,如果您愿意接受建议,我也会考虑使用Redis 而不是 Memcache,因为它提供了更多功能,并且可以让您在正确关闭时重新加载数据。

【讨论】:

  • memcached 需要 RAM 还是磁盘。我可以为 memcache 创建一个 GCE 实例。以便将会话写入仅一台服务器。并从中读取。多台服务器
  • Memcache 代表“内存缓存”。它使用 RAM 内存。与 RAM 相比,使用磁盘会非常慢。
  • Memcached 端口正在自动关闭。会有什么问题..?顺便说一句,我为 104GB 内存的内存缓存创建了一台服务器。我的应用程序给出了一些警告.................................................. 无法写入会话数据(内存缓存)。请验证 session.save_path 的当前设置是否正确(XXX.XXX.XXX.XXX:11211?persistent=1&weight=1&timeout=1&retry_interval=15)。
  • 您可以尝试将“tcp://”添加到您的 session.save_path 中,使其看起来像这样:session.save_path = "tcp://127.0.0.1:11211"。确保您的会话大小不超过 1MB。这是默认的内存缓存对象大小。
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 2013-04-21
  • 2012-07-29
  • 2015-12-23
  • 2016-01-31
  • 2014-07-11
  • 1970-01-01
相关资源
最近更新 更多