如何为现有单机版Solr新增节点实现双硬盘存储
单机Solr新增第二块硬盘扩容分步操作指南
你当前运行的是单机Standalone模式Solr,不需要部署多节点、不需要切换SolrCloud模式,直接通过磁盘挂载+目录配置即可实现双硬盘存储协同,完全不用照搬Cloud模式新增节点的复杂流程
前置操作:新硬盘初始化挂载(所有方案通用)
所有扩容操作前先完成新硬盘的系统级挂载,保证系统能正常识别读写新硬盘:
- 新硬盘物理接入服务器后,执行
lsblk确认系统识别到新块设备(通常命名为/dev/sdb、/dev/vdb这类无分区标识的设备) - 对新硬盘执行分区操作:运行
fdisk /dev/sdb(替换为你实际识别到的新设备名),按交互提示输入n新建主分区、输入w保存分区表 - 格式化新分区:执行
mkfs.ext4 /dev/sdb1(如果现有系统用xfs文件系统就替换为mkfs.xfs /dev/sdb1,和原有系统文件系统保持一致即可) - 创建新硬盘的挂载目录:执行
mkdir /data/solr2 - 临时挂载分区:
mount /dev/sdb1 /data/solr2 - 配置开机自动挂载:执行
blkid /dev/sdb1查询新分区的UUID,编辑/etc/fstab文件新增一行配置:UUID=你查询到的实际UUID /data/solr2 ext4 defaults 0 0,保存后执行mount -a,无报错即为配置正确 - 给Solr运行用户赋目录权限:如果你用solr用户启动服务,执行
chown -R solr:solr /data/solr2,确保Solr对新目录有完整读写权限
方案1:新核心直接创建到新硬盘(最稳定,优先推荐)
原有硬盘上的存量索引完全不动,后续新建的Core/Collection全部放到新硬盘,两块硬盘分别存储不同索引,无改配置风险:
- 打开Solr管理后台(默认地址为http://服务器IP:8983/solr)
- 进入Core Admin菜单,点击Add Core按钮
- 填写Core基础信息时,直接将instanceDir、dataDir参数指定为新硬盘上的路径,比如
/data/solr2/your_new_core_name - 其余配置(configSet、schema规则)和你原有核心的创建规则保持一致,点击确认即可完成创建
- 后续所有新增核心都按这个方式指定新硬盘路径即可,老核心继续在原硬盘运行,互不干扰
如果通过命令行API创建核心,直接在请求里指定dataDir参数即可,示例:
curl "http://localhost:8983/solr/admin/cores?action=CREATE&name=new_core1&instanceDir=/data/solr2/new_core1&dataDir=/data/solr2/new_core1/data&configSet=你实际使用的配置集名称"
方案2:迁移部分存量大核心到新硬盘(紧急腾空间场景用)
如果原有硬盘剩余空间已经不足,需要把现有体积较大的老索引迁移到新硬盘释放空间,按以下步骤操作:
- 先停止Solr服务:进入Solr安装目录的bin文件夹,执行
./solr stop - 找到需要迁移的核心的原存储路径(默认路径一般是/var/solr/data/你的核心名),将整个核心目录完整拷贝到新硬盘:
cp -a /var/solr/data/big_size_core /data/solr2/ - 校验拷贝完整性:对比原目录和新目录的文件数量、总大小,确认无文件缺失、损坏
- 备份原核心目录:执行
mv /var/solr/data/big_size_core /var/solr/data/big_size_core_bak,等后续验证服务正常后再删除备份 - 关联新路径的核心,两种方式二选一即可:
- 软链接方式(无需修改Solr配置):执行
ln -s /data/solr2/big_size_core /var/solr/data/big_size_core - 配置文件方式:编辑Solr根目录下的
solr.xml,找到对应核心的配置项,把instanceDir、dataDir的值修改为新硬盘上的核心路径
- 软链接方式(无需修改Solr配置):执行
- 启动Solr服务:执行
./solr start - 进入Solr后台验证核心状态正常、索引查询写入无异常,确认功能正常后删除之前的老备份目录,释放原硬盘空间
方案3:配置全局多核心根目录(适合频繁新建核心的场景)
如果不想每次新建核心手动指定路径,可以配置Solr同时识别两块硬盘上的核心存储目录,新建核心时可灵活选择存储位置:
- 停止Solr服务
- 编辑Solr根目录下的
solr.xml文件,找到<cores>配置段,在原有核心根目录配置下新增一行新硬盘的根目录配置:<cores defaultCoreName="你原来的默认核心名" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}" zkClientTimeout="${zkClientTimeout:15000}"> <coreRootDirectory>/var/solr/data</coreRootDirectory> <!-- 新增下面这行新硬盘的核心根目录 --> <coreRootDirectory>/data/solr2</coreRootDirectory> </cores> - 保存配置后启动Solr,服务会自动扫描两个根目录下的所有核心,新建核心时可自由选择存储到哪个硬盘的目录下
注意:不要尝试把单个核心的索引文件拆分存储到两块硬盘,会直接导致索引损坏。以上所有方案均以核心为单位拆分存储到不同硬盘,稳定性远高于强行切换SolrCloud模式部署多节点,完全满足双硬盘协同运行的需求。
内容的提问来源于stack exchange,提问作者Youcef B
相关产品推荐
相关产品推荐

