【发布时间】:2016-01-15 01:23:08
【问题描述】:
是否可以强制 Python 驱动程序连接到单个指定节点(而不是与其他节点创建集合池和/或识别令牌)?
在我的具体情况下,我有两个相互看不到的不同网络,除了一台“看到”两个网络的机器。
在某些情况下,我想从“外部”网络连接到 Cassandra,从而使用那台特殊的机器。我看到两个问题:我可以让那台机器成为环的一部分但不保存任何数据吗?是否可以强制 Python 驱动程序仅连接到该机器?
【问题讨论】:
是否可以强制 Python 驱动程序连接到单个指定节点(而不是与其他节点创建集合池和/或识别令牌)?
在我的具体情况下,我有两个相互看不到的不同网络,除了一台“看到”两个网络的机器。
在某些情况下,我想从“外部”网络连接到 Cassandra,从而使用那台特殊的机器。我看到两个问题:我可以让那台机器成为环的一部分但不保存任何数据吗?是否可以强制 Python 驱动程序仅连接到该机器?
【问题讨论】:
是否可以强制 Python 驱动程序只连接到该机器?
虽然将机器固定在它自己的数据中心中会起作用,但还有另一种可能更简单的解决方案。您可以使用白名单策略,并且只提供您希望与之通信的一个节点。
cluster = Cluster(contact_points=contact_points, load_balancing_policy=WhiteListRoundRobinPolicy(contact_points))
通过这样做,您可以限制驱动程序并使其仅与一个节点联系。 但是,我会警告您,如果该节点发生故障,您的应用程序将发生故障,因为它将无法与环中的其他任何人交谈。
【讨论】:
from cassandra.policies import WhiteListRoundRobinPolicy
不完全确定您要在这里完成什么,但如果我根据您的问题本身的优点来看待您的问题,我确实有一些想法。免责声明:这是可以尝试的……可能会也可能不会。
我可以让那台机器成为环的一部分但不保存任何数据吗?
您可以在这里做的一件事就是将该机器放在它自己的逻辑数据中心中。然后根据每个键空间的复制因子,您可以(或不能)将数据复制到它。
是否可以强制 Python 驱动程序只连接到该机器?
假设您在自己的逻辑数据中心中拥有一台计算机(正如我上面建议的那样),您可以在连接属性中指明首选的数据中心:
cluster = Cluster(
['10.1.1.1'],
load_balancing_policy=DCAwareRoundRobinPolicy(local_dc='DATACENTER_NAME'),
port=9042)
当然,Python 驱动程序仍会通过 gossip “发现”其他节点的拓扑。但是,只要您以 LOCAL 一致性级别进行查询,您的驱动程序就应该与您首选的 DC 保持一致。
【讨论】: