【问题标题】:Cassandra Python driver: force using a single nodeCassandra Python 驱动程序:强制使用单个节点
【发布时间】:2016-01-15 01:23:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: python cassandra


    【解决方案1】:

    是否可以强制 Python 驱动程序只连接到该机器?

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

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

    通过这样做,您可以限制驱动程序并使其仅与一个节点联系。 但是,我会警告您,如果该节点发生故障,您的应用程序将发生故障,因为它将无法与环中的其他任何人交谈。

    【讨论】:

    • 不错!我不知道这个白名单的事情。谢谢。
    • 要使用的导入是:from cassandra.policies import WhiteListRoundRobinPolicy
    【解决方案2】:

    不完全确定您要在这里完成什么,但如果我根据您的问题本身的优点来看待您的问题,我确实有一些想法。免责声明:这是可以尝试的……可能会也可能不会。

    我可以让那台机器成为环的一部分但不保存任何数据吗?

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

    是否可以强制 Python 驱动程序只连接到该机器?

    假设您在自己的逻辑数据中心中拥有一台计算机(正如我上面建议的那样),您可以在连接属性中指明首选的数据中心:

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

    当然,Python 驱动程序仍会通过 gossip “发现”其他节点的拓扑。但是,只要您以 LOCAL 一致性级别进行查询,您的驱动程序就应该与您首选的 DC 保持一致。

    【讨论】:

    • 我会试试的,这或多或少是我在想的。所以你认为一个数据中心的复制因子为 0 可能有效?
    • @CedricH。是的,我会尝试零射频。它应该让你指定。
    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2017-08-07
    • 1970-01-01
    • 2015-04-12
    • 2017-11-26
    • 2018-06-15
    相关资源
    最近更新 更多