Solr部署:集群升级完整指南与最佳实践

概述

本指南涵盖如何升级使用服务安装脚本安装的现有Solr集群。升级过程需要仔细规划和执行,以确保集群的稳定性和数据安全性。

重要提示:本页面概述的步骤假设您使用默认服务名称solr。如果您使用备用服务名称或Solr安装目录,下面提到的一些路径和命令需要相应修改。

关于IndexUpgraderTool:以前版本的参考指南提到了Lucene项目提供的IndexUpgraderTool,可用于离线升级Solr索引文件。有业务需求需要使用此工具的用户可以像以前一样使用,但在绝大多数升级工作流程中不需要。本文档假设未使用该工具。

升级规划

在开始升级过程之前,您需要准备以下检查清单:

1. 版本兼容性检查

查阅Solr升级说明,确定新版本Solr中的任何行为更改是否会影响您的安装。

关键检查项

  • API变更和废弃功能
  • 配置文件格式变化
  • Java版本要求变化
  • 第三方插件兼容性

2. 备份策略

如果不使用复制(即,replicationFactor小于1的集合),则应备份每个集合。如果所有集合都使用复制,那么技术上不需要备份,因为您将逐个升级和验证每个节点。

备份建议

  • 即使有副本,也建议进行备份以防万一
  • 备份配置集和核心配置文件
  • 记录当前集群状态和配置

3. Overseer节点识别

确定当前在SolrCloud中托管Overseer领导者进程的Solr节点,应最后升级此节点。

获取Overseer信息

1
curl "http://localhost:8983/solr/admin/collections?action=OVERSEERSTATUS"

4. 维护窗口规划

如果可能,计划在系统维护窗口期间执行升级。您将对集群执行滚动重启(逐个节点),但我们仍建议在系统使用最少时进行升级。

5. 集群健康验证

验证集群当前健康,所有副本都活跃,因为不应在降级集群上执行升级。

健康检查命令

1
2
3
4
5
# 检查集群状态
curl "http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS"

# 检查每个集合的健康状态
/opt/solr/bin/solr healthcheck -c <collection_name> -z <zk_host>

6. 自定义组件测试

重新构建并针对新Solr JAR文件测试所有自定义服务器端组件。

7. 环境变量收集

确定Solr控制脚本使用的以下变量值:

  • ZK_HOST:当前SolrCloud节点连接ZooKeeper的连接字符串;集群中所有节点的此值相同
  • SOLR_HOST:每个Solr节点在加入SolrCloud集群时向ZooKeeper注册的主机名
  • SOLR_PORT:每个Solr节点监听的端口,如8983
  • SOLR_HOME:每个Solr节点的Solr主目录的绝对路径

如果从Solr 5.x或更高版本安装升级,这些值通常可以在/var/solr/solr.in.sh/etc/default/solr.in.sh中找到。

升级流程

我们建议的方法是逐个执行每个Solr节点的升级。换句话说,您需要停止一个节点,将其升级到新版本的Solr,然后重启它,然后再继续下一个节点。这意味着在短时间内,集群中将混合运行”旧Solr”和”新Solr”节点。

升级顺序建议

  1. 非Overseer节点:先升级普通数据节点
  2. Overseer节点:最后升级Overseer节点
  3. 关键节点:重要分片的领导者节点需要特别注意

详细升级步骤

步骤1:停止Solr服务

开始停止要升级的Solr节点。

1
sudo service solr stop

停止节点后,如果使用副本(即,replicationFactor大于1的集合),验证在停止节点上托管的所有领导者都已成功迁移到其他副本;您可以通过访问Solr管理界面中的Cloud界面来执行此操作。

验证步骤

  1. 检查是否有分片失去领导者
  2. 确认自动故障转移是否正常工作
  3. 监控集群状态是否稳定

如果不使用副本,那么在停止节点上托管分片的任何集合将暂时离线。

步骤2:安装Solr服务

按照在Linux上安装Solr作为服务的说明进行操作。使用-n参数避免安装程序脚本自动启动Solr。

1
2
3
4
5
6
# 下载新版本Solr
wget https://downloads.apache.org/solr/solr-9.x.x/solr-9.x.x.tgz

# 解压并安装
tar xzf solr-9.x.x.tgz
sudo bash solr-9.x.x/bin/install_solr_service.sh solr-9.x.x.tgz -n

您需要在下一步中更新/etc/default/solr.in.sh包含文件以完成升级过程。

注意:如果您的现有Solr安装有/var/solr/solr.in.sh文件,运行install_solr_service.sh脚本会将此文件移动到新位置:/etc/default/solr.in.sh

步骤3:设置环境变量覆盖

用文本编辑器打开/etc/default/solr.in.sh,验证以下变量设置正确,或根据需要将它们添加到包含文件的底部:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ZK_HOST="zk1:2181,zk2:2181,zk3:2181/solr"
SOLR_HOST="192.168.1.100"
SOLR_PORT=8983
SOLR_HOME="/var/solr/data"

# 其他重要配置
SOLR_HEAP="8g"
SOLR_JAVA_HOME="/usr/lib/jvm/java-11-openjdk"

# GC设置
GC_TUNE="-XX:+UseG1GC -XX:MaxGCPauseMillis=250"

# 日志设置
SOLR_LOGS_DIR="/var/solr/logs"

确保计划拥有Solr进程的用户是SOLR_HOME目录的所有者。例如,如果计划以”solr”用户身份运行Solr且SOLR_HOME/var/solr/data,那么您需要执行:

1
sudo chown -R solr: /var/solr/data

步骤4:启动Solr

现在准备通过以下命令启动升级的Solr节点:

1
sudo service solr start

升级的实例将加入现有集群,因为您使用的是旧Solr节点使用的相同SOLR_HOMESOLR_PORTSOLR_HOST设置;因此,新服务器对于运行的集群来说看起来像旧节点。

启动验证

1
2
3
4
5
6
7
8
# 检查服务状态
sudo service solr status

# 查看启动日志
tail -f /var/solr/logs/solr.log

# 检查进程
ps aux | grep solr

务必查看/var/solr/logs/solr.log中的启动错误。

步骤5:运行健康检查

在继续升级集群中的下一个节点之前,应对升级节点上托管的所有集合运行Solr healthcheck命令。

例如,如果新升级的节点托管MyDocuments集合的副本,则可以运行以下命令(将ZK_HOST替换为ZooKeeper连接字符串):

1
/opt/solr/bin/solr healthcheck -c MyDocuments -z "zk1:2181,zk2:2181,zk3:2181/solr"

健康检查项目

  • 所有分片是否有领导者
  • 副本是否处于活跃状态
  • 索引是否可用
  • 查询是否正常响应

查找报告的关于集合任何副本的问题。

步骤6:重复升级过程

对集群中的所有节点重复步骤1-5。

升级顺序

  1. 普通数据节点
  2. 专用查询节点(如果有)
  3. 最后升级Overseer节点

升级验证和测试

功能验证

在每个节点升级后,执行以下验证:

1
2
3
4
5
6
7
8
9
10
11
# 1. 检查节点状态
curl "http://localhost:8983/solr/admin/info/system"

# 2. 检查集合状态
curl "http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS"

# 3. 执行基本查询测试
curl "http://localhost:8983/solr/collection_name/select?q=*:*&rows=1"

# 4. 检查副本同步状态
curl "http://localhost:8983/solr/admin/cores?action=STATUS"

性能验证

升级完成后,验证性能是否符合预期:

1
2
3
4
5
6
7
8
# 1. 查询响应时间测试
time curl "http://localhost:8983/solr/collection_name/select?q=*:*"

# 2. 索引性能测试
# 提交少量测试数据并观察性能

# 3. 内存使用情况检查
curl "http://localhost:8983/solr/admin/metrics?group=jvm"

故障处理

常见升级问题

节点无法启动

可能原因

  • 配置文件错误
  • Java版本不兼容
  • 权限问题
  • 端口冲突

解决步骤

  1. 检查日志文件:tail -f /var/solr/logs/solr.log
  2. 验证配置文件语法
  3. 检查文件权限
  4. 验证端口可用性

节点无法加入集群

可能原因

  • ZooKeeper连接问题
  • 主机名解析问题
  • 防火墙设置

解决步骤

  1. 验证ZooKeeper连接:echo ruok | nc zk_host 2181
  2. 检查主机名解析:nslookup $SOLR_HOST
  3. 验证端口可达性:telnet target_host target_port

副本同步问题

可能原因

  • 网络延迟
  • 磁盘I/O问题
  • 索引损坏

解决步骤

  1. 强制副本同步
  2. 检查磁盘空间和I/O
  3. 验证索引完整性

回滚策略

如果升级失败,准备回滚方案:

单节点回滚

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 停止新版本Solr
sudo service solr stop

# 2. 恢复旧版本安装
sudo systemctl disable solr
sudo rm -f /etc/init.d/solr

# 3. 重新安装旧版本
# 恢复备份的配置和数据

# 4. 启动旧版本
sudo service solr start

完整集群回滚

在极端情况下,如果需要完整集群回滚:

  1. 按相反顺序回滚所有节点
  2. 从备份恢复配置集
  3. 验证数据完整性
  4. 执行全面健康检查

最佳实践和建议

升级准备

  1. 测试环境验证:始终先在测试环境中完整执行升级流程
  2. 备份策略:即使有副本,也要制作关键数据的备份
  3. 监控就绪:确保监控系统能够检测升级过程中的问题
  4. 团队协调:确保相关团队了解升级计划和可能的影响

升级执行

  1. 逐步升级:一次只升级一个节点,观察稳定后再继续
  2. 充分验证:每个节点升级后都要进行完整的功能验证
  3. 监控关注:密切监控集群状态、性能指标和错误日志
  4. 文档记录:记录升级过程中的所有操作和观察到的问题

升级后维护

  1. 性能监控:升级后持续监控性能指标
  2. 日志审查:定期审查日志文件识别潜在问题
  3. 容量规划:评估新版本的资源使用情况
  4. 知识更新:更新运维文档和流程

高可用性考虑

  1. 副本配置:确保关键集合有足够的副本
  2. 负载均衡:配置合适的负载均衡策略
  3. 监控告警:设置适当的告警机制
  4. 故障恢复:制定详细的故障恢复程序

升级清单

升级前检查

  • 阅读版本升级说明
  • 备份关键数据和配置
  • 识别Overseer节点
  • 验证集群健康状态
  • 测试自定义组件
  • 准备环境变量
  • 制定回滚计划

升级过程检查

  • 按正确顺序升级节点
  • 验证每个节点启动正常
  • 执行健康检查
  • 监控集群状态
  • 记录升级过程
  • 处理任何问题

升级后检查

  • 验证所有功能正常
  • 检查性能指标
  • 更新监控配置
  • 更新运维文档
  • 培训相关人员
  • 制定维护计划

总结

SolrCloud集群升级是一个需要仔细规划和执行的过程。通过遵循本指南中的步骤和最佳实践,可以最小化升级风险并确保平稳过渡到新版本。记住,测试和验证是成功升级的关键,永远不要在没有充分测试的情况下在生产环境中执行升级。

关键成功要素包括:

  1. 充分准备:详细的升级规划和准备工作
  2. 渐进执行:逐步升级并充分验证每一步
  3. 持续监控:密切关注集群状态和性能指标
  4. 应急准备:准备好回滚方案和故障处理流程

通过遵循这些原则,可以确保SolrCloud集群升级的成功,并为系统的长期稳定运行奠定基础。

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