升级 Solr 集群
此页面介绍如何升级使用服务安装脚本安装的现有 Solr 集群。
此页面中概述的步骤假定您使用默认服务名称 solr 。如果您使用备用服务名称或 Solr 安装目录,则下面提到的某些路径和命令必须进行相应的修改。 |
规划升级
以下是开始升级过程前需要准备事项的清单
-
检查Solr 升级说明,以确定 Solr 新版本中的任何行为更改是否会影响您的安装。
-
如果不使用复制(即
replicationFactor
小于 1 的集合),则应备份每个集合。如果所有集合都使用复制,则从技术上讲无需进行备份,因为您将逐个升级和验证每个节点。 -
确定当前在 SolrCloud 中托管 Overseer 领导者进程的 Solr 节点,因为您应最后升级此节点。要确定 Overseer,请使用Overseer 状态 API。
-
如果可能,计划在系统维护窗口期间执行升级。您将对集群进行滚动重启(每个节点,逐个进行),但我们仍建议在系统使用率最低时进行升级。
-
验证集群当前是否正常,并且所有副本是否处于活动状态,因为您不应在降级的集群上执行升级。
-
针对新的 Solr JAR 文件重新构建并测试所有自定义服务器端组件。
-
确定 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 安装有 |
步骤 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