是否可以强制Python驱动程序连接到单个指定节点(而不是与其他节点一起创建集合池和/或可以识别令牌)?
在我的具体情况下,我有两个不同的网络,除了一台“看到”两个网络的机器外,看不到对方。
在某些情况下,我想从“外部”网络连接到Cassandra,从而使用该特殊机器。我看到两个问题:我可以将该机器作为环的一部分而不是保留任何数据吗?是否可以强制Python驱动程序仅连接到该计算机?
答案 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。