多个Magentonetworking服务器,单实例memcache问题

我有两个Magento实例的Web服务器。 每个共享httpd.conf,php.ini和my.cnf,以及local.xml和config.xml magentoconfiguration文件。

我有另一台存储共享数据库和共享Memcache实例的服务器。 这两个Magentonetworking服务器都能够成功击中数据库实例,但只有一个Magento实例可以正常使用memcache。

当我向w / memcache工作的magento实例发出请求时,出现以下错误:

There has been an error processing your request Warning: session_start() [function.session-start]: open(tcp://INTERNAL_IP_OF_MEMCACHE_SERVER:11211?persistent=1&weight=2&timeout=10&retry_interval=10/sess_9bmgdui99pr39fagpnoa53prl5, O_RDWR) failed: No such file or directory (2) in /var/www/html/production-host/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php on line 113 Trace: #0 [internal function]: mageCoreErrorHandler(2, 'session_start()...', '/var/www/html/p...', 113, Array) #1 /var/www/html/production-host/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php(113): session_start() #2 /var/www/html/production-host/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php(153): Mage_Core_Model_Session_Abstract_Varien->start('frontend') #3 /var/www/html/production-host/app/code/core/Mage/Core/Model/Session/Abstract.php(84): Mage_Core_Model_Session_Abstract_Varien->init('core', 'frontend') #4 /var/www/html/production-host/app/code/core/Mage/Core/Model/Session.php(39): Mage_Core_Model_Session_Abstract->init('core', 'frontend') #5 /var/www/html/production-host/app/code/core/Mage/Core/Model/Config.php(1206): Mage_Core_Model_Session->__construct(Array) #6 /var/www/html/production-host/app/Mage.php(432): Mage_Core_Model_Config->getModelInstance('core/session', Array) #7 /var/www/html/production-host/app/Mage.php(446): Mage::getModel('core/session', Array) #8 /var/www/html/production-host/app/code/core/Mage/Core/Controller/Varien/Action.php(483): Mage::getSingleton('core/session', Array) #9 /var/www/html/production-host/app/code/core/Mage/Core/Controller/Front/Action.php(59): Mage_Core_Controller_Varien_Action->preDispatch() #10 /var/www/html/production-host/app/code/core/Mage/Core/Controller/Varien/Action.php(407): Mage_Core_Controller_Front_Action->preDispatch() #11 /var/www/html/production-host/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index') #12 /var/www/html/production-host/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) #13 /var/www/html/production-host/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch() #14 /var/www/html/production-host/app/Mage.php(596): Mage_Core_Model_App->run(Array) #15 /var/www/html/production-host/index.php(83): Mage::run('', 'store') #16 {main} 

我已经成功地从上面的机器telneted到memcache服务器到端口11211,我可以连接到memcache实例罚款。 我还确保每个系统都有通过php -m安装的正确的扩展名,并区分“php_info”的输出(它们是相同的)。

我意识到session_start()有连接到memcache实例的问题,但我不明白为什么? TIA!

编辑/ UPDATE:

这是Magento企业版本:1.5我相信(现在检查)和local.xml是:

 > <config> <global> > <install> > <date><![CDATA[REDACTED]]></date> > </install> > <crypt> > <key><![CDATA[REDACTED]]></key> > </crypt> > <disable_local_modules>false</disable_local_modules> > <resources> > <db> > <table_prefix></table_prefix> > </db> > <default_setup> > <connection> > <host><![CDATA[REDACTED]]></host> > <username><![CDATA[REDACTED]]></username> > <password><![CDATA[REDACTED]]></password> > <dbname><![CDATA[REDACTED]]></dbname> > <active>1</active> > </connection> > </default_setup> > </resources> > <session_save><![CDATA[memcached]]></session_save> > > <session_save_path><![CDATA[tcp://REDACTED:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path> > <session_cache_limiter></session_cache_limiter> <cache> > <slow_backend>database</slow_backend> > <fast_backend>Memcached</fast_backend> <fast_backend_options> > <servers> > <server> > <host>REDACTED</host> > <port>11211</port> > <persistent>1</persistent> > </server> </servers> </fast_backend_options> > > <backend>memcached</backend> <memcached> <servers> > <server> > <host>REDACTED</host> > <port>11211</port> > <persistent>1</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> </global> <admin> > <routers> > <adminhtml> > <args> > <frontName><![CDATA[REDACTED]]></frontName> > </args> > </adminhtml> > </routers> </admin> </config> 

这些是在调用“session_start”之前的文件中的值:

[x] method = memcached

[x] savepath = tcp://删除:11211?persistent = 1&weight = 2&timeout = 10&retry_interval = 10

更新:

我还创build了一个testing脚本,其中包含:

 $fp = fsockopen('REDACTED', '11211'); if (!$fp) { 

我运行它为apache:

sudo -u apache php test.php

它可以很好地连接。

我build议考虑切换到您的会话存储和caching存储的Redis。 原因:

  • 由于高度依赖caching标记,Memcached不适合用于Magentocaching。 有一个两级后端是不必要的复杂和缓慢,我的Redis后端支持没有TwoLevels的标签。
  • 使用非持久性caching存储意味着如果你不得不重新启动你将有一个冷藏caching。
  • 使用非持久性会话存储意味着如果您不得不重新启动所有用户,则会丢失会话。
  • Redis血腥快速。

Redis可以configuration最大内存限制。 如果需要,可以运行两个实例来独立控制高速caching和会话存储的大小,并且可以将其configuration为在满足时使用LRU进行驱逐。

phpredis扩展支持本地会话存储插件,但是我没有使用Magento进行testing。

你应该从可能的罪魁祸首中排除Magento来开始debugging这个问题。 IE浏览器。 定期PHP memcache会话工作?

尝试一个test.php与:

 <?php ini_set("session.save_handler","memcache"); ini_set("session.save_path","127.0.0.1:11211"); session_start(); print "Session started..\n<br />\n"; ?> 

如果有效,请查看代码(app / code / core / Mage / Core / Model / Session / Abstract / Varien.php)以查看Magento是否可能覆盖save_path。

另外,你是否确定你的会话处理器是memcache d ? 用phpinfo()(在下面的注册会话处理程序)中输出来检查一下。