备份恢复 #

一、备份概述 #

1.1 备份类型 #

类型 说明
Core备份 单个Core备份
Collection备份 SolrCloud Collection备份
配置备份 Schema和配置文件备份

1.2 备份策略 #

  • 定期备份
  • 异地备份
  • 验证备份有效性

二、Core备份 #

2.1 创建备份 #

API方式

bash
curl "http://localhost:8983/solr/mycore/replication?command=backup&location=/backup/path&name=mycore_backup"

命令行方式

bash
bin/solr backup -c mycore -l /backup/path -n mycore_backup

2.2 备份参数 #

参数 说明
location 备份目录
name 备份名称
numberToKeep 保留备份数量
repository 仓库(可选)

2.3 查看备份状态 #

bash
curl "http://localhost:8983/solr/mycore/replication?command=details"

2.4 恢复备份 #

API方式

bash
curl "http://localhost:8983/solr/mycore/replication?command=restore&location=/backup/path&name=mycore_backup"

命令行方式

bash
bin/solr restore -c mycore -l /backup/path -n mycore_backup

2.5 查看恢复状态 #

bash
curl "http://localhost:8983/solr/mycore/replication?command=restorestatus"

三、Collection备份 #

3.1 创建备份 #

API方式

bash
curl "http://localhost:8983/solr/admin/collections?action=BACKUP&name=mycollection_backup&collection=mycollection&location=/backup/path"

命令行方式

bash
bin/solr backup -c mycollection -l /backup/path -n mycollection_backup

3.2 备份参数 #

参数 说明
name 备份名称
collection Collection名称
location 备份目录
commitName 提交名称(可选)
indexDir 索引目录(可选)

3.3 恢复备份 #

API方式

bash
curl "http://localhost:8983/solr/admin/collections?action=RESTORE&name=mycollection_backup&collection=mycollection_restored&location=/backup/path"

命令行方式

bash
bin/solr restore -c mycollection_restored -l /backup/path -n mycollection_backup

3.4 恢复参数 #

参数 说明
name 备份名称
collection 新Collection名称
location 备份目录

四、配置备份 #

4.1 下载配置 #

bash
# 从ZooKeeper下载配置
bin/solr zk downconfig -n myconfig -d /backup/config -z localhost:9983

4.2 备份security.json #

bash
# 下载security.json
bin/solr zk cp zk:security.json file:security.json -z localhost:9983

4.3 备份solr.xml #

bash
# 复制solr.xml
cp server/solr/solr.xml /backup/solr.xml

五、自动备份 #

5.1 使用crontab #

bash
# 编辑crontab
crontab -e

# 每天凌晨备份
0 0 * * * /path/to/backup_solr.sh

5.2 备份脚本 #

bash
#!/bin/bash
# backup_solr.sh

BACKUP_DIR="/backup/solr"
DATE=$(date +%Y%m%d)
COLLECTION="mycollection"

# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE

# 备份Collection
curl "http://localhost:8983/solr/admin/collections?action=BACKUP&name=${COLLECTION}_${DATE}&collection=${COLLECTION}&location=${BACKUP_DIR}/${DATE}"

# 备份配置
bin/solr zk downconfig -n myconfig -d ${BACKUP_DIR}/${DATE}/config -z localhost:9983

# 删除30天前的备份
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;

echo "Backup completed: ${DATE}"

5.3 使用Solr Collection API调度 #

xml
<requestHandler name="/backup" class="solr.BackupHandler">
  <lst name="defaults">
    <str name="location">/backup/solr</str>
    <int name="numberToKeep">7</int>
  </lst>
</requestHandler>

六、跨集群复制 #

6.1 配置CDCR #

solrconfig.xml

xml
<requestHandler name="/cdcr" class="solr.CdcrRequestHandler">
  <lst name="buffer">
    <str name="defaultState">disabled</str>
  </lst>
  <lst name="replica">
    <str name="zkHost">target-zk:2181</str>
    <str name="collection">target_collection</str>
  </lst>
</requestHandler>

<updateRequestProcessorChain name="cdcr">
  <processor class="solr.CdcrUpdateProcessorFactory"/>
  <processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>

6.2 启动CDCR #

bash
# 启动CDCR
curl "http://localhost:8983/solr/source_collection/cdcr?action=START"

6.3 监控CDCR #

bash
# 查看CDCR状态
curl "http://localhost:8983/solr/source_collection/cdcr?action=COLLECTIONSTATUS"

七、备份验证 #

7.1 验证备份完整性 #

bash
# 检查备份目录
ls -la /backup/solr/mycollection_backup/

# 检查备份文件
ls -la /backup/solr/mycollection_backup/snapshot.*/

7.2 测试恢复 #

bash
# 恢复到测试Collection
curl "http://localhost:8983/solr/admin/collections?action=RESTORE&name=mycollection_backup&collection=test_collection&location=/backup/solr"

# 验证数据
curl "http://localhost:8983/solr/test_collection/select?q=*:*&rows=0"

八、灾难恢复 #

8.1 恢复流程 #

  1. 停止Solr服务
  2. 清空数据目录
  3. 恢复备份
  4. 启动Solr服务
  5. 验证数据

8.2 恢复脚本 #

bash
#!/bin/bash
# restore_solr.sh

BACKUP_NAME=$1
COLLECTION=$2
BACKUP_DIR="/backup/solr"

if [ -z "$BACKUP_NAME" ] || [ -z "$COLLECTION" ]; then
  echo "Usage: $0 <backup_name> <collection>"
  exit 1
fi

echo "Restoring $COLLECTION from $BACKUP_NAME..."

# 停止Solr
bin/solr stop -all

# 恢复备份
curl "http://localhost:8983/solr/admin/collections?action=RESTORE&name=${BACKUP_NAME}&collection=${COLLECTION}&location=${BACKUP_DIR}"

# 启动Solr
bin/solr start -c -p 8983

echo "Restore completed."

九、备份监控 #

9.1 监控备份状态 #

bash
# 检查备份文件大小
du -sh /backup/solr/*

# 检查备份时间
ls -la /backup/solr/

9.2 监控脚本 #

bash
#!/bin/bash
# check_backup.sh

BACKUP_DIR="/backup/solr"
MAX_AGE=7

# 检查备份是否存在
if [ ! -d "$BACKUP_DIR" ]; then
  echo "ERROR: Backup directory not found"
  exit 1
fi

# 检查最新备份
LATEST=$(ls -t $BACKUP_DIR | head -1)
BACKUP_DATE=$(date -d "$(echo $LATEST | cut -d_ -f2)" +%s)
CURRENT_DATE=$(date +%s)
AGE=$(( ($CURRENT_DATE - $BACKUP_DATE) / 86400 ))

if [ $AGE -gt $MAX_AGE ]; then
  echo "WARNING: Backup is $AGE days old"
  exit 1
fi

echo "Backup OK: $LATEST"

十、总结 #

备份恢复要点:

操作 命令
Core备份 bin/solr backup -c core -l path -n name
Core恢复 bin/solr restore -c core -l path -n name
Collection备份 curl …/BACKUP
Collection恢复 curl …/RESTORE
配置备份 bin/solr zk downconfig

最佳实践:

  • 定期自动备份
  • 验证备份有效性
  • 异地备份
  • 制定灾难恢复计划

下一步,让我们学习监控告警!

最后更新:2026-03-27