Solr 4.6 | Setting Up an External ZooKeeper Ensemble | upgrade solr to Solr4.6

2019-03-27 01:03|来源: 网路

4.1----->4.6

Solr从4.1到4.6还是有不少改变的。。。

一、solr.xml

  • 在4.3版本开始Solr维护这两套不同格式的solr.xml,旧的遗留格式和自动发现模式,5.0以后会废除遗留格式而只支持自动发现;简单的说自动发现就是把原有格式里对core的定义放到了core.properties里
  • 在4.5版本开始Solr支持把solr.xml交给ZooKeeper维护

 

关于solr.xml以及core.properties的格式参照https://cwiki.apache.org/confluence/display/solr/Solr+Cores+and+solr.xml

https://cwiki.apache.org/confluence/display/solr/Format+of+solr.xml

http://wiki.apache.org/solr/Solr.xml%204.4%20and%20beyond

"Allow solr.xml to be stored in ZooKeeper" refer to https://issues.apache.org/jira/browse/SOLR-4718

 

https://cwiki.apache.org/confluence/display/solr/Command+Line+Utilities#CommandLineUtilities-Scripts

http://blog.csdn.net/zhyh1986/article/details/9856817

 

对于一些配置参数的理解

host/hostContext/hostPort和以前一样,如果设置不对可能在Cloud页面的链接不能进入

可以把zkHost配置到这里吗

 

Errors

1.about sharedLib

config : <lib dir="./lib" /> 

 lib目录位于$SOLR_HOME下

WARN [org.apache.solr.core.SolrResourceLoader] - <Can't find (or read) directory to add to classloader: ./lib (resolved as: /home/andy/work/solr_home/solr1/collection_user/./lib).>

ERROR :logs like

ERROR - 2013-05-22 22:41:16.939; org.apache.solr.common.SolrException; null:java.lang.NoClassDefFoundError: org/apache/lucene/analysis/icu/segmentation/ICUTokenizer
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2413)
        at java.lang.Class.getConstructor0(Class.java:2723)
        at java.lang.Class.getConstructor(Class.java:1676)
        at org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:550)
        at org.apache.solr.schema.FieldTypePluginLoader$2.create(FieldTypePluginLoader.java:342)
        at org.apache.solr.schema.FieldTypePluginLoader$2.create(FieldTypePluginLoader.java:335)
        at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
        at org.apache.solr.schema.FieldTypePluginLoader.readAnalyzer(FieldTypePluginLoader.java:362)
        at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:86)
        at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:43)
        at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
        at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:467)
        at org.apache.solr.schema.IndexSchema.<init>(IndexSchema.java:164)
        at org.apache.solr.schema.IndexSchemaFactory.create(IndexSchemaFactory.java:55)
        at org.apache.solr.schema.IndexSchemaFactory.buildIndexSchema(IndexSchemaFactory.java:69)
        at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:727)
        at org.apache.solr.core.CoreContainer.create(CoreContainer.java:765)
        at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:426)
        at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:421)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.analysis.icu.segmentation.ICUTokenizer
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:789)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)

对于WARN我把配置改为<lib dir="../lib" /> ,这个警告就没有了,这说明:在以前的版本(至少是4.1)中,当前目录是指$SOLR_HOME下;在新版本中,当前目录是指$SOLR_HOME/COLLECTION_CURRENT下

对于ERROR我花了不少时间,各种方法都试过都不行,后来仔细阅读日志文件发现发现不同于版本的特殊情况,对$SOLR_HOME/lib下的jar包被CLASSLOADER加载了3次(我在$SOLR_HOME下只有一个COLLECTION),那基本可以确定是这个原因引起的,但是如何不让solr重复加载呢?后来在jira上发现别人提过https://issues.apache.org/jira/browse/SOLR-4852,在新的版本中 如果sharedLib为$SOLR_HOME/lib,那么必须在你的solr.xml里去掉这个配置项,并且删掉所有其他地方对$SOLR_HOME/lib的指向,因为新版solr不需指定自动扫描$SOLR_HOME/lib下的jar包,如果你指定几次就会多加载几次,那么就会导致当前CLASSLOADER里的.class可能不是你所需要的。其实这样有些费解,特别是当你做Solr升级的时候,希望以后有所改进

 

总结:

新版本对xml的配置文件解析更严格,以前schema.xml中有小错误可能不会报错,现在会导致collection启动失败

新版本Solr索引文件名里还含有*_Lucene41_* 开始以为有问题,仔细看LOG发现 codec=Lucene46

Solr4.4开始支持把索引存到HDFS(https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS)

 

 

http://www.tuicool.com/articles/n63y6r 


转自:http://www.cnblogs.com/ukouryou/articles/3492895

相关问答

更多
  • 首先,您应该为每个zookeeper实例分别设置数据目录。 在数据目录中创建一个名为myid的文件。 在那些文件中,只根据服务器写入1,2或3(例如,对于server1写入1)。 请点击这里 然后开始你的动物园管理员合奏。 First of all you should have separate data directory for each zookeeper instance. Inside the data directory create a file called myid. In those ...
  • Solr5 +我们可以使用configSets使用通用配置文件 可以在configsets目录中一次定义公共配置文件。 例如:/ solr / configsets / my_configs / conf /和core.property用于单个核心,如下所示: 在core1中:name = core1 configSet = my_configs schema = schema_my.xml config = solrconfig_my.xml 在core2中:name = core2 configSet ...
  • 由于它是Solr的一部分,它肯定会出现,但我们不会就未来DSE版本的时间或具体内容提供任何指导。 It's certainly coming since it's part of Solr, but we don't give any guidance as to the timing or specific content of future DSE releases.
  • 我用过: CloudSolrServer solrServer; ... solrServer.getZkStateReader().getClusterState(); ... I used that: CloudSolrServer solrServer; ... solrServer.getZkStateReader().getClusterState(); ...
  • 嗯,我认为你的想法更适合经典的主/从架构[1]。 在SolrCloud中,您没有这样的“专用”角色(索引器和搜索器),因为每个节点(可能)都这样做。 因此,在实例之间使用具有不同角色的云是没有意义的。 使用经典复制,您将获得完全相同的场景:一个(离线)索引器,可以复制几个搜索器上的索引更改,可以在循环模式下查询以实现负载平衡。 [1] https://wiki.apache.org/solr/SolrReplication Mmmm I think your idea fits better with a ...
  • 单个节点 Solr实例通常在包含schema.xml , stopwords.txt等文件的conf文件夹中使用它自己的配置文件。但在Solr 云上下文中, 集合是具有一组核心的逻辑索引。 这些核心组需要集中配置( 属于同一集合的核心之间共享相同的配置 )。 ZooKeeper是一种集中式服务,用于维护分布式系统中的配置信息。 您可以上载,下载和编辑配置文件,以便属于同一集合的 所有核心获得相同的配置集。 您可以在此处阅读有关Solr云配置管理的更多信息 A Single node Solr instanc ...
  • 您可以在Solr和Kafka之间共享相同的Zookeeper集合。 Solr和Kafka不会向Zookeeper添加大量数据,如果你在它们之间共享相同的集合,它就没问题。 您可以在相同的3个主机上运行多个Zookeeper,也可以在同一个3个主机中托管多个Zookeeper集合。 但这对你没什么好处。 You may share the same Zookeeper ensemble between Solr and Kafka. Solr and Kafka don't add a lot of data ...
  • 这可能是由于Solr在启动时检测到自己的错误IP,因此在Solr集群中注册节点时使用了错误的IP。 通过向嵌入式Jetty容器提供要使用的IP (或者仅用于节点内通信,使用SOLR_HOST应该足够),可以告诉Solr要使用哪个IP 。 有人问我如何确保Solr完全暴露在服务器的内部IP地址上,所以我认为这些信息会更普遍。 在Linux上,编辑solr.in.sh文件,找到名为SOLR_HOST的属性(默认情况下它被注释掉)并将其值设置为您希望Solr侦听请求的IP地址或主机名。 SOLR_HOST="19 ...
  • 您可以使用相同的Zookeeper集合来处理多个Solr或SolrCloud实例。 但是,数据必须分开。 这可能(最好)通过使用Zookeeper中的“chroot”功能来完成。 基本上,当你在Zookeeper中为你的Solr实例创建“空间”时,你附加一个/ some_thing_unique并将其保存在Solr中相应的配置文件中 - 那么你应该没有问题。 我没有经历过从一个Zookeeper到另一个Zookeeper的现有Solr实例 - 我猜你必须把Solr关闭,更改配置,设置集合等等......在Z ...
  • 在过去的几个月里,我花了这么多时间与SOLR合作,最终我想到了这一点。 让我们分解一下我所看到的问题。 我正在将配置上传到zookeeper,在solr中创建一个集合,并将两者连接在一起。 然后我会改变架构 - 再次上传它,重新加载solr核心 - 什么都不会发生! 这是其核心 - 用户错误和对一个主要功能的误解。 我在SOLR中使用托管模式 。 这意味着我可以在较新版本的SOLR中利用模式API。 对于任何感兴趣的人 - 当您使用托管架构时 - SOLR实际上会复制您编辑的架构 - 而这正是更改的地方。 ...