Magento的一些产品突然消失了

时间:2017-01-31 18:56:26

标签: php magento caching redis

我们有Magento EE 1.14.0.1。最近我们搬到了新的AWS EC2服务器和ElasticCache Redis服务器。然后一些随机产品开始在前端消失。它们存在于后端并正确配置(可见,启用,库存等)。只有在将产品保存在后端之后,即使没有刷新任何缓存,它也会在前端再次出现。

  • 此问题是否与Redis缓存有关?

  • 以及如何修复它?

任何意见都可以指导我找到解决方案。

由于

更新:我将“索引管理”下的所有内容标记为“保存时更新”。所以我将其恢复到如期更新。我认为这解决了这个问题。但我仍想让我的商店库存保持最新状态。

2 个答案:

答案 0 :(得分:1)

“这是一个索引问题,每次从数据库更新数据(产品,库存)时,都必须手动重新索引Magento。”

社区版而非企业版也是如此。此外,迁移到AWS时可能会出现一些额外问题。在迁移到AWS的继承服务器上进行了4个月的故障排除后,我发现了许多问题/解决方案。

EE问题 Enterprise Edition索引对于许多索引都是异步的。此外,并非所有EE索引都在典型位置配置。 在“管理”菜单上,选择“系统”>组态。在左侧面板的“高级”下,选择“索引管理”。 http://docs.magento.com/m1/ee/user_guide/system-operations/index-configuration.html

根据我的经验,即使设置为“保存时更新”,它也经常在保存时不会更新。

AsyncIndexing在1.14.3.x之前的版本中不稳定。升级!部分过程可能以这样的方式中断,使索引无法继续进行。这种情况的一种方式是,如果您正在为网站运行PHP [通常通过PHPFPM]使用不同的用户ID和组,那么您运行cronjobs [shell access]。索引取决于创建一个“锁定”进程的文件 - 该文件只能由创建它的用户写入/删除。

我发现出于性能原因,最好将所有索引设置为“手动更新”。不要安排定期重新索引所有进程,由于异步索引,它是无用的。只要确保你的cron正在运行,一切都应该没问题。

AsyncIndex进程使用MySQL触发器...在尝试将magento数据库从一个服务器迁移到另一个服务器时会出现问题。最初创建它们的方式,它们只能由数据库用户在首次创建触发器时使用。如果更改新服务器的数据库用户,则不会迁移触发器。更糟糕的是,几乎没有迹象表明这种情况发生了,除索引之外的所有事情都完美无缺,所以你怎么知道呢?

最后,“全部重新索引”并不总是重新索引所有内容。感谢互联网上的各种帖子,我创建了一个shell脚本,让Magento认为所有产品都已更新,索引需要重建: https://gist.github.com/gamort/5dc5e16bdec00a8bb3b922fc463af17c

AWS问题 使用AWS Elasticache Redis有一个隐藏的问题 - 它启动的默认区域可能与您的服务器区域不同。在我的情况下,服务器在USEAST-1a,而Redis默认为USEAST-1b。从缓存中查找数据时,这会导致偶尔超时。虽然网站代码通常可以恢复,但索引代码却没有。这导致索引cron进程处于中断状态。

几乎同样重要的是,对于从1a区到1b区的数据传输,您将每GB支付一笔微不足道的金额。但是当你的缓存工作时,这个“微不足道”的金额可能相当多!我们经常需要10美元以上/天[每月500美元到600美元]的内部区域数据传输费!在您的实际区域中启动一个新的redis服务器,使用您的Web服务器上的redis cli确保您可以连接[我们有防火墙配置问题],然后只更新您的配置。

AWS RDS服务器也有一个隐藏的陷阱[希望你不要太淹没了]。将数据库从另一个服务器迁移到Amazon RDS存在一个问题,即MySQL认为特定函数的有效SQL有一个极小的变化...... Magento EE正好碰巧使用它。 :-)。我最终安装了Magento EE的新副本并使用Navicat来同步数据库结构。

Solr问题 可以说,还有Solr问题。主要是由于模式,但我也发现擦除solr数据库并让它重新索引有帮助。

Magento重写/表单问题 当您升级到1.14.3时会发生此问题 - 当然您应该这样做,因为它修复了这么多索引问题。版本1.14.3.x将表单键添加到多种表单中,包括客户注册表单。因此,如果您为登录创建了自己的自定义phtml模板,它们将无法正常工作!您需要将该表单键字段添加到自定义中。不过没什么大不了的,因为你记录了从最初开始复制它的模板文件吗?

总而言之,我估计通过移民检查清单可以在20小时内完成,最多可能达到80小时,具体取决于您遇到的问题。并且在一天结束时,由于修复主要是在cron工作中,这些工作不容易看到,网站所有者将很难说出他们如何从所有工作中受益。就我而言,在我们继承该网站之前,消失的产品已经存在了一年多的问题,客户对此有所了解。

答案 1 :(得分:0)

这是一个索引问题,每次从数据库更新数据(产品,库存)时,都必须手动重新索引Magento。如果你不这样做,你的索引数据就会损坏,你会在产品请求列表上丢失SQL连接。