在站点间划分 memcached?

在站点间划分 memcached?

如果我最终在一台服务器上拥有 4 或 5 个中型网站,我希望确保每个需要 memcached 的网站至少分配有空间。有没有简单的方法可以做到这一点?我能想到的唯一方法是为每个网站在不同的端口上设置单独的进程。有没有更简单/其他的方法?我只是不想让一个网站占用 memcached 的所有内存。

我有大量内存,我想为我的一个 magento 网站分配 512mb 内存用于 memcached。我还想为另一个自定义应用程序分配 512mb 内存用于 memcached。有什么好主意吗?

答案1

Memcached 没有命名空间、分区或类似概念。因此,唯一的方法是运行多个 memcached 实例。不过这没有问题,因为 memcached 的设置非常简单(故意的)。

例如,它可以绑定到 5 个不同的端口(一个用于到达站点)或 5 个不同的 IP 地址。

请参阅此处的示例: http://blog.nevalon.de/en/wie-kann-ich-mehrere-instanzen-von-memcached-auf-einem-server-laufen-lassenhow-can-i-run-multiple-instances-of-memcached-on-one-server-20090729

答案2

我同意 Niall 的观点。另一种可能性是,您可以使用私有 IP 空间。假设您的服务器可以分配 4 个 IP,从 10.xx1 到 4。您可以启动带有 4 个服务器的 Memcached 并绑定到每个 IP,从而为所有站点提供相同的端口,但不同的 memcache IP。

除此之外,您还可以修改 memcached 的 init 脚本,以便一次性启动并停止所有 4 个服务器。这可以与 IP 或端口绑定方法一起使用。它将大大简化您的工作。

以下是一次使用多个服务器的示例多个Memcached服务器的/etc/init.d启动脚本有效吗?(参见问题脚本来源)。

memcached 需要单独进程是有原因的,这更多地与内存管理有关,而不是 memcached 本身。单独进程共享内存似乎不是一个好主意。内存管理最好留给系统。

答案3

这完全没有必要。如果你认为 memcache 存储实际上是最小可用单元stack,那么很明显,将一部分内存分配给使用较少的站点并不是最优的,因为应该使用更多 memcached 的站点将拥有较小的内存部分,并且它的记录将比需要的更频繁地被推出,而接收流量较少的站点将有更多较少的未使用数据存储在专用部分,而这些内存本可以更好地用于更活跃的站点,这些站点不需要使用 memcached 记录,而是需要在某些 SQL 后端获取数据。

答案4

无论如何,Memcache 极不可能为 Magento 商店消耗超过 32MB 的 RAM。考虑到每个缓存页面大约为 4Kb,缓存内容的范围就相当大了。

我建议使用 unix 套接字设置多个 Memcached 实例(它比 TCP/IP 更快、更安全)。您可以使用以下标志启动 Memcached

-d
-m 32
-u myuser
-s /home/myuser/cache.sock
-a 0700    

http://www.sonassihosting.com/blog/support/implement-memcache-for-sonassi-magento-optimised-dedicated-servers/

你的 memcache local.xml 配置看起来应该是这样的,阅读一下可以了解为什么 slow_backend 是必要的 -http://www.sonassi.com/knowledge-base/magento-kb/what-is-memcache-actually-caching-in-magento/

<cache>
 <slow_backend>database</slow_backend>
 <fast_backend>Memcached</fast_backend>
 <fast_backend_options>
 <servers>
 <server>
 <host>unix:///home/myuser/cache.sock</host>
<port>0</port>
<persistent>0</persistent>
 </server>
 </servers>
 </fast_backend_options>
 <backend>memcached</backend>
 <memcached>
 <servers>
 <server>
 <host>unix:///home/myuser/cache.sock</host>
<port>0</port>
<persistent>0</persistent>
 </server>
 </servers>
 <compression><!--[CDATA[0]]></compression-->
 <cache_dir><!--[CDATA[]]></cache_dir-->
 <hashed_directory_level><!--[CDATA[]]></hashed_directory_level-->
 <hashed_directory_umask><!--[CDATA[]]></hashed_directory_umask-->
 <file_name_prefix><!--[CDATA[]]></file_name_prefix-->
 </file_name_prefix></hashed_directory_umask></hashed_directory_level></cache_dir></compression></memcached>
</cache>

相关内容