【实战完整版】Solr8 单机(单Core)迁移至 SolrCloud 三节点集群(零宕机、无NFS、JSON导入方案)
一、前言
很多企业初期使用Solr 单机单Core 部署,业务量上涨后需要平滑迁移至 SolrCloud 集群高可用架构。
网上大部分教程都是 快照备份+NFS共享恢复,部署复杂、依赖共享存储、容易报错。
本文提供生产最稳、零依赖、零风险迁移方案:
单机JSON全量导出 + Cloud单副本导入 + 集群自动扩容双副本
✅ 不需要 NFS 共享存储
✅ 不需要停机重建索引
✅ 不依赖 Solr 快照 restore(cloud不兼容单机快照)
✅ 配置、分词、DIH 全部完整迁移
✅ 三节点集群最终高可用(分片+多副本)
二、环境信息(模拟生产)
2.1 源环境(旧单机)
-
Solr版本:Solr 8.0.0
-
部署模式:单机单Core
-
IP:192.168.1.100
-
端口:8983
-
包含:自定义Schema、SmartCN中文分词、DIH数据导入配置
2.2 目标环境(新SolrCloud三节点集群)
-
集群节点1:192.168.1.10:8983
-
集群节点2:192.168.1.11:8983
-
集群节点3:192.168.1.12:8983
-
集群模式:SolrCloud + ZK集群
-
架构:单分片、多副本高可用
2.3 迁移方案选型说明(重点)
❌ 废弃方案:快照BACKUP/RESTORE
单机快照无法直接在Cloud恢复,Cloud Restore强制依赖NFS共享存储,企业大部分环境无NFS,坑极多。
✅ 最终采用:JSON逻辑导出导入方案
不依赖底层索引文件,只迁移业务数据+配置文件,兼容性最强、最稳、零报错。
三、迁移整体流程(标准生产顺序)
源端导出配置 → 源端导出全量数据JSON → 集群上传配置到ZK → 集群部署依赖Jar → 集群创建单副本Collection → 导入数据 → 校验数据一致 → 扩容多副本高可用
核心原则:先单副本导数据,数据无误后再扩容副本!!
禁止先扩容再导数据,极易引发数据同步错乱、副本Recovery卡死。
四、源机器操作 192.168.1.100(单机)
4.1 导出Core完整配置(schema+solrconfig)
进入单机core目录,打包conf配置目录:
bash
cd /opt/solr-8.0.0/server/solr/你的core名
zip -r conf.zip conf
将 conf.zip 上传到任意一台Cloud节点(示例上传到10节点)。
4.2 导出全量业务数据为JSON
导出当前索引所有文档,作为迁移数据源:
bash
curl "http://127.0.0.1:8983/solr/你的core名/select?q=*:*&wt=json&rows=1000000" -o all_data.json
rows设超大值,一次性导出全量数据。
将 all_data.json 上传到Cloud集群节点。
建议:导出期间暂停业务写入,保证数据一致性
五、目标集群前置准备(10/11/12 三台全部操作)
5.1 关键坑点说明(90%人踩坑)
ZK只同步xml配置,不同步Jar包!!
分词Jar、DIH插件Jar必须三台节点本地全部部署、路径完全一致,否则新副本启动直接闪退、不报错、找不到core。
5.2 三台节点统一部署依赖Jar
必须存在的文件(Solr8必备):
-
中文分词:lucene-analyzers-smartcn-8.0.0.jar
-
DIH数据导入:solr-dataimporthandler-8.0.0.jar、extras包
路径统一:
bash
/opt/solr-8.0.0/contrib/analysis-extras/lucene-libs/
/opt/solr-8.0.0/contrib/dataimporthandler/lib/
三台机器文件、权限、路径完全一致。
六、Cloud集群配置导入(10节点操作)
6.1 解压配置包
bash
mkdir -p /tmp/solr_migrate
unzip conf.zip -d /tmp/solr_migrate/
6.2 上传配置集到Zookeeper
bash
sh /opt/solr-8.0.0/server/scripts/cloud-scripts/zkcli.sh \
-zkhost 192.168.1.10:2181/solr \
-cmd upconfig \
-confdir /tmp/solr_migrate/conf \
-confname 你的core名
此时配置已经全局同步到整个集群。
七、创建集群Collection(严格单副本初始化)
生产铁律:数据导入必须在单副本状态执行!
双副本导入极易引发索引同步错乱、脏数据、recovery卡死。
bash
curl "http://192.168.1.10:8983/solr/admin/collections?action=CREATE&name=你的core名&numShards=1&replicationFactor=1&maxShardsPerNode=1&collection.configName=你的core名&wt=json"
7.1 查看集群状态
bash
curl "http://192.168.1.10:8983/solr/admin/collections?action=CLUSTERSTATUS&collection=你的core名&wt=json"
确认:只有1个副本、state=active
八、JSON全量数据导入(单副本导入)
bash
curl -XPOST -H "Content-Type:application/json" \
"http://192.168.1.10:8983/solr/你的core名/update?commit=true&waitSearcher=true" \
-d @/tmp/all_data.json
8.1 数据校验(核心步骤)
对比源端与目标端文档总数,必须完全一致
bash
#源机器查询
curl "http://127.0.0.1:8983/solr/你的core名/select?q=*:*&rows=0&wt=json"
#集群查询
curl "http://192.168.1.10:8983/solr/你的core名/select?q=*:*&rows=0&wt=json"
九、集群扩容多副本(实现三节点高可用)
数据100%一致后,开始扩容副本,实现集群高可用。
依次添加副本到 11、12 节点(根据集群节点自由分配)
9.1 添加副本至11节点
bash
curl "http://192.168.1.10:8983/solr/admin/collections?action=ADDREPLICA&collection=你的core名&shard=shard1&node=192.168.1.11:8983_solr&wt=json"
9.2 添加副本至12节点
bash
curl "http://192.168.1.10:8983/solr/admin/collections?action=ADDREPLICA&collection=你的core名&shard=shard1&node=192.168.1.12:8983_solr&wt=json"
9.3 等待副本自动同步完成
SolrCloud 新副本会自动从Leader同步全量索引,无需手动同步。
循环查看状态,直到所有副本 active:
bash
curl "http://192.168.1.10:8983/solr/admin/collections?action=CLUSTERSTATUS&collection=你的core名&wt=json"
9.4 最终校验
三台节点分别查询,numFound 全部一致:
-
192.168.1.10
-
192.168.1.11
-
192.168.1.12
十、生产关键避坑总结(必看)
10.1 99%人踩的致命坑
ZK只同步配置文本,不同步Jar包,分词、DIH Jar必须三台节点本地部署,路径一致,否则副本启动秒退、无日志报错、WebUI看不到Core。
10.2 迁移顺序绝对不能乱
单副本导入数据 → 校验一致 → 扩容多副本
顺序颠倒必出脏数据、同步失败、索引损坏。
10.3 禁止使用Solr8的 *😗 删数据
Solr8 按查询删除存在段合并BUG,数据标记删除但不清零,永久残留脏数据。
清空数据优先使用:删除Collection重建。
10.4 WebUI显示误区
WebUI Core下拉框只显示本机节点Core ,判断集群状态以 CLUSTERSTATUS 接口为准,不要以页面显示为准。
10.5 放弃快照恢复的原因
单机快照无法被Cloud识别,Cloud Restore强制依赖NFS共享存储,企业无共享存储环境100%不可用,JSON导入是通用最优解。
十一、迁移完成最终架构
-
✅ 三节点 SolrCloud 高可用集群
-
✅ 多副本容错,单节点挂掉不影响业务
-
✅ 分词、DIH、Schema 配置100%迁移一致
-
✅ 业务数据零丢失、零错乱
-
✅ 无需NFS、无需停机、无需重构索引
十二、总结
Solr 单机迁移 Cloud,不要迷信官方快照恢复,绝大多数生产环境无NFS无法使用。
JSON逻辑导出导入 + 单副本导入 + 后扩容副本 是目前最稳、最简单、零依赖、适合所有企业的通用迁移方案。
只要严格遵守 先导数据、后扩容 的顺序,即可实现100%平稳迁移。