能够写入特定的cassandra节点

时间:2014-04-02 13:29:33

标签: cassandra datastax datastax-java-driver

是否有可能使用datastax驱动程序写入特定节点?

例如,我在数据中心1中有三个节点,在数据中心2中有三个节点。

现有

如果我使用其中任何一个作为种子构建群集,则数据流java驱动程序将检测到所有节点。因此,在这种情况下,如果我使用驱动程序插入数据,它将自动选择其中一个节点并继续作为协调员(最好是本地数据中心)

要求

我想要一种联系数据中心2中任何节点的方法,并将协调员作业移交给数据中心2中的一个节点。

为什么我需要这个

我正在尝试单独使用数据中心2的触发器功能。由于协调员负责触发,我希望从数据中心2中选择一个协调员,这样数据中心1就不必进行此操作。

2 个答案:

答案 0 :(得分:1)

您可以使用DCAwareRoundRobinPolicy负载平衡策略来实现此目的,方法是创建策略,使DC2被视为“本地”DC。

Cluster.Builder builder = Cluster.builder().withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("dc2"));

在上面的示例中,将忽略远程(非DC2)节点。

驱动程序版本2.0.2中还有一个新的WhiteListPolicy,它包含另一个负载平衡策略,并将节点限制为您提供的特定列表。

Cluster.Builder builder = Cluster.builder().withLoadBalancingPolicy(new WhiteListPolicy(new DCAwareRoundRobinPolicy("dc2"), whiteList));

答案 1 :(得分:0)

对于多DC场景,Cassandra提供EACH和LOCAL一致性级别,其中EACH将确认每个DC和LOCAL中的成功操作仅在本地一级。

如果我理解正确,您尝试实现的是您的应用程序中的DC故障转移。这不是一个好习惯。让我们假设您的应用程序与Cassandra一起托管在DC1中。如果DC1发生故障,则整个应用程序都不可用。如果DC2发生故障,您的应用程序仍然可以使用LOCAL CL进行写入,而C *将在DC2返回时复制更改。

如果要实现HA,则需要在每个DC中部署应用程序,使用CL = LOCAL_X,最后在DNS级别进行故障转移(例如,使用AWS Route53)。

有关多个DC的一致性级别的详细信息,请参阅data consistency docsthis blog post