1

我使用 Scalr.net 在 AWS 上设置了一个集群。我正在运行 Magento CE 1.7:

  • 1 Nginx 负载均衡服务器
  • 2 Apache Web 服务器
  • 1 个数据库服务器
  • 1 个 Memcached 服务器

目的是在 memcached 服务器上存储文件缓存和会话缓存。我已经这样设置了magento local.xml:

<session_save><![CDATA[memcache]]></session_save>
<session_save_path><![CDATA[tcp://XX.XX.XX.XX:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>
<session_cache_limiter><![CDATA[]]></session_cache_limiter>
<cache>
        <backend>memcached</backend>
        <slow_backend>database</slow_backend>
        <slow_backend_store_data><![CDATA[]]></slow_backend_store_data>
        <auto_refresh_fast_cache><![CDATA[]]></auto_refresh_fast_cache>
        <lifetime>259200</lifetime>
    <backend_options>
    <servers>
    <server>
        <host><![CDATA[XX.XX.XX.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[1]]></status>
    </server>
    </servers>
        <compression><![CDATA[0]]></compression>
    </backend_options>
</cache> 

但 Memcached 无法正常工作。这是我的统计数据:

root@ec2-XX.XX.XX.XX:~# telnet ip-XX.XX.XX.XX 11211
Trying XX.XX.XX.XX...
Connected to ip-XX.XX.XX.XX.ec2.internal.
Escape character is '^]'.
stats
STAT pid 1086
STAT uptime 79364
STAT time 1352912987
STAT version 1.4.2
STAT pointer_size 64
STAT rusage_user 2.340000
STAT rusage_system 0.000000
STAT curr_connections 5
STAT total_connections 11
STAT connection_structures 6
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT bytes_read 28
STAT bytes_written 2194
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
END

此外,该网站会引发以下错误:

a:4:{i:0;s:29:"cache_dir must be a directory";i:1;s:1097:"#0 /var/www/includes/src/Zend_Cache_Backend_File.php(154): Zend_Cache::throwException('cache_dir must ...')
#1 /var/www/includes/src/Zend_Cache_Backend_File.php(121): Zend_Cache_Backend_File->setCacheDir('')
#2 /var/www/includes/src/__default.php(60504): Zend_Cache_Backend_File->__construct(Array)
#3 /var/www/includes/src/__default.php(60445): Zend_Cache::_makeBackend('File', Array, true, true)
#4 /var/www/includes/src/Mage_Core_Model_Cache.php(124): Zend_Cache::factory('Varien_Cache_Co...', 'File', Array, Array, true, true, true)
#5 /var/www/includes/src/__default.php(23463): Mage_Core_Model_Cache->__construct(Array)
#6 /var/www/app/Mage.php(462): Mage_Core_Model_Config->getModelInstance('core/cache', Array)
#7 /var/www/includes/src/__default.php(20134): Mage::getModel('core/cache', Array)
#8 /var/www/includes/src/__default.php(20028): Mage_Core_Model_App->_initCache(Array)
#9 /var/www/includes/src/__default.php(20070): Mage_Core_Model_App->baseInit(Array)
#10 /var/www/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#11 /var/www/index.php(87): Mage::run('', 'store')
#12 {main}";s:3:"url";s:1:"/";s:11:"script_name";s:10:"/index.php";}

如果我在后端选项中包含以下内容:

        <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>

对你的帮助表示感谢。谢谢。

4

3 回答 3

4

我的 local.xml<memcache>里面有一个部分,<cache>并且<backend>Memcached</backend>大写:

    ...
    <cache>
            <backend>Memcached</backend>
            <slow_backend>database</slow_backend>
            <backend_options>
    ...
            </backend_options>
            <memcached>
                    <servers>
                            <server>
                                    <host><![CDATA[127.0.0.1]]></host>
                                    <port><![CDATA[11211]]></port>
                                    <persistent><![CDATA[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>
            </memcached>
    </cache>
    ...

此外,您需要运行两个 memcache 实例,即使用端口 11211 进行会话,使用端口 11212 进行缓存。我有两个文件:/etc/memcache_1.conf 和 /etc/memcache_2.conf 设置这些不同的实例。这样,当您清除缓存时,它不会注销所有用户!

于 2012-11-15T06:55:54.603 回答
3

我在我的系统中看到了这个问题。一件非常重要且容易错过的事情...如果您使用的是 memcache,则 save_path 必须具有“tcp://”前缀,如果您使用的是 memcached,则 save_path 不应具有“tcp://”前缀。

于 2013-08-22T04:06:26.137 回答
0

我有完全相同的问题,craigtadlock 建议的解决方案效果很好。这是完整的配置:

<session_save><![CDATA[memcached]]></session_save>
<session_save_path><![CDATA[127.0.0.1:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>

请注意 session_save 中的值是“memcached”,而不是 local.xml.additional 中的“memcache”。

于 2014-03-24T04:45:09.093 回答