我有三个单域服务器
我使用nginx作为负载均衡器。
我想在这些服务器上共享php会话。
我的应用程序严重依赖会话。在文件中存储会话是个坏主意。我正在使用memcached。
我应该如何准确有效地配置memcached来快速读取和写入会话以及在服务器之间共享。
或任何其他好的替代建议。
答案 0 :(得分:3)
当我读到你的问题时,看起来就像你在每台服务器上安装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的工作原理。请注意,您可以使用 memcache 或 memcached 扩展程序。它们不一样。
以下是两个扩展程序的文档:
如果您想了解有关正确的内存缓存的更多详细信息,我建议您检查一下: https://serverfault.com/questions/63383/memcache-vs-memcached
请注意,在Memcache中存储会话可能会有问题。如果Memcache被停止(无论出于何种原因),您将丢失其中的所有数据。您可能需要考虑将会话存储在数据库中,并将它们放在Memcache中以加快该过程。
您可以构建自定义会话处理程序来确保它符合您的需求。您可以阅读有关The SessionHandler class的更多信息。
最后,如果您愿意接受建议,我也会考虑使用Redis而不是Memcache,因为它提供了更多功能,并且可以在正确关闭时重新加载数据。