Cassandra Python驱动程序:强制使用单个节点

时间:2016-01-14 14:27:51

标签: python cassandra

是否可以强制Python驱动程序连接到单个指定节点(而不是与其他节点一起创建集合池和/或可以识别令牌)?

在我的具体情况下,我有两个不同的网络,除了一台“看到”两个网络的机器外,看不到对方。

在某些情况下,我想从“外部”网络连接到Cassandra,从而使用该特殊机器。我看到两个问题:我可以将该机器作为环的一部分而不是保留任何数据吗?是否可以强制Python驱动程序仅连接到该计算机?

2 个答案:

答案 0 :(得分:3)

  

是否可以强制Python驱动程序仅连接到该计算机?

虽然将机器固定在自己的数据中心可以工作,但还有另一种可能更简单的解决方案。您可以使用白名单策略,只提供您希望与之通信的节点。

 cluster = Cluster(contact_points=contact_points, load_balancing_policy=WhiteListRoundRobinPolicy(contact_points))

通过执行此操作,您可以限制驱动程序并使其仅联系一个节点。 但是我会警告你,如果该节点发生故障,你的应用程序将会关闭,因为它无法与环网中的任何其他人通信。

答案 1 :(得分:2)

不完全确定你要在这里完成什么,但如果我根据自己的优点看你的问题,我确实有一些想法。免责声明:这是值得尝试的......可能会也可能不会。

  

我可以将该机器作为环的一部分但不保留任何数据吗?

您可以在这里做的一件事就是将该计算机放在自己的逻辑数据中心。然后,根据每个键空间的复制因子,您可以(或不能)将数据复制到它。

  

是否可以强制Python驱动程序仅连接到该计算机?

假设您的一台计算机位于其自己的逻辑数据中心(如上所述),您可以在连接属性中指明要优先选择的数据中心:

cluster = Cluster(
['10.1.1.1'],
load_balancing_policy=DCAwareRoundRobinPolicy(local_dc='DATACENTER_NAME'),
port=9042)

当然,Python驱动程序仍会通过八卦“发现”其他节点的拓扑。但是,只要您在LOCAL一致性级别进行查询,您的驱动程序就应该使用您喜欢的DC。