2011-06-06 46 views
4

目前我试图建立了Magento的生产环境具有以下设置:Magento的Memcached的会话

2个Web服务器,1个DB服务器,负载平衡器。

因此,负载平衡器将分配Web服务器之间的流量,但不会使用粘滞会话。

要解决服务器之间共享会话的问题,我选择了使用Memcached。我在每台Web服务器上运行一台Memcached服务器,然后在每台Web服务器的local.xml中指定memcached服务器的列表。

缓存正在工作,因为我绝对注意到速度的增加,再加上我可以看到会话正在跨Web服务器共享。问题在于缓存工作得太好了。页面的动态部分(例如购物车和消息)正在为每个页面完全缓存。

我注意到,您调用的将购物车放在页面上的getChildHtml()具有一个名为useCache的可选参数,我明确地在false中传递了这个参数,但这没有任何作用。这里是我的local.xml中的定义,以防万一我做错了什么在那里(敏感信息被忽略了):

<config> 
<global> 
    <install> 
     <date></date> 
    </install> 
    <crypt> 
     <key></key> 
    </crypt> 
    <disable_local_modules>false</disable_local_modules> 
    <resources> 
     <db> 
      <table_prefix></table_prefix> 
     </db> 
     <default_setup> 
      <connection> 
      </connection> 
     </default_setup> 
    </resources> 
    <session_save><![CDATA[memcache]]></session_save> <!-- db/memcache/empty=files --> 
    <session_save_path><![CDATA[tcp://X.X.X.X:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path><!-- e.g. for memcache session save handler tcp://10.0.0.1:11211?persistent=1&weight=2&timeout=10&retry_interval=10 --> 
    <session_cache_limiter><![CDATA[private]]></session_cache_limiter><!-- see http://php.net/manual/en/function.session-cache-limiter.php#82174 for possible values --> 
    <cache> 
     <backend>memcached</backend><!-- apc/memcached/xcache/empty=file --> 
     <slow_backend>database</slow_backend> <!-- database/file (default) - used for 2 levels cache setup, necessary for all shared memory storages --> 
     <slow_backend_store_data></slow_backend_store_data> <!-- 1/0 (default) - used for 2 levels cache setup, sets whether store data in db slow cache backend --> 
     <auto_refresh_fast_cache>1</auto_refresh_fast_cache> <!-- 1/0 (default) - used for 2 levels cache setup, sets whether refresh data in fast cache backend --> 
     <memcached><!-- memcached cache backend related config --> 
      <servers><!-- any number of server nodes can be included --> 
       <server> 
        <host><![CDATA[X.X.X.X]]></host> 
        <port><![CDATA[11211]]></port> 
        <persistent><![CDATA[1]]></persistent> 
       </server> 
       <server> 
        <host><![CDATA[X.X.X.X]]></host> 
        <port><![CDATA[11211]]></port> 
        <persistent><![CDATA[1]]></persistent> 
       </server> 
      </servers> 
     </memcached> 
    </cache> 
</global> 
<admin> 
    <routers> 
     <adminhtml> 
      <args> 
       <frontName><![CDATA[admin]]></frontName> 
      </args> 
     </adminhtml> 
    </routers> 
</admin> 

我也注意到其他奇怪的行为,喜欢能清除管理面板上缓存管理屏幕上的缓存。在Magento中使用memcached时这是正常的,我该如何解决整个页面被缓存的问题?

+0

哪个Magento的版本? – B00MER 2011-06-06 18:18:41

+0

最新的稳定版本是1.5.1.0。 – Dino 2011-06-06 18:36:45

回答

4

对于任何仍然有类似问题的人,我设法解决我的问题。我在这里遇到的主要问题是,我在每个Web节点上使用了不同的memcached服务器,这是不正确的,因为它使用会话作为查找缓存数据的关键。此外,您需要确保您将服务器标记中的持久元素设置为0而不是1.使用这些设置,网站现在工作正常。

1
tcp://X.X.X.X:11211?persistent=0 

是这样的?

还是更喜欢的是:

<server> 
    <host><![CDATA[xx.xx.x.xx]]></host> 
    <port><![CDATA[11211]]></port> 
    <persistent><![CDATA[0]]></persistent> 
    <weight><![CDATA[2]]></weight> 
    <timeout><![CDATA[10]]></timeout> 
    <retry_interval><![CDATA[10]]></retry_interval> 
    <status><![CDATA[]]></status> 
</server> 
+1

我在这里看到一个答案,但它并不是很明显。考虑修改?它看起来更像是一个澄清的要求。 – 2011-08-30 05:48:19

+0

这是关于将持久性设置为0. 实际上有两种方法。 – Barry 2011-10-18 08:56:53