在云模式下设置 Apache Solr
Setting Up Apache Solr in Cloud Mode
我必须执行以下操作:
- 我必须在 2 servers/nodes.
上部署 Solr
- 在另一台服务器上部署 Zookeeper。
- 将自定义配置上传到 Zookeeper
- 创建一个包含 2 个分片和 2 个副本的自定义集合
Solr 7.4.0 和 Zookeeper 版本:3.4.12
我做了以下事情:
设置动物园管理员:
- 创建了一个 Zookeeper 数据文件夹并制作了一个 zoo.conf 并将 dataDir 放在那里。
- 使用
./zkServer.sh start
启动了动物园管理员
设置Solr:
使用以下方法启动 Solr:
./solr start -cloud -s /home/demo/LocalFolder/Downloads/SolrHome -p 8987 -z localhost:2181
尝试使用以下方式在 Zookeeper 中上传配置:
./solr create -c mycollection -d /media/sf_VM/Dump/conf
它给了我一个例外:
Caused by: javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:341)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:323)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
... 17 more
</pre>
我搜索了很多页面并查看了 Solr 教程,但它们使用的是默认示例。我只是没有任何一步一步的想法
- 如何在 Zookeeper 中上传配置?
- 然后我需要做些什么来创建一个指向该配置的集合。我希望该集合有 2 个碎片和 2 个副本。
- solr.xml 在哪里。如果它应该在 Zookeeper 中,我该如何上传它
- 如何在 Zookeeper 中看到配置已上传?
我知道这个问题可能是重复的。我已经阅读了几篇文章,但无法提出解决方案。请帮忙。
好吧,我知道如何设置了。请注意,我已经从不同的站点阅读了这些步骤并逐步收集到这里:
1。设置动物园管理员:
这用于将 collection 特定配置文件存储在中央 space 中并用名称映射它。稍后我们可以使用这个名称来创建指向这个配置的 collection。此配置与您在以下文件夹中找到的配置相同:
solr-7.4.0\server\solr\configsets\sample_techproducts_configs\conf
1.1 下载最新的Zookeeper。我用过3.4.12
1.2 解压下载的压缩文件并将conf/zoo_sample.cfg 复制到conf/zoo.cfg
1.3修改zoo.cfg:
1.3.1 将dataDir 更改为要保存所有集群配置数据的目录。
dataDir=/var/zookeeper/data
1.3.2 添加所有Zookeeper 服务器的信息:我只使用了1 个ZooKeeper 服务器,所以这不是必需的。如果您想添加更多服务器,请通过以下链接:
1.3.3 Start ZooKeeper using (after going to zookeeper-3.4.12/):
./bin/zkServer.sh start-foreground conf/zoo.cfg
或
./bin/zkServer.sh start conf/zoo.cfg
注意:您可以使用以下命令停止 ZooKeeper:
bin/zkServer.sh stop
1.3.4 ZooKeeper 状态:
点击下方:
bin/zkServer.sh status
或者执行 telnet localhost 2181
并在连接后点击 stats
。
2。设置 Solr
2.1 下载Solr
2.2 从 .tar 文件中提取 install_solr_service.sh。 Solr 包含一个服务安装脚本 (bin/install_solr_service.sh) 以帮助您将 Solr 作为服务安装在 Linux 上。更多信息 click here.
tar -xzf solr-7.4.0.tgz solr-7.4.0/bin/install_solr_service.sh --strip-components=2
2.3 使用上述脚本将 Solr 安装为服务:
sudo bash ./install_solr_service.sh solr-7.4.0.tgz
这也将提取 solr-7.4.0.tgz 到 /opt/solr
2.4 转到 /opt/solr
并执行以下操作:
mkdir solr/server/solr2
mkdir solr/server/solr3
mkdir solr/server/solr4
cp solr/server/solr/solr.xml solr/server/solr2
cp solr/server/solr/solr.xml solr/server/solr3
cp solr/server/solr/solr.xml solr/server/solr4
2.5 更改 solr.xml 中的码头端口。对上述步骤中提到的所有 3 solr.xml 执行此操作:
vi solr/server/solr2/solr.xml
搜索端口 8983 并将其更改为 8984(对于 solr2),将其更改为 8985(对于 solr3),将其更改为 8986(对于 solr4)
2.6 在 8983
停止 Solr 运行ning
root@dev-base:/opt/solr/bin# ./solr stop -p 8983
2.7 Start 所有的 solr 实例:
root@dev-base:/opt/solr# bin/solr start -c -s server/solr -p 8983 -z localhost:2181 -noprompt -force
root@dev-base:/opt/solr# bin/solr start -c -s server/solr2 -p 8984 -z localhost:2181 -noprompt -force
root@dev-base:/opt/solr# bin/solr start -c -s server/solr3 -p 8985 -z localhost:2181 -noprompt -force
root@dev-base:/opt/solr# bin/solr start -c -s server/solr4 -p 8986 -z localhost:2181 -noprompt -force
注意:运行出于安全原因,不建议将 solr 作为根目录。
2.8 查看 Solr 状态:
root@dev-base:/opt/solr# bin/solr status
3 进行自定义配置
3.1 将 conf
目录从 solr-7.4.0\server\solr\configsets\sample_techproducts_configs\conf
复制到另一个位置 (In my case it is /media/sf_VM/Dump/new/conf )
.
3.2 更改 conf
中的 managed-schema
文件以指定您正在使用的字段。
4 将配置上传到 ZooKeeper:
root@dev-base:/opt/solr# bin/solr zk -z localhost:2181 upconfig -d /media/sf_VM/Dump/new/conf -n myConf6
我上传的配置名称是myConf6
5 使用此自定义配置创建 Solr Collection
root@dev-base:/opt/solr# bin/solr create -c myNewCollection -n myConf6 -shards 2 -replicationFactor 2 -force
6 索引数据使用 POST API 使用 Json
URL: http://localhost:8983/solr/myNewCollection/update
方法:POST
正文:
[{
"_id": "99999999999999999999",
"author": [
"New Inserted 9000"
],
"authorLastName": [
"New Inserted 9000"
],
"impn": "New Inserted 9000",
"isbn10": "9999999999",
"isbn13": "9999999999999",
"title": "New Inserted 9000",
"publisher": "New Inserted 9000",
"sales_a": 5.0,
"sales_t": 5.0,
"haveImage": 1,
"pages": "76",
"image": "http://ip.ip.com/is/image/",
"format": "Paper",
"mtc_id": "99999999999",
"subjects" : [
"9000"
]
"rating": 0,
"description_long": "Snahashis call me in your marriage."
}
删除 Zookeeper 中的一个配置:
如果要删除已上传到 ZooKeeper 运行 的 old/wrong 配置,请使用以下命令:
./server/scripts/cloud-scripts/zkcli.sh -cmd clear -z "<ZK_HOST>:<ZK_PORT>" /configs/AAA
配置路径为/configs/< name of the configset >
要删除特定文件:
zkcli.sh --zkhost <ZK_HOST>:<ZK_PORT> -cmd clear /configs/<MY_COLLECTION>/solrconfig.xml
上传更新文件:
zkcli.sh --zkhost <ZK_HOST>:<ZK_PORT> -cmd putfile /configs/<MY_COLLECTION>/solrconfig.xml /<MY_UPDATED_FILE_LOCAL_FOLDER>/solrconfig.xml
然后我们需要重新tart solr节点。
删除 Collection 通过 API:
- 首先删除在此collection上创建的别名(如果有的话)
http://localhost:8983/solr/admin/collections?action=DELETEALIAS&name=aliasName
- 删除Collection:
http://localhost:8983/solr/admin/collections?action=DELETE&name=collectionName
我必须执行以下操作:
- 我必须在 2 servers/nodes. 上部署 Solr
- 在另一台服务器上部署 Zookeeper。
- 将自定义配置上传到 Zookeeper
- 创建一个包含 2 个分片和 2 个副本的自定义集合
Solr 7.4.0 和 Zookeeper 版本:3.4.12
我做了以下事情:
设置动物园管理员:
- 创建了一个 Zookeeper 数据文件夹并制作了一个 zoo.conf 并将 dataDir 放在那里。
- 使用
./zkServer.sh start
启动了动物园管理员
设置Solr:
使用以下方法启动 Solr:
./solr start -cloud -s /home/demo/LocalFolder/Downloads/SolrHome -p 8987 -z localhost:2181
尝试使用以下方式在 Zookeeper 中上传配置:
./solr create -c mycollection -d /media/sf_VM/Dump/conf
它给了我一个例外:
Caused by: javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:341)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:323)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
... 17 more
</pre>
我搜索了很多页面并查看了 Solr 教程,但它们使用的是默认示例。我只是没有任何一步一步的想法
- 如何在 Zookeeper 中上传配置?
- 然后我需要做些什么来创建一个指向该配置的集合。我希望该集合有 2 个碎片和 2 个副本。
- solr.xml 在哪里。如果它应该在 Zookeeper 中,我该如何上传它
- 如何在 Zookeeper 中看到配置已上传?
我知道这个问题可能是重复的。我已经阅读了几篇文章,但无法提出解决方案。请帮忙。
好吧,我知道如何设置了。请注意,我已经从不同的站点阅读了这些步骤并逐步收集到这里:
1。设置动物园管理员:
这用于将 collection 特定配置文件存储在中央 space 中并用名称映射它。稍后我们可以使用这个名称来创建指向这个配置的 collection。此配置与您在以下文件夹中找到的配置相同:
solr-7.4.0\server\solr\configsets\sample_techproducts_configs\conf
1.1 下载最新的Zookeeper。我用过3.4.12
1.2 解压下载的压缩文件并将conf/zoo_sample.cfg 复制到conf/zoo.cfg
1.3修改zoo.cfg:
1.3.1 将dataDir 更改为要保存所有集群配置数据的目录。
dataDir=/var/zookeeper/data
1.3.2 添加所有Zookeeper 服务器的信息:我只使用了1 个ZooKeeper 服务器,所以这不是必需的。如果您想添加更多服务器,请通过以下链接:
1.3.3 Start ZooKeeper using (after going to zookeeper-3.4.12/):
./bin/zkServer.sh start-foreground conf/zoo.cfg
或
./bin/zkServer.sh start conf/zoo.cfg
注意:您可以使用以下命令停止 ZooKeeper:
bin/zkServer.sh stop
1.3.4 ZooKeeper 状态:
点击下方:
bin/zkServer.sh status
或者执行 telnet localhost 2181
并在连接后点击 stats
。
2。设置 Solr
2.1 下载Solr
2.2 从 .tar 文件中提取 install_solr_service.sh。 Solr 包含一个服务安装脚本 (bin/install_solr_service.sh) 以帮助您将 Solr 作为服务安装在 Linux 上。更多信息 click here.
tar -xzf solr-7.4.0.tgz solr-7.4.0/bin/install_solr_service.sh --strip-components=2
2.3 使用上述脚本将 Solr 安装为服务:
sudo bash ./install_solr_service.sh solr-7.4.0.tgz
这也将提取 solr-7.4.0.tgz 到 /opt/solr
2.4 转到 /opt/solr
并执行以下操作:
mkdir solr/server/solr2
mkdir solr/server/solr3
mkdir solr/server/solr4
cp solr/server/solr/solr.xml solr/server/solr2
cp solr/server/solr/solr.xml solr/server/solr3
cp solr/server/solr/solr.xml solr/server/solr4
2.5 更改 solr.xml 中的码头端口。对上述步骤中提到的所有 3 solr.xml 执行此操作:
vi solr/server/solr2/solr.xml
搜索端口 8983 并将其更改为 8984(对于 solr2),将其更改为 8985(对于 solr3),将其更改为 8986(对于 solr4)
2.6 在 8983
停止 Solr 运行ningroot@dev-base:/opt/solr/bin# ./solr stop -p 8983
2.7 Start 所有的 solr 实例:
root@dev-base:/opt/solr# bin/solr start -c -s server/solr -p 8983 -z localhost:2181 -noprompt -force
root@dev-base:/opt/solr# bin/solr start -c -s server/solr2 -p 8984 -z localhost:2181 -noprompt -force
root@dev-base:/opt/solr# bin/solr start -c -s server/solr3 -p 8985 -z localhost:2181 -noprompt -force
root@dev-base:/opt/solr# bin/solr start -c -s server/solr4 -p 8986 -z localhost:2181 -noprompt -force
注意:运行出于安全原因,不建议将 solr 作为根目录。
2.8 查看 Solr 状态:
root@dev-base:/opt/solr# bin/solr status
3 进行自定义配置
3.1 将 conf
目录从 solr-7.4.0\server\solr\configsets\sample_techproducts_configs\conf
复制到另一个位置 (In my case it is /media/sf_VM/Dump/new/conf )
.
3.2 更改 conf
中的 managed-schema
文件以指定您正在使用的字段。
4 将配置上传到 ZooKeeper:
root@dev-base:/opt/solr# bin/solr zk -z localhost:2181 upconfig -d /media/sf_VM/Dump/new/conf -n myConf6
我上传的配置名称是myConf6
5 使用此自定义配置创建 Solr Collection
root@dev-base:/opt/solr# bin/solr create -c myNewCollection -n myConf6 -shards 2 -replicationFactor 2 -force
6 索引数据使用 POST API 使用 Json
URL: http://localhost:8983/solr/myNewCollection/update
方法:POST
正文:
[{
"_id": "99999999999999999999",
"author": [
"New Inserted 9000"
],
"authorLastName": [
"New Inserted 9000"
],
"impn": "New Inserted 9000",
"isbn10": "9999999999",
"isbn13": "9999999999999",
"title": "New Inserted 9000",
"publisher": "New Inserted 9000",
"sales_a": 5.0,
"sales_t": 5.0,
"haveImage": 1,
"pages": "76",
"image": "http://ip.ip.com/is/image/",
"format": "Paper",
"mtc_id": "99999999999",
"subjects" : [
"9000"
]
"rating": 0,
"description_long": "Snahashis call me in your marriage."
}
删除 Zookeeper 中的一个配置:
如果要删除已上传到 ZooKeeper 运行 的 old/wrong 配置,请使用以下命令:
./server/scripts/cloud-scripts/zkcli.sh -cmd clear -z "<ZK_HOST>:<ZK_PORT>" /configs/AAA
配置路径为/configs/< name of the configset >
要删除特定文件:
zkcli.sh --zkhost <ZK_HOST>:<ZK_PORT> -cmd clear /configs/<MY_COLLECTION>/solrconfig.xml
上传更新文件:
zkcli.sh --zkhost <ZK_HOST>:<ZK_PORT> -cmd putfile /configs/<MY_COLLECTION>/solrconfig.xml /<MY_UPDATED_FILE_LOCAL_FOLDER>/solrconfig.xml
然后我们需要重新tart solr节点。
删除 Collection 通过 API:
- 首先删除在此collection上创建的别名(如果有的话)
http://localhost:8983/solr/admin/collections?action=DELETEALIAS&name=aliasName
- 删除Collection:
http://localhost:8983/solr/admin/collections?action=DELETE&name=collectionName