概述
本指南涵盖如何升级使用服务安装脚本安装的现有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 | # 检查集群状态 |
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”节点。
升级顺序建议
- 非Overseer节点:先升级普通数据节点
- Overseer节点:最后升级Overseer节点
- 关键节点:重要分片的领导者节点需要特别注意
详细升级步骤
步骤1:停止Solr服务
开始停止要升级的Solr节点。
1 | sudo service solr stop |
停止节点后,如果使用副本(即,replicationFactor
大于1的集合),验证在停止节点上托管的所有领导者都已成功迁移到其他副本;您可以通过访问Solr管理界面中的Cloud界面来执行此操作。
验证步骤:
- 检查是否有分片失去领导者
- 确认自动故障转移是否正常工作
- 监控集群状态是否稳定
如果不使用副本,那么在停止节点上托管分片的任何集合将暂时离线。
步骤2:安装Solr服务
按照在Linux上安装Solr作为服务的说明进行操作。使用-n
参数避免安装程序脚本自动启动Solr。
1 | # 下载新版本Solr |
您需要在下一步中更新/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 | ZK_HOST="zk1:2181,zk2:2181,zk3:2181/solr" |
确保计划拥有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_HOME
、SOLR_PORT
和SOLR_HOST
设置;因此,新服务器对于运行的集群来说看起来像旧节点。
启动验证:
1 | # 检查服务状态 |
务必查看/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。
升级顺序:
- 普通数据节点
- 专用查询节点(如果有)
- 最后升级Overseer节点
升级验证和测试
功能验证
在每个节点升级后,执行以下验证:
1 | # 1. 检查节点状态 |
性能验证
升级完成后,验证性能是否符合预期:
1 | # 1. 查询响应时间测试 |
故障处理
常见升级问题
节点无法启动
可能原因:
- 配置文件错误
- Java版本不兼容
- 权限问题
- 端口冲突
解决步骤:
- 检查日志文件:
tail -f /var/solr/logs/solr.log
- 验证配置文件语法
- 检查文件权限
- 验证端口可用性
节点无法加入集群
可能原因:
- ZooKeeper连接问题
- 主机名解析问题
- 防火墙设置
解决步骤:
- 验证ZooKeeper连接:
echo ruok | nc zk_host 2181
- 检查主机名解析:
nslookup $SOLR_HOST
- 验证端口可达性:
telnet target_host target_port
副本同步问题
可能原因:
- 网络延迟
- 磁盘I/O问题
- 索引损坏
解决步骤:
- 强制副本同步
- 检查磁盘空间和I/O
- 验证索引完整性
回滚策略
如果升级失败,准备回滚方案:
单节点回滚
1 | # 1. 停止新版本Solr |
完整集群回滚
在极端情况下,如果需要完整集群回滚:
- 按相反顺序回滚所有节点
- 从备份恢复配置集
- 验证数据完整性
- 执行全面健康检查
最佳实践和建议
升级准备
- 测试环境验证:始终先在测试环境中完整执行升级流程
- 备份策略:即使有副本,也要制作关键数据的备份
- 监控就绪:确保监控系统能够检测升级过程中的问题
- 团队协调:确保相关团队了解升级计划和可能的影响
升级执行
- 逐步升级:一次只升级一个节点,观察稳定后再继续
- 充分验证:每个节点升级后都要进行完整的功能验证
- 监控关注:密切监控集群状态、性能指标和错误日志
- 文档记录:记录升级过程中的所有操作和观察到的问题
升级后维护
- 性能监控:升级后持续监控性能指标
- 日志审查:定期审查日志文件识别潜在问题
- 容量规划:评估新版本的资源使用情况
- 知识更新:更新运维文档和流程
高可用性考虑
- 副本配置:确保关键集合有足够的副本
- 负载均衡:配置合适的负载均衡策略
- 监控告警:设置适当的告警机制
- 故障恢复:制定详细的故障恢复程序
升级清单
升级前检查
- 阅读版本升级说明
- 备份关键数据和配置
- 识别Overseer节点
- 验证集群健康状态
- 测试自定义组件
- 准备环境变量
- 制定回滚计划
升级过程检查
- 按正确顺序升级节点
- 验证每个节点启动正常
- 执行健康检查
- 监控集群状态
- 记录升级过程
- 处理任何问题
升级后检查
- 验证所有功能正常
- 检查性能指标
- 更新监控配置
- 更新运维文档
- 培训相关人员
- 制定维护计划
总结
SolrCloud集群升级是一个需要仔细规划和执行的过程。通过遵循本指南中的步骤和最佳实践,可以最小化升级风险并确保平稳过渡到新版本。记住,测试和验证是成功升级的关键,永远不要在没有充分测试的情况下在生产环境中执行升级。
关键成功要素包括:
- 充分准备:详细的升级规划和准备工作
- 渐进执行:逐步升级并充分验证每一步
- 持续监控:密切关注集群状态和性能指标
- 应急准备:准备好回滚方案和故障处理流程
通过遵循这些原则,可以确保SolrCloud集群升级的成功,并为系统的长期稳定运行奠定基础。