2016-01-20 45 views
0

我有SOLR/Zookeeper/Kafka设置。每个在单独的VM上。如何向SOLR云正确添加其他SOLR 5(vm)节点

我已经成功地运行这些使用两个SOLR 4.9虚拟机(Ubuntu的)

我现在想建设两个SOLR 5.4的虚拟机,并把一切工作了。

从本质上讲,

我已经“入侵”到我的问题的解决方案“的升级替代产品”,但是这让我很紧张。

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

现在,我启动我的'solr5'虚拟机(和SOLR在云模式下),其中I根据SOLR Wiki上的“生产安装”说明安装了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"}}} 

一切是伟大的工作。我打开我的微服务,并将所有来自Kafka的SOLR文档抽成'solr5'。

现在,我想添加'solr6'到集合中。除了我的黑客(我将在后面描述),我无法找到一种方法来做到这一点。

我之前用来创建集合的命令,出现了错误,观察到我的集合已经存在。

似乎没有zkcli.sh或solr命令,将执行我想要的。 api命令似乎也没有做到这一点。

是不是有一种简单的方法说(SOLR?Zookeeper?)我想添加另一台机器到我的SOLR节点,请配置它像第一个(solr5)并开始复制数据?

也许我应该有两台机器运行时,我发出创建命令?

因为我需要在每次需要升级SOLR时想出一个“解决方案”以在产品中执行相同的方法,所以我很感激一些“批准”的方法。

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

  1. 复制从哪里创造集合 命令把它放在“solr5”(这是fooCollection目录 的/ opt/Solr的/服务器/ solr/fooCollection_shard1_replica1)到我的'solr6'虚拟机上相同的 位置。
  2. 做什么样的变化似乎是顺理成章的收藏目录名(变成 fooCollection_shard1_replica2)
  3. 做出什么改变似乎在核心逻辑。属性文件:

仅供参考,以下是由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和建议的过程

感谢玛尼 - 我也尝试这种认真地按照你的步骤。

最后,我从收集状态查询此输出:

[email protected]:/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虚拟机(我发布命令行来创建集合)上创建,但是我没有在另一个虚拟机上创建任何东西 - 根据您的步骤,我相信你也认为应该发生,是吗?

此外,我会留意任何阅读5.4中的命令的人都是“healthcheck”,而不是healthstatus。命令行立即显示给你,所以这没什么大不了的。

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

更新1 ::第二核心的手动加

如果我去其他的虚拟机并手动添加以下内容:

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服务器: 须藤的/ opt/Solr的/ bin中/ Solr的重启-c -z zoo1,zoo2,zoo3/Solr的

我会找到一个第二个节点神奇出现在我的管理员c onsole。它将成为“追随者”(I.E.而非领导者),并且两者将在云UI中分离出“shard1”。

我不知道这是否是“方式”,但这是迄今为止我发现的唯一方法。我将重现这一点,并尝试使用管理界面,看看我得到了什么。这对我的IT人员来说会比较轻松 - 如果它有效的话。

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

更新2 ::轻微@Mani的创建命令

修改 - 我相信我有以下你的步骤成功 - 和像很多事情一样,一旦你明白就很简单。

我重置一切(删除的目录,清除了动物园管理员(RMR/Solr的),并重新从头开始做的一切

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

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

注意“ replicationFactor 2" ,而不是1

突然,我确实有两个VM核心

有两点要注意:

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

创建命令也失败了。

我找到解决这个问题的方法是使用zkcli.sh加载CONFIGS这样的:

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

当我检查了动物园管理员在运行此命令后,立即有一个/ Solr的/ CONFIGS/fooCollection “路径”。

现在创建命令的工作原理,我假设如果我想覆盖配置,我可以这样做,虽然我没有尝试过。

我在什么时候不积极,但似乎我需要重新启动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 

做这些细微的修改,以@摩尼的推荐程序后,我得到一个领袖和一个“跟随者”每个不同的虚拟机 - 在/ opt/Solr的/ server/solr目录(在这种情况下为fooCollection),并且我可以通过管理控制台搜索另一个搜索其他的IP地址。

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

变化

一对件事任何人阅读这可能也想尝试是简单地使在动物园管理员又一个“节点”(solr5_4为例)。

我试过了,它的功能就像一个魅力。无论何处,您都会看到与Zookeeper合奏关联的/ solr chroot,您可以用/ solr5_4替换它。这将允许较旧的SOLR虚拟机在Prod建立新的SOLR 5.4“环境”时继续运行,同一Zookeeper虚拟机可用于两者 - 因为不同的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版的Solr的虚拟机和动物园管理员“节点”可以去掉最重要的。将负载平衡器指向新的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中的“new”chroot类似于/ solr5_4或类似的),可以让您尽情享受旧版SOLR的运行时间。如果需要,允许将所有数据重新编入索引。

我还没有尝试过,但我猜测索引的备份可能会被丢弃到新机器中。

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

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

这里的一个假设是你有资源启动一组SOLR VM或物理服务器来匹配无论你已经在生产中有什么。很显然,如果您只限于资源有限的硬盘或虚拟机,就地升级可能是您唯一的选择。

回答

1

这就是我该怎么做的。我假设你有宕机时间&有能力完全重新索引文件。因为你基本上从4.9升级到5.4。

  • 停止4.9 solr节点并卸载solr。
  • 使用带clear命令的zkcli.sh从zk节点中删除配置。
  • 在solr5上安装solr & solr6 vm
  • 启动solr节点并确保两者都可以与zk通话。 => On solr5 vm ./bin/solr start -c -z zk1:port1,zk2:port1,zk3:port1 On solr6 vm ./bin/solr start -c -z zk1:port1,zk2:port1,zk3 :PORT1
  • 使用./bin/solr状态验证Solrcloud的状态=>这应该返回liveNodes 2-
  • 现在创建使用CollectionsAPI从solr的节点中的任何一个的fooCollection。这上传configsets到动物园管理员,并创建集合=> ./bin/solr创建-c fooCollection -d /家庭/约翰/ conf目录-shards 1 -replicationFactor 1

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

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

下面的维基是做上面非常有帮助。 https://cwiki.apache.org/confluence/display/solr/Solr+Start+Script+Reference

+0

谢谢 - 这意味着我的错误是没有其他机器在云模式下运行...如果我有,它可能会奏效。你会同意吗?我现在要给出一个镜头。 – jb62

+0

尝试在solr5上创建集合。但是,该集合不会显示在solr6文件系统中,也不会显示在solr6机器的管理控制台中。管理控制台在solr6的IP上也找不到核心。 – jb62

+0

我从发出create collection命令获得“成功”,但没有找到树/配置部分。 – jb62