我正在使用嵌入式Cassandra.当我关闭并重新启动我的Cassandra服务数据时会丢失.我认为正常的数据没有正确刷入磁盘.所以我尝试使用nodetool手动刷新数据并检查数据是否可用.但是nodetool似乎不适用于嵌入式Cassandra服务.我收到以下错误:
c:\vijay\cassandra\bin>nodetool -host 192.168.2.86 -p 7199 drain
Starting NodeTool
Failed to connect to '192.168.2.86:7199': Connection refused: connect
我尝试设置jmx属性仍然是我收到错误.我在代码中添加了以下行:
System.setProperty("com.sun.management.jmxremote", "true");
System.setProperty("com.sun.management.jmxremote.port", "7197");
System.setProperty("com.sun.management.jmxremote.authenticate", "false");
System.setProperty("com.sun.management.jmxremote.ssl", "false");
System.setProperty("java.rmi.server.hostname", "my ip");
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法在不使用nodetool的情况下手动将数据刷新到Cassandra?
编辑1:
经过几个小时的尝试后,我现在能够运行nodetool(而不是将jmx配置添加到我添加到Eclipse调试配置的代码中,并且它有效).我现在运行drain命令将数据正确刷新到磁盘.所以现在我的问题是:为什么数据没有正确刷新?每当我重新启动Cassandra服务时,最近的更改都消失了.
我正在使用lucene版本4.4与这些分析仪:
worddelimeter, patternFilter, synonyms, lowercase,
stopwords, kStemFilter, shingle, trimfilter.
Run Code Online (Sandbox Code Playgroud)
分析仪按我使用它们的顺序列出.当我尝试添加文档时,我得到以下异常:
startOffset must be non-negative, and endOffset must be >= startOffset,
startOffset=37571,endOffset=37569
Run Code Online (Sandbox Code Playgroud)
仅对特定文件发生此异常.但是当我改变顺序并放置stopwords过滤器之前worddelimeter它工作正常.但这不是正确的做法!
为什么会这样?在什么情况下过滤器会以某种方式改变数据以导致异常?
使用solr 4.10.3,我通过java中的嵌入式jetty服务器启动solr.我试图用2个分片(领导者)配置solrcloud.我有一个外部的zookeeper设置,我指向zookeeper实例,同时启动这样的solr.
System.setProperty("zkHost", "192.168.2.21:2111");
System.setProperty("numShards", "2");
System.setProperty("collection.configName", "configuration1");
System.setProperty("bootstrap_confdir","/conf/zooconf");
Run Code Online (Sandbox Code Playgroud)
我有两个运行的solr实例,一个在8983端口,另一个在8984.问题是,我不确定两个solr节点是否都被识别为leader.由于我通过java启动solr,我无法在solr管理界面中查看状态.
以下是我的solr.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<solr>
<solrcloud>
<str name="host">192.168.2.21</str>
<int name="hostPort">${hostPort:8984}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${solr.zkclienttimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:120000}</int>
<int name="connTimeout">${connTimeout:15000}</int>
</shardHandlerFactory>
</solr>
Run Code Online (Sandbox Code Playgroud)
在main方法中,我连接到其中一个solr实例(8983)并使用以下代码片段创建核心.
CloudSolrServer server = new CloudSolrServer("192.168.2.21:2111");
server.setZkConnectTimeout(15*60*1000);
server.setZkClientTimeout(15*60*1000);
server.setParser(new BinaryResponseParser());
server.setRequestWriter(new BinaryRequestWriter());
server.setDefaultCollection("C1");
Create adminRequest = new Create();
adminRequest.setAction(CoreAdminAction.CREATE);
adminRequest.setCoreName("C1");
adminRequest.setCollection("C1");
adminRequest.setCollectionConfigName("configuration1");
adminRequest.setDataDir("c:\\setup\somelocation");
adminRequest.setInstanceDir("c:\\setup\somelocation\C1");
adminRequest.process(solrServer);
Run Code Online (Sandbox Code Playgroud)
当我执行此操作时,C1仅在一个solr实例中创建(8983).(不是应该在两个solr实例的数据目录中创建的核心.?).在添加文档时,抛出以下异常.
等待4000毫秒后没有找到注册的领导者,收集:c1切片:shard2
这是添加文档时的clusterState:
live nodes:[192.168.2.21:8984_solr, 192.168.2.21:8983_solr] collections: {
C1=DocCollection(C1)= {
"shards":{
"shard1":{
"range":"80000000-ffffffff",
"state":"active",
"replicas":{
"core_node1":{ …Run Code Online (Sandbox Code Playgroud)