【问题标题】:Datastax Cassandra C/C++ driver cass_cluster_set_blacklist_filtering functionalityDatastax Cassandra C/C++ 驱动程序 cass_cluster_set_blacklist_filtering 功能
【发布时间】:2017-08-04 19:31:39
【问题描述】:

Datastax C/C++ 驱动程序具有黑名单过滤功能,作为其负载平衡控制的一部分。

https://docs.datastax.com/en/developer/cpp-driver/2.5/topics/configuration/

如果我遗漏了什么但我的理解是 CQL 客户端无法连接到列入黑名单的主机,请纠正我。

我正在使用 C/C++ 驱动程序 v2.5 和以下代码块并尝试连接到多节点集群:

CassCluster* cluster = cass_cluster_new();
CassSession* session = cass_session_new();
const char* hosts    = "192.168.57.101";
cass_cluster_set_contact_points(cluster, hosts);
cass_cluster_set_blacklist_filtering(cluster, hosts);
CassFuture* connect_future = cass_session_connect(session, cluster);

在此代码块中,CQL 客户端尝试连接的主机被设置为黑名单。但是,CQL 客户端似乎连接到该主机并执行任何查询。上面的代码块有问题吗?如果不是这样,这是预期的行为吗?是否因为它是一个多节点集群并与其他对等方建立连接而表现不同?

任何帮助将不胜感激。

提前谢谢你

【问题讨论】:

    标签: cassandra datastax


    【解决方案1】:

    由于您只提供一个联系点,因此该 IP 地址用于建立与集群的控制连接。一旦建立了该控制连接并读取对等表以确定集群中的其他可用节点,就会与这些其他节点建立连接。此时,所有查询都将路由到其他节点,而不是您的初始/黑名单联系人;但是,与初始接触点的连接将保持不变,因为它是集群中的控制连接。

    为了更好地了解驱动程序内部发生的情况,您可以启用驱动程序登录。以下是通过控制台启用日志记录的示例:

    void on_log(const CassLogMessage* message, void* data) {
      fprintf(stderr, "%u.%03u [%s] (%s:%d:%s): %s\n",
      (unsigned int) (message->time_ms / 1000),
      (unsigned int) (message->time_ms % 1000),
      cass_log_level_string(message->severity),
      message->file, message->line, message->function,
      message->message);
    }
    
    /* Log configuration *MUST* be done before any other driver call */
    cass_log_set_level(CASS_LOG_TRACE);
    cass_log_set_callback(on_log, NULL);
    

    为了减少将被列入黑名单的节点上的额外连接,您可以向集群提供与将被列入黑名单的节点(或多个节点)不同的不同接触点。

    【讨论】:

    • 感谢您的建议。 C/C++ 驱动程序支持黑名单策略。还有 C/C++ 驱动程序和其他语言驱动程序支持的白名单策略。使用 C/C++ 驱动程序的白名单策略,客户端连接到节点,即使该节点未包含在白名单中,但会将任何数据存储在白名单主机中(与黑名单的工作方式相同)。使用 Python 驱动程序的白名单策略,客户端不会连接到白名单中未包含的节点。因此,我假设不同语言的数据税驱动程序可能对白名单策略有不同的实现。
    • @MariosBraho 你是对的,python 驱动程序尊重白名单主机并且不与主机建立连接。如果您想跟踪它,我已经在 DataStax C/C++ Jira 板上创建了一张票; datastax-oss.atlassian.net/browse/CPP-447.
    猜你喜欢
    • 2014-03-27
    • 2016-02-27
    • 2017-01-20
    • 2016-01-22
    • 1970-01-01
    • 2015-04-01
    • 2016-03-29
    • 2018-02-15
    • 2013-12-23
    相关资源
    最近更新 更多