0

Cassandra 在 3 个数据中心(dc1、dc2 和 dc3)中设置,形成一个集群

在 dc1 上运行 Java 应用程序。dc1 应用程序具有指向 dc1 的 Cassandra 连接器(dc1 中的 cassandra ips 单独提供给应用程序)

关闭 dc1 cassandra 节点应用程序会在应用程序中引发异常,例如

尝试查询的所有主机都失败(未尝试任何主机)

更多信息:

cassandra-driver-core-3.0.8.jar
netty-3.10.5.Final.jar
netty-buffer-4.0.37.Final.jar
netty-codec-4.0.37.Final.jar
netty-common-4.0.37.Final.jar
netty-handler-4.0.37.Final.jar
netty-transport-4.0.37.Final.jar

Keyspace : Network topology
Replication : dc1:2, dc2:2, dc3:2
Cassandra Version : 3.11.4
4

1 回答 1

0

以下是我在连接和 Cassandra 中发现的一些内容(顺便说一句,我相信 Cassandra 拥有我在过去 25 年中使用过的所有数据库中最好的 HA 配置之一)。

1) 确保您拥有连接连接中指定的所有组件。这是一些连接组件的示例,但也有其他的(也许您已经这样做了):

 cluster = Cluster.builder()
    .addContactPoints(nodes.split(","))
    .withCredentials(username, password)
    .withPoolingOptions(poolingOptions)
    .withLoadBalancingPolicy(
            new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder()
                    .withLocalDc("MYLOCALDC")
                    .withUsedHostsPerRemoteDc(1)
                    .allowRemoteDCsForLocalConsistencyLevel()
                    .build()
               )
    ).build();

2) 除非您“工作”的整个 DC 都关闭了,否则您可能会收到错误消息。Cassandra 不会故障转移到备用 DC,除非 DC 中的每个节点都已关闭。如果少于所有节点都关闭并且您的客户端无法满足客户端 CL 设置,您将收到错误消息。我实际上希望,当我前一段时间进行测试时,如果您无法在本地 DC 中实现客户端 CL(即使当前 DC 中的某些节点已启动)而备用 DC 可以,它会自动故障转移,但事实并非如此(自从我上次测试以来)。

也许这有帮助?

-吉姆

于 2019-04-12T17:58:54.480 回答