备份恢复 #
一、备份概述 #
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 恢复流程 #
- 停止Solr服务
- 清空数据目录
- 恢复备份
- 启动Solr服务
- 验证数据
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