升级 Solr 集群

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

此页面中概述的步骤假定您使用默认服务名称 solr。如果您使用备用服务名称或 Solr 安装目录,则下面提到的某些路径和命令必须进行相应的修改。

规划升级

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

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

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

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

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

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

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

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

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

    • SOLR_HOST:加入 SolrCloud 集群时,每个 Solr 节点用于向 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 include 文件以完成升级过程。

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

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

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

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 集合托管副本,那么您可以运行以下命令(用 ZooKeeper 连接字符串替换 ZK_HOST

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

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

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