OpenSearch维护结束,indexer:status里catalogsearch_fulltext仍是Processing,后台也无法重新索引。可以reset,但reset只改Magento的状态标记,不会修复OpenSearch磁盘满、别名异常或仍在运行的旧进程。

reset之前先回答两个问题

bin/magento indexer:status
ps -ef | grep '[b]in/magento indexer'
mysql -e "SELECT * FROM indexer_state WHERE indexer_id='catalogsearch_fulltext'\G"

如果确有reindex进程仍在工作,不要并发启动第二个。确认没有活动进程,并检查cron与Supervisor不会立即再拉起后,才执行:

bin/magento indexer:reset catalogsearch_fulltext
bin/magento indexer:reindex catalogsearch_fulltext

重建又卡住就查OpenSearch

curl -s http://127.0.0.1:9200/_cluster/health?pretty
curl -s http://127.0.0.1:9200/_cat/indices?v
curl -s http://127.0.0.1:9200/_cat/aliases?v
curl -s http://127.0.0.1:9200/_cluster/allocation/explain?pretty

集群yellow在单节点上可能只是副本未分配;red、只读索引、磁盘watermark或无主分片则必须先解决。查看var/log/exception.log中的第一条OpenSearch异常,不要只看最后的reindex failed。

磁盘水位触发只读

先释放磁盘并把使用率降到安全范围,再按OpenSearch当前版本文档解除受影响索引的read_only_allow_delete。不要在磁盘仍满时反复解锁,几分钟后还会重新锁上。

完成标准

  • indexer:status为Ready;
  • 索引别名指向本次新建索引;
  • 随机抽查可见、不可见和多Store商品;
  • 增量更新一个商品后搜索结果能变化;
  • 下一轮cron没有把状态再次留在working。

生产数据大时,先在低峰期预估全量重建耗时,并确认旧索引清理策略,避免每次重建都留下大索引把磁盘重新占满。