Solr 控制脚本参考指南 控制脚本概述 Apache Solr 提供了一个强大的控制脚本 bin/solr
,它是管理 Solr 实例的主要命令行工具。这个脚本提供了完整的服务器生命周期管理、集合和核心操作、ZooKeeper 管理、认证配置等功能,是 Solr 运维管理的核心工具。
脚本基本语法 1 2 3 4 5 6 7 8 9 bin/solr [command ] [options] bin/solr -h bin/solr --help bin/solr [command ] -h
服务器管理命令 1. 启动服务器(start) 基本启动 1 2 3 4 5 6 7 8 9 10 11 bin/solr start bin/solr start -force bin/solr start -p 8984 bin/solr start -s /path/to/solr/home
SolrCloud 模式启动 1 2 3 4 5 6 7 8 9 10 11 bin/solr start -c -z zk1:2181,zk2:2181,zk3:2181 bin/solr start -c -z zk1:2181,zk2:2181,zk3:2181/solr bin/solr start -c -h solr1.example.com bin/solr start -c -m 2g
高级启动选项 1 2 3 4 5 6 7 8 9 bin/solr start \ -cloud \ -port 8983 \ -host solr1.example.com \ -memory 4g \ -zkhost zk1:2181,zk2:2181,zk3:2181/solr \ -solr.data.home=/var/solr \ -verbose
启动参数详解 :
-c, -cloud
- 以 SolrCloud 模式启动
-p, -port <port>
- 指定端口号
-h, -host <hostname>
- 设置主机名
-m, -memory <size>
- 设置 JVM 堆内存大小
-z, -zkhost <zkhost>
- ZooKeeper 主机列表
-s, -solrhome <dir>
- Solr 主目录
-e, -example <name>
- 启动示例配置
-d, -dir <dir>
- 服务器目录
-verbose
- 详细输出模式
-force
- 强制启动(忽略警告)
2. 停止服务器(stop) 基本停止 1 2 3 4 5 6 7 8 9 10 11 bin/solr stop bin/solr stop -p 8984 bin/solr stop -all bin/solr stop -p 8983 -force
停止参数选项
-p, -port <port>
- 指定要停止的端口
-all
- 停止所有运行的 Solr 实例
-k, -key <key>
- 停止键(用于安全停止)
-force
- 强制停止
3. 重启服务器(restart) 1 2 3 4 5 6 7 8 bin/solr restart bin/solr restart -p 8984 bin/solr restart -c -m 4g -p 8983
4. 状态检查(status) 1 2 3 4 5 6 7 8 bin/solr status bin/solr status -verbose bin/solr status -p 8983
状态信息包括 :
运行状态和进程 ID
内存使用情况
启动时间和运行时长
配置文件路径
ZooKeeper 连接状态
集合和核心管理 1. 创建集合/核心(create) 单机模式创建核心 1 2 3 4 5 6 7 8 bin/solr create -c mycore bin/solr create -c mycore -d basic_configs bin/solr create -c mycore -d /path/to/config -p 8983
SolrCloud 模式创建集合 1 2 3 4 5 6 7 8 9 10 11 12 13 bin/solr create -c mycollection bin/solr create -c mycollection \ -shards 3 \ -replicationFactor 2 bin/solr create -c mycollection \ -d /path/to/configset \ -shards 2 \ -replicationFactor 3
高级创建选项 1 2 3 4 5 6 7 8 9 bin/solr create \ -collection products \ -configset _default \ -shards 4 \ -replicationFactor 2 \ -maxShardsPerNode 2 \ -configName products_config \ -port 8983
创建参数详解 :
-c, -collection <name>
- 集合或核心名称
-d, -confdir <dir>
- 配置目录或配置集名称
-n, -confname <name>
- 配置集名称
-shards <num>
- 分片数量
-replicationFactor <num>
- 副本因子
-maxShardsPerNode <num>
- 每个节点最大分片数
-p, -port <port>
- 目标 Solr 端口
2. 删除集合/核心(delete) 1 2 3 4 5 6 7 8 bin/solr delete -c mycollection bin/solr delete -c mycollection -p 8983 bin/solr delete -c mycollection -deleteConfig true
删除参数选项 :
-c, -collection <name>
- 要删除的集合名称
-deleteConfig <true|false>
- 是否删除配置集
-p, -port <port>
- 目标端口
ZooKeeper 管理命令 1. 配置集管理 上传配置集(upconfig) 1 2 3 4 5 6 7 8 9 10 11 bin/solr zk upconfig \ -confname myconfig \ -confdir /path/to/config \ -zkhost zk1:2181,zk2:2181/solr bin/solr zk upconfig \ -confname newconfig \ -confdir server/solr/configsets/_default/conf \ -zkhost localhost:2181
下载配置集(downconfig) 1 2 3 4 5 bin/solr zk downconfig \ -confname myconfig \ -confdir /path/to/download \ -zkhost zk1:2181/solr
2. ZooKeeper 文件操作 复制文件(cp) 1 2 3 4 5 6 7 8 9 10 bin/solr zk cp file:/path/to/local/file zk:/solr/configs/myconfig/solrconfig.xml \ -zkhost zk1:2181 bin/solr zk cp zk:/solr/configs/myconfig/schema.xml file:/local/path/schema.xml \ -zkhost zk1:2181 bin/solr zk cp zk:/source/path zk:/dest/path -zkhost zk1:2181 -recurse
列出 ZooKeeper 内容(ls) 1 2 3 4 5 6 7 8 bin/solr zk ls / -zkhost zk1:2181 bin/solr zk ls /configs -zkhost zk1:2181 bin/solr zk ls /solr -zkhost zk1:2181 -recurse
删除 ZooKeeper 节点(rm) 1 2 3 4 5 bin/solr zk rm /solr/configs/oldconfig/solrconfig.xml -zkhost zk1:2181 bin/solr zk rm /solr/configs/oldconfig -zkhost zk1:2181 -recurse
3. ZooKeeper 实用操作 移动文件(mv) 1 2 bin/solr zk mv /solr/configs/old_name /solr/configs/new_name -zkhost zk1:2181
创建路径(mkroot) 1 2 bin/solr zk mkroot /solr -zkhost zk1:2181
认证和安全管理 1. 启用认证(auth enable) 基础认证设置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 bin/solr auth enable -type basicAuth \ -credentials admin:admin123 \ -zkhost zk1:2181/solr bin/solr auth enable -type basicAuth \ -credentials admin:password \ -port 8983 bin/solr auth enable -type basicAuth \ -credentials admin:newpassword \ -updateIncludeFileOnly true
Kerberos 认证设置 1 2 3 4 bin/solr auth enable -type kerberos \ -config "/path/to/jaas-client.conf" \ -zkhost zk1:2181/solr
2. 禁用认证(auth disable) 1 2 3 4 5 bin/solr auth disable -zkhost zk1:2181/solr bin/solr auth disable -port 8983
认证参数说明 :
-type <type>
- 认证类型(basicAuth, kerberos)
-credentials <user:pass>
- 用户凭据
-config <file>
- 配置文件路径
-zkhost <host>
- ZooKeeper 主机
-updateIncludeFileOnly
- 仅更新包含文件
数据导入导出 1. 导出数据(export) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 bin/solr export -collection mycollection \ -out /path/to/export.json bin/solr export -collection mycollection \ -query "category:electronics" \ -out electronics.json bin/solr export -collection mycollection \ -fields id ,name,price \ -out products.json bin/solr export -collection mycollection \ -sort "price desc" \ -out sorted_products.json
导出参数选项 :
-collection <name>
- 集合名称
-out <file>
- 输出文件路径
-query <query>
- 查询条件
-fields <fields>
- 导出字段列表
-sort <sort>
- 排序条件
-zkhost <host>
- ZooKeeper 主机
2. 导入数据(post) 虽然 post
不是 solr
脚本的子命令,但它是重要的数据导入工具:
1 2 3 4 5 6 7 8 9 10 11 bin/post -c mycollection /path/to/data.json bin/post -c mycollection /path/to/data.xml bin/post -c mycollection /path/to/directory/ bin/post -url http://localhost:8983/solr/mycollection/update /path/to/data.json
健康检查和诊断 1. 健康检查(healthcheck) 1 2 3 4 5 6 7 8 bin/solr healthcheck -c mycollection bin/solr healthcheck -c mycollection -zkhost zk1:2181/solr bin/solr healthcheck -c mycollection -verbose
健康检查内容 :
集合状态和分片健康
副本状态和同步情况
节点可用性
配置一致性
2. 版本信息(version) 1 2 3 4 5 bin/solr version bin/solr -version
快照和备份管理 1. 创建快照(snapshot) 1 2 3 4 5 6 7 8 9 bin/solr snapshot -c mycollection \ -snapshot-name backup_20241201 \ -zkhost zk1:2181/solr bin/solr snapshot -c mycollection \ -snapshot-name backup_20241201 \ -async snapshot_task_1
2. 删除快照(delete-snapshot) 1 2 3 4 bin/solr delete-snapshot -c mycollection \ -snapshot-name backup_20241201 \ -zkhost zk1:2181/solr
3. 列出快照(list-snapshots) 1 2 bin/solr list-snapshots -c mycollection -zkhost zk1:2181/solr
高级管理操作 1. 包管理(package) 1 2 3 4 5 6 7 8 9 10 11 bin/solr package list-available bin/solr package install clustering bin/solr package list-installed bin/solr package deploy clustering -cluster -collections mycollection
2. API 工具(api) 1 2 3 4 5 6 bin/solr api -get "http://localhost:8983/solr/admin/collections?action=LIST" bin/solr api -post "http://localhost:8983/solr/mycollection/update" \ -data '{"add": {"doc": {"id": "1", "title": "Test Document"}}}'
配置文件和环境变量 1. 环境变量配置 主要的环境变量包括:
1 2 3 4 5 6 7 8 SOLR_HEAP=4g SOLR_HOME=/var/solr SOLR_PORT=8983 SOLR_HOST=localhost ZK_HOST=zk1:2181,zk2:2181 SOLR_MODE=solrcloud SOLR_LOGS_DIR=/var/solr/logs
2. 高级 JVM 配置 1 2 3 4 5 6 7 8 9 10 GC_TUNE="-XX:+UseG1GC -XX:+PerfDisableSharedMem" SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true" SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000" ENABLE_REMOTE_JMX_OPTS=true SOLR_OPTS="$SOLR_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044"
实用脚本示例 1. 自动化部署脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #!/bin/bash SOLR_HOME="/opt/solr" COLLECTION_NAME="products" CONFIG_DIR="/path/to/config" ZK_HOST="zk1:2181,zk2:2181,zk3:2181/solr" echo "Starting Solr..." $SOLR_HOME /bin/solr start -c -z $ZK_HOST -m 4gsleep 30echo "Uploading configuration..." $SOLR_HOME /bin/solr zk upconfig \ -confname ${COLLECTION_NAME} _config \ -confdir $CONFIG_DIR \ -zkhost $ZK_HOST echo "Creating collection..." $SOLR_HOME /bin/solr create \ -collection $COLLECTION_NAME \ -configset ${COLLECTION_NAME} _config \ -shards 3 \ -replicationFactor 2 echo "Deployment completed successfully!"
2. 健康检查脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/bash SOLR_URL="http://localhost:8983/solr" COLLECTIONS=("products" "logs" "analytics" ) for collection in "${COLLECTIONS[@]} " ; do echo "Checking collection: $collection " health_result=$(bin/solr healthcheck -c "$collection " 2>/dev/null) if echo "$health_result " | grep -q "HEALTHY" ; then echo "✓ $collection is healthy" else echo "✗ $collection has issues" echo "$health_result " fi done echo "Checking cluster status..." cluster_status=$(bin/solr api -get "$SOLR_URL /admin/collections?action=CLUSTERSTATUS&wt=json" ) echo "$cluster_status " | jq '.cluster.live_nodes'
3. 备份脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #!/bin/bash COLLECTIONS=("products" "users" "analytics" ) BACKUP_BASE_DIR="/var/solr/backups" DATE=$(date +%Y%m%d_%H%M%S) for collection in "${COLLECTIONS[@]} " ; do backup_name="${collection} _${DATE} " echo "Creating backup for $collection ..." bin/solr api -post "http://localhost:8983/solr/admin/collections" \ -data "action=BACKUP&name=$backup_name &collection=$collection &location=$BACKUP_BASE_DIR " sleep 10 echo "Backup $backup_name created successfully" done find "$BACKUP_BASE_DIR " -name "*_20*" -mtime +30 -exec rm -rf {} \;
故障排除 1. 常见问题诊断 启动问题 1 2 3 4 5 6 7 8 netstat -tulpn | grep :8983 bin/solr start -verbose ps aux | grep solr
连接问题 1 2 3 4 5 bin/solr zk ls / -zkhost zk1:2181 bin/solr api -get "http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS"
2. 调试选项 1 2 3 4 5 6 7 8 SOLR_OPTS="$SOLR_OPTS -Dsolr.log.level=DEBUG" ENABLE_REMOTE_JMX_OPTS=true SOLR_OPTS="$SOLR_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044"
小结 Solr 控制脚本是 Apache Solr 生态系统中的核心管理工具,提供了全面的服务器和集群管理功能。掌握这个脚本的使用方法对于 Solr 的日常运维和管理至关重要。
关键要点
服务器管理 :完整的启动、停止、重启和状态检查功能
集合管理 :简化的集合和核心创建、删除操作
ZooKeeper 操作 :完整的配置管理和文件操作工具
安全配置 :内置的认证和授权管理功能
数据管理 :便捷的数据导入导出和备份功能
监控诊断 :健康检查和故障排除工具
通过熟练使用这些命令和选项,可以高效地管理 Solr 集群,实现自动化运维,并快速解决各种运维问题。建议在实际使用中结合脚本自动化,提高运维效率和可靠性。