升级 Solr 集群

本页介绍如何升级使用 服务安装脚本安装的现有 Solr 集群。

本页概述的步骤假设您使用默认服务名称 solr。如果您使用备用服务名称或 Solr 安装目录,则下面提到的一些路径和命令必须进行相应的修改。
本参考指南的先前版本提到了 Lucene 项目提供的 IndexUpgraderTool,如果需要,可以使用它来离线升级 Solr 索引文件。具有需要使用该工具的业务需求的用户可以像以前一样使用该工具,但是,在绝大多数升级工作流程中不需要它。以下文档假设该工具未使用。

规划升级

这是开始升级过程之前需要准备的事项清单

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

  2. 如果未使用复制(即,replicationFactor 小于 1 的集合),则应备份每个集合。如果您的所有集合都使用复制,则您实际上不需要进行备份,因为您将单独升级和验证每个节点。

  3. 确定哪个 Solr 节点当前在 SolrCloud 中托管 Overseer 领导进程,因为您应该最后升级此节点。要确定 Overseer,请使用 Overseer 状态 API

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

  5. 验证集群当前是否运行状况良好并且所有副本都处于活动状态,因为您不应在降级的集群上执行升级。

  6. 根据新的 Solr JAR 文件重新构建并测试所有自定义服务器端组件。

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

    • ZK_HOST: ZooKeeper 连接字符串,您当前的 SolrCloud 节点使用该字符串连接到 ZooKeeper;此值对于集群中的所有节点都相同。

    • SOLR_HOST: 每个 Solr 节点在加入 SolrCloud 集群时用于向 ZooKeeper 注册的主机名;此值将用于在启动新的 Solr 进程时设置 host Java 系统属性。

    • SOLR_PORT: 每个 Solr 节点正在监听的端口,例如 8983。

    • SOLR_HOME: 每个 Solr 节点的 Solr 主目录的绝对路径。此值将使用 solr.solr.home 系统属性传递给新的 Solr 进程,请参阅:配置 solr.xml

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

您现在应该可以升级您的集群了。请在生产环境中执行此操作之前,在测试或预发布集群中验证此过程。

升级过程

我们建议的方法是对每个 Solr 节点逐个执行升级。换句话说,您需要停止一个节点,将其升级到新版本的 Solr,然后在继续下一个节点之前重新启动它。这意味着在短时间内,您的集群中将同时运行“旧 Solr”和“新 Solr”节点。我们还假设您会将新的 Solr 节点指向您现有的 Solr 主目录,该目录用于管理节点上每个集合的 Lucene 索引文件。这意味着您无需移动任何索引文件即可执行升级。

步骤 1:停止 Solr

首先停止要升级的 Solr 节点。停止节点后,如果使用复制(即,replicationFactor 小于 1 的集合),请验证位于已关闭节点上的所有领导者是否已成功迁移到其他副本;您可以通过访问 Solr 管理 UI 中的 云屏幕 来执行此操作。如果不使用复制,则任何分片位于已关闭节点上的集合将暂时脱机。

步骤 2:将 Solr 安装为服务

请按照 将 Solr 投入生产 中记录的说明,在 Linux 上将 Solr 安装为服务。使用 -n 参数以避免安装脚本自动启动 Solr。您需要在下一步中更新 /etc/default/solr.in.sh 包含文件以完成升级过程。

如果您的现有 Solr 安装有 /var/solr/solr.in.sh 文件,则运行 install_solr_service.sh 脚本会将此文件移动到其新位置:/etc/default/solr.in.sh(有关更多详细信息,请参阅 SOLR-8101

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

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

ZK_HOST=
SOLR_HOST=
SOLR_PORT=
SOLR_HOME=

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

步骤 4:启动 Solr

您现在可以通过执行以下命令来启动升级后的 Solr 节点:sudo service solr start。升级后的实例将加入现有集群,因为您使用的是旧 Solr 节点使用的相同的 SOLR_HOMESOLR_PORTSOLR_HOST 设置;因此,新服务器对于正在运行的集群来说看起来像旧节点。请务必查看 /var/solr/logs/solr.log 中是否有启动期间的错误。

步骤 5:运行运行状况检查

您应该为升级后的节点上托管的所有集合运行 Solr 运行状况检查命令,然后再继续升级集群中的下一个节点。例如,如果新升级的节点托管 MyDocuments 集合的副本,则可以运行以下命令(将 ZK_HOST 替换为 ZooKeeper 连接字符串)

/opt/solr/bin/solr healthcheck -c MyDocuments -z ZK_HOST

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

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