首页 文章

如何正确地将其他SOLR 5(vm)节点添加到SOLR Cloud

提问于
浏览
0

我有一个SOLR / Zookeeper / Kafka设置 . 每个在不同的VM上 .

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

现在我想构建两个SOLR 5.4 vms并让它全部恢复工作 .

基本上,“通过替换升级”

我已经“黑了”解决了我的问题,但这让我非常紧张 .

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

现在,我按照SOLR Wiki上的“Production Install”说明启动了我的'solr5'VM(以及 Cloud 模式下的SOLR),我安装了SOLR 5.4 . 我还在'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' . 除了我的黑客之外我找不到办法做到这一点(我将在后面描述) .

我之前用来创建集合的命令,错误输出我的集合已经存在的观察结果 .

似乎没有zkcli.sh或solr命令可以执行我想要的操作 . api命令似乎也没有这样做 .

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

也许我应该在发出create命令时运行两台机器?

我要感谢一些“批准”的方法,因为我需要提出一个“解决方案”,以便在每次需要升级SOLR时在Prod中执行相同类型的方法 .

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

  • 将创建集合命令所在的fooCollection目录从'solr5'(即/ opt / solr / server / solr / fooCollection_shard1_replica1)复制到'solr6' VM上的相同位置 .

  • 对集合目录名称进行哪些更改似乎是合乎逻辑的(变为fooCollection_shard1_replica2)

  • 在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'时,一切都显得金黄 . “ Cloud ”网页在管理员网页中看起来正确 - 当我将文档添加到'solr5'时,如果我直接从管理员网页点击它们,则可以在'solr6'中找到它们 .

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

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

回答@Mani和建议的程序

谢谢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)

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

我会在管理控制台中找到第二个神奇地出现的节点 . 它将是一个“追随者”(I.E.而不是领导者),两者都将在 Cloud UI中分支“shard1” .

我不知道这是不是“方式”,但这是我到目前为止找到的唯一方法 . 我将重现到那一点,尝试使用Admin UI,看看我得到了什么 . 当时机成熟时,对我的IT人员来说,这会更容易一些 - 如果有效的话 .

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

Update 2 ::稍微修改create命令

@Mani - 我相信我已经成功地遵循了你的步骤 - 就像许多事情一样,一旦你理解就很简单 .

我重置了一切(删除了目录,清除了zookeeper(rmr / solr)并重新做了所有事情 .

我稍微改变了“create”命令:

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

注意“replicationFactor 2”而不是1 .

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

几个笔记:

我发现,只有在 Cloud 端模式下使用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“path” .

现在create命令工作,我假设如果我想覆盖配置,我可以在那时完成,虽然我没有尝试过 .

我在什么时候并不积极,但似乎我需要重新启动SOLR服务器(可能在创建命令之后)才能找到状态等所有内容......我可能会记错,因为我已经通过了它多次 . 如果在create命令后有疑问,请尝试重新启动服务器 . (这可以是正确解析的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上获得了一个Leader和一个“follower” - 在/ opt / solr / server / solr目录(在这种情况下为fooCollection),我能够发送数据到一个并通过管理控制台搜索另一个到达IP地址 .

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

变化

读这篇文章的人可能想尝试的只是在Zookeeper中创建另一个“节点”(例如solr5_4) .

我试过这个,它就像一个魅力 . 在任何地方,您都可以看到与Zookeeper集合关联的/ 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和Zoor“节点”solr的重要性 . 将负载均衡器指向新的SOLR VM并在没有用户真正注意到的情况下进行切换应该是一件相当简单的事情 .

此策略适用于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 . 允许重新索引所有数据,如果需要,可能需要数天 .

我没试过,但我猜测索引的备份也可以放入新机器中 .

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

这样可以在不影响产品的情况下进行切换,直到您准备好放下锤子并将负载 balancer 器重新定向到新的SOLR IP地址(当然,您已经测试过了......)

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

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的 Health 状况=> ./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

相关问题