Manticore Search 3 首次引入了索引兼容性的破坏性变更,无法加载使用 2.x 创建的现有索引。这意味着在升级 searchd 到 3.x 之前,必须准备好索引。
要使索引使用新格式,有两种选择:
- 完全重建索引。如果索引不是很大且不是实时索引,这是最简单的方法。
- 使用转换工具,可以自动将任何类型的索引(普通、percolate、实时)从 Manticore 2 / Sphinx 2 格式转换为新格式。
在开始迁移之前,有几项需要注意:
- 文档 ID 现在是正的有符号大整数,之前是无符号大整数
- 索引使用 kill-lists 的机制发生了重大变化
- 在开始转换实时索引之前,RAM chunk 必须为空。如果包含数据,应使用 FLUSH RAMCHUNK 将其写入磁盘。此操作必须在现有 2.x 上执行,升级之前。
- v3 不再限制每个索引的字符串 / json 属性为 4GB。过去某些情况下,索引必须拆分到多个 chunk 以适应数据。在 v3 中,此类索引可以减少到单个 chunk 或更少的 chunk(如果需要保留多线程搜索)。4GB 限制也适用于 RT 索引。这意味着如果达到 4GB 阈值,OPTIMIZE 无法将 RT chunk 减少到一个。在转换受影响的 RT 索引后,新索引可以应用 OPTIMIZE 以实现单 chunk RT 索引。
Manticore Search 3 提供了一个配套工具,可以将索引从 2.x 格式转换为 3.x 格式。该工具包含在一个名为 manticore-converter 的独立包中。此包不会以任何方式干扰或影响现有的 Manticore 安装,因此可以并行安装。
使用 index_converter 工具,您可以创建 3.x 版本的索引,当所有索引都完成转换后,再开始升级 Manticore 包。
如果您只有一台服务器:
- 安装
manticore-converter包 - 使用
index_converter在不同于现有数据文件夹的文件夹中创建索引的新版本(使用 --output-dir 选项) - 停止现有 Manticore,升级到 3.0,将新索引移动到数据文件夹,启动 Manticore
为了实现最小停机时间,您可以将 2.x 索引、配置(您需要在此处编辑索引、日志和不同端口的路径)和二进制文件复制到单独的位置,并在单独的端口上启动,然后将应用程序指向它。
在升级到 3.0 并启动新守护进程后,可以将应用程序重新指向正常端口。如果一切正常,停止 2.x 副本并删除文件以释放空间。
如果您有一台备用服务器(如测试或预发布服务器),可以先在此处进行索引升级,甚至安装 Manticore 3 进行多项测试,如果一切正常,将新索引文件复制到生产服务器。
如果您有多台服务器可以从生产环境中移除,请逐个进行并升级每台服务器。对于分布式设置,2.x searchd 可以作为主节点与 3.x 节点一起工作,因此可以先升级数据节点,最后升级主节点。
转换工具可以一次迁移一个索引(使用 --index),从给定配置文件迁移所有索引(使用 --all)或从文件夹迁移所有索引(由 --path 定义)。由于转换器会创建现有索引的新版本,因此需要考虑额外的空间需求。如果空间是问题,应逐个转换索引。
如果不使用 kill-lists,使用转换器的最简单方法是直接转换所有内容:
$ index_converter --config /home/myuser/sphinx.conf --all
默认情况下,v3 索引写入同一文件夹,旧索引的文件名会带有 .old。使用 --output-dir 选项也可以将新索引保存在不同文件夹中。
$ index_converter --config /home/myuser/sphinx.conf --index myrtindex --output-dir /new/location
请注意,hitlists 文件 (.spp) 仅简单地移动到新版本(因为它未发生任何变化),并且不包含在旧版本的备份中。一旦完成版本 3 的测试且没有问题,可以删除旧索引版本的备份。
对于增量索引,转换前应在配置中设置新选项 killlist_target。转换器也可以使用 --killlist-target 设置目标:
$ index_converter --config /home/myuser/sphinx.conf --index deltaindex --killlist-target mainindex:kl
第三种方法是转换增量索引,加载它,使用 ALTER KILLLIST_TARGET 设置目标并(重新)加载目标以应用 kill-lists。
如果您有任何问题、疑问或评论,请随时联系我们:
- 在 twitter
- 通过电子邮件发送至 [email protected]
- 在我们的 Forum 发帖
- 在我们的 Community Slack 与我们聊天
- 通过我们的 GitHub 上的 bug 跟踪器