在3个数据中心(dc1,dc2和dc3)中建立Cassandra,形成一个集群
在dc1上运行Java应用程序。 dc1应用程序具有指向dc1的Cassandra连接器(仅将dc1中的cassandra的IP地址赋予该应用程序)
关闭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
答案 0 :(得分:0)
以下是我从connections和Cassandra中发现的一些信息(以及BTW,我相信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都已关闭,否则您可能会收到错误消息。除非DC中的每个节点都关闭,否则Cassandra不会故障转移到备用DC。如果少于所有节点都关闭,并且您的客户端无法满足客户端CL设置,则会收到错误消息。我实际上是希望,当我进行一段时间的测试时,如果您无法在本地DC中实现客户端CL(即使当前DC中的某些节点处于运行状态),而备用DC能够自动进行故障转移,但是情况并非如此(自从我上次测试以来)。
也许有帮助?
-吉姆