Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从DSE 5.0.9迁移到Apache Cassandra 3.11.3时出现的问题_Cassandra - Fatal编程技术网

从DSE 5.0.9迁移到Apache Cassandra 3.11.3时出现的问题

从DSE 5.0.9迁移到Apache Cassandra 3.11.3时出现的问题,cassandra,Cassandra,我们正在考虑从DSE 5.0.9迁移到Apache Cassandra 3.11.3。我们已经走了相当远,并设法解决了各种问题(包括Everywhere策略一),但在system.local表中遇到了问题 到目前为止,迁移/升级仅在一台服务器上完成。在这一节点上启动Cassandra 3.11.3时,加载system.local时出现错误: INFO [main] 2018-12-07 10:56:12,963 ColumnFamilyStore.java:411 - Initializing

我们正在考虑从DSE 5.0.9迁移到Apache Cassandra 3.11.3。我们已经走了相当远,并设法解决了各种问题(包括Everywhere策略一),但在system.local表中遇到了问题

到目前为止,迁移/升级仅在一台服务器上完成。在这一节点上启动Cassandra 3.11.3时,加载system.local时出现错误:

INFO [main] 2018-12-07 10:56:12,963 ColumnFamilyStore.java:411 - Initializing system.local
INFO [SSTableBatchOpen:1] 2018-12-07 10:56:12,993 BufferPool.java:230 - Global buffer pool is enabled, when pool is exhausted (max is 512.000MiB) it will allocate on heap
ERROR [SSTableBatchOpen:1] 2018-12-07 10:56:13,013 DebuggableThreadPoolExecutor.java:239 - Error in ThreadPoolExecutor
java.lang.RuntimeException: Unknown column server_id during deserialization
at org.apache.cassandra.db.SerializationHeader$Component.toHeader(SerializationHeader.java:321) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:522) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:385) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.io.sstable.format.SSTableReader$3.run(SSTableReader.java:570) ~[apache-cassandra-3.11.3.jar:3.11.3]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_172]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172]
at org.apache.cassandra.concurrent.NamedThreadFactory.lambda$threadLocalDeallocator$0(NamedThreadFactory.java:81) [apache-cassandra-3.11.3.jar:3.11.3]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_172]
看看我们这里的另一个Cassandra 3.11.3集群,表中不存在系统id。但是,在该表的DSE 5.0.9版本中确实如此。 在无法加载system.local的情况下,我们最终会收到以下警告:

WARN [main] 2018-12-06 10:43:57,241 SystemKeyspace.java:1087 - No host ID found, created a0bb8c11-2864-4d58-9c0c-59b97b16c48e (Note: This should happen exactly once per node).
(由于system.local未加载,因此没有主机ID) 这将导致以下错误:

ERROR [main] 2018-12-06 10:43:58,295 CassandraDaemon.java:708 - Exception encountered during startup
java.lang.RuntimeException: A node with address dubdc1-oatjeeramp2dmcassandra-04/10.109.158.254 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:558) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:804) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:664) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:613) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:379) [apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:602) [apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:691) [apache-cassandra-3.11.3.jar:3.11.3]
此时system.local已被覆盖,新的主机ID值已存储,Cassandra已关闭

-Dcassandra.replace_node=
添加到cassandra-env.sh会导致一个错误,表明该节点已启动,因此无法使用。我知道我可以通过删除所有数据来解决这个问题,但我真的不想这么做

恢复system.local的备份将允许我们再次启动DSE。目前,该节点正在重新运行DSE5.0.9

以前是否有人见过此问题,您对如何解决此问题有何建议?

步骤:

  • 从DSE复制到OSS C*的精确可用配置
  • 更改了几个键空间/表:

    alter keyspace dse_system with replication={'class':'NetworkTopologyStrategy','DC3':'3'}//DC1,DC2=OSS C*

    //如果您使用的是spark 更改表cfs_archive.sblocks with compression={'class':'org.apache.cassandra.db.compression.SizeTieredCompactionStrategy','max_threshold':'32','min_threshold':'4'

    更改表cfs.sblocks with compression={'class':'org.apache.cassandra.db.compression.SizeTieredCompactionStrategy','max_threshold':'32','min_threshold':'4'}

  • 自动引导:错误 JVM_OPTS=“$JVM_OPTS-Dcassandra.allow_unsafe_replace=true” JVM_OPTS=“$JVM_OPTS-Dcassandra.replace_address=

  • 小心,在低环境中测试所有东西。 请通过此链接了解更多信息:

    server\u id:是DSE的一部分。您可以忽略该错误消息,也可以暂时将DSE-core-5.0.13.jar从../lib/复制到Cassandra OSS/lib。我不能忽略该错误。该错误会停止加载system.local,这会停止实例了解其主机id,从而停止其加入群集。第3点看起来很有希望。我认为这是我错过的一个C*魔法(-Dcassandra.allow_unsafe_replace=true)。谢谢。我会告诉你我的进展。