升级 Solr 集群
本页介绍如何升级使用 服务安装脚本安装的现有 Solr 集群。
本页概述的步骤假设您使用默认服务名称 solr 。如果您使用备用服务名称或 Solr 安装目录,则下面提到的一些路径和命令必须进行相应的修改。 |
本参考指南的先前版本提到了 Lucene 项目提供的 IndexUpgraderTool,如果需要,可以使用它来离线升级 Solr 索引文件。具有需要使用该工具的业务需求的用户可以像以前一样使用该工具,但是,在绝大多数升级工作流程中不需要它。以下文档假设该工具未使用。 |
规划升级
这是开始升级过程之前需要准备的事项清单
-
查看 Solr 升级说明,以确定新版本 Solr 中的任何行为更改是否会影响您的安装。
-
如果未使用复制(即,
replicationFactor
小于 1 的集合),则应备份每个集合。如果您的所有集合都使用复制,则您实际上不需要进行备份,因为您将单独升级和验证每个节点。 -
确定哪个 Solr 节点当前在 SolrCloud 中托管 Overseer 领导进程,因为您应该最后升级此节点。要确定 Overseer,请使用 Overseer 状态 API。
-
如果可能,请计划在系统维护窗口期间执行升级。您将对集群进行滚动重启(逐个节点),但我们仍然建议在系统使用率最小时进行升级。
-
验证集群当前是否运行状况良好并且所有副本都处于活动状态,因为您不应在降级的集群上执行升级。
-
根据新的 Solr JAR 文件重新构建并测试所有自定义服务器端组件。
-
确定 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 安装有 |
步骤 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