2017-03-14 135 views
1

Datastax C/C++驅動程序具有黑名單過濾功能作爲其負載平衡控件的一部分。Datastax Cassandra C/C++驅動程序cass_cluster_set_blacklist_filtering功能

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客戶端似乎連接到此主機並執行任何查詢。上述代碼塊有問題嗎?如果不是這樣,這是預期的行爲?它的行爲不同,因爲它是一個多節點集羣並與其他節點建立連接?

任何幫助將不勝感激。

預先感謝您

回答

0

既然你只提供一個接觸點,該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); 

爲了減少將被列入黑名單可以提供一個不同的接觸點成是不一樣的節點處的羣集節點上的額外的連接(或節點)將被列入黑名單。

+0

謝謝你的建議。黑名單策略由C/C++驅動程序支持。還有C/C++驅動程序和其他語言驅動程序支持的白名單策略。使用C/C++驅動程序的白名單策略,即使客戶端不包含在白名單中,但將任何數據存儲在白名單主機中(與黑名單的工作方式相同),客戶端也會連接到一個節點。通過Python驅動程序的白名單策略,客戶端不會連接到未包含在白名單中的節點。因此,我認爲不同語言的datastax驅動程序可能會有不同的白名單策略實施。 –

+0

@MariosBraho你是對的,python驅動程序尊重白名單主機並且不建立到主機的連接。如果您想跟蹤它,我已在DataStax C/C++ Jira板上創建了一張票; https://datastax-oss.atlassian.net/browse/CPP-447。 – Fero

相關問題