JanusGraph 1.0.0无法连接多节点Cassandra 4.1.3集群求助
解决JanusGraph连接多节点Cassandra集群时
system_properties表不存在的异常 问题背景
搭建了3节点Cassandra 4.1.3集群,各节点cassandra.yaml配置如下:
cluster_name: 'cassandra_cluster' listen_address: <node_IP> rpc_address: <node_IP> endpoint_snitch: GossipingPropertyFileSnitch
种子节点额外配置:
seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: - seeds: "<seedNode_IP>"
使用JanusGraph 1.0.0连接集群,配置如下:
storage.backend=cql storage.hostname=<node1_IP>,<node2_IP>,<node3_IP> cache.db-cache=true cache.db-cache-size=0.5 ids.block-size=30000000 storage.batch-loading=true storage.port=9042 storage.cql.local-datacenter=dc1 storage.cql.replication-strategy-class=NetworkTopologyStrategy storage.cql.replication-strategy-options=dc1,3
连接时抛出异常:
Exception in thread "main" com.datastax.oss.driver.api.core.servererrors.InvalidQueryException: table system_properties does not exist at com.datastax.oss.driver.api.core.servererrors.InvalidQueryException.copy(InvalidQueryException.java:48) at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:149) at com.datastax.oss.driver.internal.core.cql.CqlPrepareSyncProcessor.process(CqlPrepareSyncProcessor.java:59) at com.datastax.oss.driver.internal.core.cql.CqlPrepareSyncProcessor.process(CqlPrepareSyncProcessor.java:31) at com.datastax.oss.driver.internal.core.session.DefaultSession.execute(DefaultSession.java:230) at com.datastax.oss.driver.api.core.cql.SyncCqlSession.prepare(SyncCqlSession.java:206) at org.janusgraph.diskstorage.cql.CQLKeyColumnValueStore.<init>(CQLKeyColumnValueStore.java:217) at org.janusgraph.diskstorage.cql.CQLStoreManager.lambda$openDatabase$7(CQLStoreManager.java:308) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) at org.janusgraph.diskstorage.cql.CQLStoreManager.openDatabase(CQLStoreManager.java:308) at org.janusgraph.diskstorage.keycolumnvalue.KeyColumnValueStoreManager.openDatabase(KeyColumnValueStoreManager.java:43) at org.janusgraph.diskstorage.configuration.backend.builder.KCVSConfigurationBuilder.buildStandaloneGlobalConfiguration(KCVSConfigurationBuilder.java:51) at org.janusgraph.diskstorage.configuration.builder.ReadConfigurationBuilder.buildGlobalConfiguration(ReadConfigurationBuilder.java:71) at org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:67) at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:176) at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:147) at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:137) at org.janusgraph.core.JanusGraphFactory$Builder.open(JanusGraphFactory.java:277) at causalai.knowledgegraph.JanusGraphClient.main(JanusGraphClient.java:57)
将Cassandra改为单节点集群,并移除JanusGraph配置中的storage.cql.replication-strategy-class和storage.cql.replication-strategy-options后,JanusGraph可正常运行。
解决方案
1. 对齐Cassandra数据中心配置
检查所有Cassandra节点的cassandra-rackdc.properties文件,确保数据中心名称与JanusGraph配置的dc1一致:
dc=dc1 rack=rack1
修改完成后,重启所有Cassandra节点,确保集群gossip同步拓扑信息。
2. 修正JanusGraph复制策略选项格式
storage.cql.replication-strategy-options的格式错误,需将逗号改为冒号分隔数据中心与副本数:
storage.cql.replication-strategy-options=dc1:3
3. 手动创建JanusGraph键空间(可选)
若上述步骤后仍报错,可手动登录Cassandra的CQL Shell(cqlsh <seedNode_IP>),创建JanusGraph默认使用的键空间:
CREATE KEYSPACE janusgraph WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': 3} AND durable_writes = true;
完成后再启动JanusGraph实例。
原因分析
- 数据中心名称不匹配:JanusGraph使用
NetworkTopologyStrategy时,若Cassandra节点实际数据中心与配置的local-datacenter不一致,会导致键空间创建失败,缺失system_properties表。 - 复制策略格式错误:逗号分隔的配置会被Cassandra判定为无效,导致键空间无法正确初始化,JanusGraph启动时找不到所需表。
- 多节点集群拓扑同步不完整:若Cassandra集群的gossip信息未完全同步,JanusGraph自动创建键空间时无法获取正确的集群拓扑,进而导致表创建失败。
内容的提问来源于stack exchange,提问作者Naveen Raj
相关产品推荐
相关产品推荐

