运行 具有三个 ZooKeeper 服务器的 SolrCloud 中的多个 Solr 实例

Run Multiple Solr instances in SolrCloud with three ZooKeeper server

https://gist.github.com/kalharbi/fd29661b9926eb087c45 使用 Kalharbi 的这个奇妙的 GIST,我在我的本地主机上配置了 SolrCloud 三个 ZooKeeper 服务器port 2181, 2182 & 2183 他们的角色分别是follower, follower, & Leader.

我已经上传了两个不同的配置,即 tr_config 和 rp_config 到 ZooKeeper 并使用以下命令创建两个 collections

我的配置文件夹包含一些文件,如 schema.xml、solrconfig.xml 等,位于

     -/opt/solr/server/solr/configsets/tr_config
     -/opt/solr/server/solr/configsets/rp_config

将配置上传到 ZooKeeper:

./server/scripts/cloud-scripts/zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -confdir ./server/solr/configsets/tr_config/conf/ -confname tr_config

./server/scripts/cloud-scripts/zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -confdir ./server/solr/configsets/rp_config/conf/ -confname rp_config

创建Collections:

curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=transactions&numShards=2&replicationFactor=1&collection.configName=tr_config'

curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=properties&numShards=2&replicationFactor=1&collection.configName=rp_config'

它工作正常,但后来我更改了 solrconfig.xml 属性 collection 并再次将配置更新到 ZooKeeper 服务器,然后它显示 lockType.native 关于 solr 初始化的问题,所以我在 solrconfig.xml 上设置了 lockType:none 。它再次起作用。但是当我 运行 使用命令

在不同端口(如 8983、8984 和 8985)上的所有 solr 实例时
$ ./bin/solr start -c -p 8983 -z 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
$ ./bin/solr start -c -p 8984 -z 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
$ ./bin/solr start -c -p 8985 -z 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

显示

no servers hosting shard: shard1

但是如果我停止 8984 和 8985 端口上的其他 solr 实例并 restart 8983 那么我的所有文档都是可查询的。如果我再次启动任何 8984 或 8985 solr 实例,8983 实例将再次不可查询。

The problem may be the data indexing directory are same for all three solr instances, but I don't know how to configure it differently for every other solr collections. So experts give some light on my below problems.

  1. 有什么问题吗?为什么我不能 运行 三个实例 更新 ZooKeeper 上的配置。?

  2. 如何更改 maxShardsPerNode?

提前致谢

您可能已经解决了这个问题 - 对所有节点使用相同的数据目录是行不通的(或者如您所见,它会产生奇怪的错误)。如果您要 运行 多个节点,则必须为每个节点提供不同的 solr.home 目录。

你可以在启动Solr时设置:

-s <dir>
Sets the solr.solr.home system property; Solr will create core directories under this directory. This allows you to run multiple Solr instances on the same host while reusing the same server directory set using the -d parameter. If set, the specified directory should contain a solr.xml file, unless solr.xml exists in ZooKeeper. The default value is server/solr.

关于 maxShardsPerNode,我不认为你不能。创建集合时,该集合的设置将为 "set in stone"。然而,重新平衡 API 的工作正在进行中,以使这些事情变得更容易。

现在您可以使用手动 SPLITSHARD 命令将碎片拆分为两个不同的部分。这可以在服务器响应请求时完成,并将分片分成两半。