0

我有一个 SOLR / Zookeeper / Kafka 设置。每个都在单独的虚拟机上。

我已经使用两个 SOLR 4.9 vms (Ubuntu) 成功运行了这一切

现在我希望构建两个 SOLR 5.4 虚拟机并让它再次工作。

本质上,“替换升级”

我已经“破解”了我的问题的解决方案,但这让我非常紧张。

首先,Zookeeper 正在运行。我关闭了我的 SOLR 4.9 vms 并从 Zookeeper 中删除了配置(不一定按那个顺序... ;-))

现在,我根据 SOLR Wiki 上的“生产安装”说明启动我已安装 SOLR 5.4 的“solr5”虚拟机(以及云模式下的 SOLR)。我还在“solr6”上安装了 5.4,但它还没有运行。

我在“solr5”机器上发出这个命令:

/opt/solr/bin/solr create -c fooCollection -d /home/john/conf -shards 1 -replicationFactor 1

我得到以下输出:

Connecting to ZooKeeper at 192.168.56.5,192.168.56.6,192.168.56.7/solr ...
Re-using existing configuration directory statdx

Creating new collection 'fooCollection' using command:
http://localhost:8983/solr/admin/collections?action=CREATE&name=fooCollection&numShards=1&replicationFactor=1&maxShardsPerNode=1&collection.configName=fooCollection

{
  "responseHeader":{
    "status":0,
    "QTime":3822},
  "success":{"":{
      "responseHeader":{
        "status":0,
        "QTime":3640},
      "core":"fooCollection_shard1_replica1"}}}

一切都很好。我打开我的微服务,它将我所有的 SOLR 文档从 Kafka 泵入“solr5”。

现在,我想将“solr6”添加到集合中。除了我的 hack(我稍后会描述)之外,我找不到这样做的方法。

我之前用来创建集合的命令,由于观察到我的集合已经存在而出错。

似乎没有 zkcli.sh 或 solr 命令可以满足我的要求。似乎也没有任何 api 命令执行此操作。

有没有一种简单的方法可以告诉(SOLR?Zookeeper?)我想向我的 SOLR 节点添加另一台机器,请像第一台(solr5)一样配置它并开始复制数据?

当我发出 create 命令时,也许我应该让两台机器都运行?

我会感谢一些“已批准”的方法来执行此操作,因为每次需要升级 SOLR 时,我都需要想出一个“解决方案”来在 Prod 中执行相同的方法。

现在我的黑客。请记住,我现在有两天时间试图找到关于此的明确文档。请不要火焰,我完全明白这不是做事的方式。至少,我希望这不是做事的方式......

  1. 将 fooCollection 目录从 create collection 命令放置在“solr5”(即 /opt/solr/server/solr/fooCollection_shard1_replica1)上的位置复制到我的“solr6”VM 上的相同位置。
  2. 使集合目录名称的更改看起来合乎逻辑(变为 fooCollection_shard1_replica2)
  3. 使 core.properties 文件中的更改看起来合乎逻辑:

作为参考,这里是由 create 命令创建的 core.properties 文件。

#Written by CorePropertiesLocator
#Wed Jan 20 18:59:08 UTC 2016
numShards=1
name=fooCollection_shard1_replica1
shard=shard1
collection=fooCollection
coreNodeName=core_node1

这是我完成黑客攻击后文件在“solr6”上的样子。

#Written by CorePropertiesLocator
#Wed Jan 20 18:59:08 UTC 2016
numShards=1
name=fooCollection_shard1_replica2
shard=shard1
collection=fooCollection
coreNodeName=core_node2

当我这样做并重新启动“solr6”时,一切看起来都是金色的。“云”网页在管理网页中看起来正确 - 当我将文档添加到“solr5”时,如果我直接从管理网页点击它,它们在“solr6”中可用。

如果有人能告诉我如何在没有这样的黑客攻击的情况下实现这一目标,我将不胜感激……或者这是正确的方法……

==============================

回答@Mani和建议的程序

谢谢玛尼-我确实按照您的步骤非常仔细地尝试过。

最后,我从收集状态查询中得到这个输出:

    john@solr6:/opt/solr$ ./bin/solr healthcheck -z 192.168.56.5,192.168.56.6,192.168.56.7/solr5_4 -c fooCollection
{
  "collection":"fooCollection",
  "status":"healthy",
  "numDocs":0,
  "numShards":1,
  "shards":[{
      "shard":"shard1",
      "status":"healthy",
      "replicas":[{
          "name":"core_node1",
          "url":"http://192.168.56.15:8983/solr/fooCollection_shard1_replica1/",
          "numDocs":0,
          "status":"active",
          "uptime":"0 days, 0 hours, 6 minutes, 24 seconds",
          "memory":"31 MB (%6.3) of 490.7 MB",
          "leader":true}]}]}

这是我一直在实验中发现的结果。核心将在其中一个 SOLR VM 上创建(我发出命令行以在其上创建集合),但我没有在另一个 VM 上创建任何东西——根据您下面的步骤,我相信你也认为应该发生,是吗?

另外,我会为任何阅读 5.4 的人注意,命令是“healthcheck”而不是 healthstatus。命令行会立即显示给您,所以没什么大不了的。

================

更新 1 :: 手动添加第二个核心

如果我转到另一个 VM 并手动添加以下内容:

sudo mkdir /opt/solr/server/solr/fooCollection_shard1_replica2
sudo mkdir /opt/solr/server/solr/fooCollection_shard1_replica2/data
nano /opt/solr/server/solr/fooCollection_shard1_replica2/core.properties
     (in here I add only collection=fooCollection and then save/close)

然后我在同一个虚拟机上重新启动我的 SOLR 服务器: sudo /opt/solr/bin/solr restart -c -z zoo1,zoo2,zoo3/solr

我会发现第二个节点神奇地出现在我的管理控制台中。它将是一个“追随者”(IE 不是领导者),两者都将在云 UI 中从“shard1”分支出来。

我不知道这是否是“方法”,但这是我迄今为止找到的唯一方法。我将重现到那时并尝试使用管理 UI 并看看我得到了什么。时机成熟时,这对我的 IT 人员来说会容易一些——如果可行的话。

================

更新 2 :: create 命令的轻微修改

@Mani - 我相信我按照你的步骤取得了成功 - 就像很多事情一样,一旦你理解它就很简单。

我重置了所有内容(删除了目录,清除了 zookeeper(rmr / solr)并重新从头开始做了所有事情。

我因此稍微更改了“创建”命令:

./bin/solr create -c fooCollection -d /home/john/conf -shards 1 -replicationFactor 2

注意“replicationFactor 2”而不是 1。

突然间,我确实在两个虚拟机上都有内核。

几点注意事项:

我发现仅通过使用 Zookeeper IP 地址以云模式启动 SOLR 5.4 服务器无法从状态调用中​​获得满意的结果。Zookeeper 中的“节点”尚未创建。

create 命令此时也失败了。

我发现的方法是使用 zkcli.sh 来加载配置,如下所示:

sudo /opt/solr/server/scripts/cloud-scripts/zkcli.sh -cmd upconfig -confdir /home/john/conf/ -confname fooCollection -z 192.168.56.5/solr

当我在运行此命令后立即检查 Zookeeper 时,有一个 /solr/configs/fooCollection“路径”。

现在 create 命令起作用了,我假设如果我想覆盖配置,虽然我没有尝试过,但我可以在那时这样做。

我在什么时候不确定,但似乎我需要重新启动 SOLR 服务器(可能在创建命令之后)才能找到状态等的所有内容......我可能记错了,因为我经历过它所以很多次。如果在创建命令后有疑问,请尝试重新启动服务器。(这可以是正确解析的 IP 地址或名称)

sudo /opt/solr/bin/solr restart -c -z zoo1,zoo2,zoo3/solr
sudo /opt/solr/bin/solr restart -c -z 192.168.56.5,192.168.56.6,192.168.56.7/solr

在对@Mani 推荐的程序进行了这些细微修改之后,我在不同的 VM 上分别获得了一个领导者和一个“追随者”——在 /opt/solr/server/solr 目录(在本例中为 fooCollection)中,我能够发送数据到一个并通过管理控制台搜索另一个,点击 IP 地址。

==============

变化

阅读本文的人可能想尝试的一件事就是在 Zookeeper 中创建另一个“节点”(例如 solr5_4)。

我试过这个,它就像一个魅力。在您看到与 Zookeeper ensemble 关联的 /solr chroot 的任何地方,您都可以将其替换为 /solr5_4。这将允许旧的 SOLR VM 在您构建新的 SOLR 5.4“环境”时继续在 Prod 中运行,并且可以将相同的 Zookeeper VM 用于两者——因为不同的 chroot 应该保证没有交互或重叠。

同样,在您进行配置上传之前不会创建 Zookeeper 中的“节点”,但您需要像这样启动 SOLR 过程,否则您稍后会处于错误的上下文中。请注意“solr5_4”作为 chroot。

sudo /opt/solr/bin/solr restart -c -z zoo1,zoo2,zoo3/solr5_4

一旦完成测试,solr5_4“环境”就变成了对 Prod 重要的东西,SOLR 4.x VM 和 solr 的 Zookeeper“节点”可以被删除。将负载平衡器指向新的 SOLR 虚拟机并在用户没有注意到的情况下进行切换应该是一件相当简单的事情。

此策略适用于 SOLR 6、6.5、7 等。

此命令还用于添加集合/核心。但是,必须首先运行 solr 服务器。

http://192.168.56.16:8983/solr/admin/collections?action=CREATE&name=fooCollection&numShards=1&replicationFactor=2&collection.configName=fooCollection

===================

用作替换升级

如果不是很明显,这种技术(特别是如果在 Zookeeper 中使用 /solr5_4 之类的“新”chroot 或类似的东西)可以让您尽可能长时间地让旧版本的 SOLR 运行。如果需要,允许重新索引所有数据需要几天时间。

我还没有尝试过,但我猜索引的备份也可以放入新机器中。

我只是想让读者明白,这是一种旨在使升级真正降低压力和直接的方法。(不需要就地升级,只需构建新的虚拟机并安装最新版本的 SOLR。)

这将允许在不影响 prod 的情况下进行切换,直到您准备好放下锤子并将负载均衡器重新定向到新的 SOLR ip 地址(当然,您已经测试过了……)

这里的一个假设是您有资源来启动一组 SOLR VM 或物理服务器,以匹配您在生产中已有的任何内容。显然,如果您的资源仅限于您拥有的机器或虚拟机,则就地升级可能是您唯一的选择。

4

1 回答 1

1

我就是这样做的。我假设您可以享受停机时间并有能力完全重新索引文档。因为您本质上是从 4.​​9 升级到 5.4。

  • 停止 4.9 solr 节点并卸载 solr。
  • 使用 zkcli.sh 和 clear 命令从 zk 节点中删除配置。
  • 在 solr5 和 solr6 vm 上安装 solr
  • 启动两个 solr 节点并确保它们都可以与 zk 对话。=> 在 solr5 vm ./bin/solr start -c -z zk1:port1,zk2:port1,zk3:port1 在 solr6 vm ./bin/solr start -c -z zk1:port1,zk2:port1,zk3:port1
  • 使用 ./bin/solr status 验证 Solrcloud 的状态 => 这应该将 liveNodes 返回为 2
  • 现在使用来自任何 solr 节点的 CollectionsAPI 创建 fooCollection。这会将配置集上传到 zookeeper 并创建集合 => ./bin/solr create -c fooCollection -d /home/john/conf -shards 1 -replicationFactor 1

  • 验证 fooCollection 的 healthstatus => ./bin/solr healthstatus -z zk1:port1,zk2:port1,zk3:port1 -c fooCollection

  • 现在通过检查 Solr-AdminConsole -> CloudSection -> Tree .. /configs 来验证 Zookeeper 中是否存在配置
  • 并检查 CloudSection -> Graph 显示节点上的活动状态。这表明一切都很好。
  • 现在开始将文档推送到集合中

下面的 wiki 对执行上述操作非常有帮助。 https://cwiki.apache.org/confluence/display/solr/Solr+Start+Script+Reference

于 2016-01-20T22:13:58.383 回答