Solr概念:控制脚本与系统管理

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
# 默认启动(端口 8983)
bin/solr start

# 后台启动
bin/solr start -force

# 指定端口启动
bin/solr start -p 8984

# 指定 Solr 主目录
bin/solr start -s /path/to/solr/home

SolrCloud 模式启动

1
2
3
4
5
6
7
8
9
10
11
# 连接到外部 ZooKeeper
bin/solr start -c -z zk1:2181,zk2:2181,zk3:2181

# 使用 ZooKeeper chroot
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
# 停止默认端口的 Solr
bin/solr stop

# 停止指定端口的 Solr
bin/solr stop -p 8984

# 停止所有 Solr 实例
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
# 重启默认 Solr 实例
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
# 检查 Solr 状态
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
# 上传配置集到 ZooKeeper
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
# 从 ZooKeeper 下载配置集
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
# 上传文件到 ZooKeeper
bin/solr zk cp file:/path/to/local/file zk:/solr/configs/myconfig/solrconfig.xml \
-zkhost zk1:2181

# 从 ZooKeeper 下载文件
bin/solr zk cp zk:/solr/configs/myconfig/schema.xml file:/local/path/schema.xml \
-zkhost zk1:2181

# ZooKeeper 内部复制
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
# 在 ZooKeeper 中移动文件
bin/solr zk mv /solr/configs/old_name /solr/configs/new_name -zkhost zk1:2181

创建路径(mkroot)

1
2
# 创建 ZooKeeper chroot 路径
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
# 启用 Kerberos 认证
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
# 导入 JSON 文件
bin/post -c mycollection /path/to/data.json

# 导入 XML 文件
bin/post -c mycollection /path/to/data.xml

# 导入目录中的所有文件
bin/post -c mycollection /path/to/directory/

# 指定 Solr URL 导入
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

# 指定 ZooKeeper 检查
bin/solr healthcheck -c mycollection -zkhost zk1:2181/solr

# 详细健康检查
bin/solr healthcheck -c mycollection -verbose

健康检查内容

  • 集合状态和分片健康
  • 副本状态和同步情况
  • 节点可用性
  • 配置一致性

2. 版本信息(version)

1
2
3
4
5
# 查看 Solr 版本信息
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
# 直接调用 Solr API
bin/solr api -get "http://localhost:8983/solr/admin/collections?action=LIST"

# POST 请求
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.in.sh 或 solr.in.cmd 中设置
SOLR_HEAP=4g # JVM 堆内存
SOLR_HOME=/var/solr # Solr 主目录
SOLR_PORT=8983 # 默认端口
SOLR_HOST=localhost # 主机名
ZK_HOST=zk1:2181,zk2:2181 # ZooKeeper 主机
SOLR_MODE=solrcloud # 运行模式
SOLR_LOGS_DIR=/var/solr/logs # 日志目录

2. 高级 JVM 配置

1
2
3
4
5
6
7
8
9
10
# GC 配置
GC_TUNE="-XX:+UseG1GC -XX:+PerfDisableSharedMem"

# JVM 选项
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
# deploy-solr.sh - 自动化 Solr 部署脚本

SOLR_HOME="/opt/solr"
COLLECTION_NAME="products"
CONFIG_DIR="/path/to/config"
ZK_HOST="zk1:2181,zk2:2181,zk3:2181/solr"

# 启动 Solr
echo "Starting Solr..."
$SOLR_HOME/bin/solr start -c -z $ZK_HOST -m 4g

# 等待启动完成
sleep 30

# 上传配置集
echo "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
# health-monitor.sh - Solr 健康监控脚本

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
# backup-collections.sh - 集合备份脚本

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

# 清理旧备份(保留30天)
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

# 检查 JVM 参数
ps aux | grep solr

连接问题

1
2
3
4
5
# 测试 ZooKeeper 连接
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"

# 启用远程 JMX
ENABLE_REMOTE_JMX_OPTS=true

# 启用 JVM 调试
SOLR_OPTS="$SOLR_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044"

小结

Solr 控制脚本是 Apache Solr 生态系统中的核心管理工具,提供了全面的服务器和集群管理功能。掌握这个脚本的使用方法对于 Solr 的日常运维和管理至关重要。

关键要点

  1. 服务器管理:完整的启动、停止、重启和状态检查功能
  2. 集合管理:简化的集合和核心创建、删除操作
  3. ZooKeeper 操作:完整的配置管理和文件操作工具
  4. 安全配置:内置的认证和授权管理功能
  5. 数据管理:便捷的数据导入导出和备份功能
  6. 监控诊断:健康检查和故障排除工具

通过熟练使用这些命令和选项,可以高效地管理 Solr 集群,实现自动化运维,并快速解决各种运维问题。建议在实际使用中结合脚本自动化,提高运维效率和可靠性。

© 2025 Solr Community of China All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero