本節提供關於 Ndb_cluster_connection
類別的資訊,該類別會模擬管理伺服器 (ndb_mgmd) 與一組資料節點之間的連線。
- 父類別
無
- 子類別
無
- 描述
-
NDB 應用程式應該從建立單一
Ndb_cluster_connection
物件開始,並且通常會使用單一Ndb_cluster_connection
。當呼叫此物件的connect()
方法時,應用程式會連線至叢集管理伺服器。藉由使用wait_until_ready()
方法,可以等待連線到達一個或多個資料節點。Ndb_cluster_connection
的執行個體是用於建立Ndb
物件。 - 方法
-
下表列出此類別的公用方法以及每個方法的目的或用法
表 2.33 Ndb_cluster_connection 類別方法和描述
- 描述
此方法會建立與 NDB 叢集的連線,也就是與資料節點叢集的連線。為了具現化
Ndb
物件,需要使用此方法傳回的物件。因此,每個 NDB API 應用程式都需要使用Ndb_cluster_connection
。- 簽章
-
Ndb_cluster_connection
有兩個建構函式。第一個建構函式如下所示Ndb_cluster_connection ( const char* connection_string = 0 )
第二個建構函式除了連線字串引數之外,還會採用節點 ID。其簽章和參數如下所示
Ndb_cluster_connection ( const char* connection_string, int force_api_nodeid )
- 參數
-
第一個版本的建構函式需要單一
connection_string
參數,指向管理伺服器的位置。第二個建構函式版本接受兩個參數,一個是
connection_string
,另一個是要由此 API 節點使用的節點 ID (force_api_nodeid
)。此節點 ID 會覆寫connection_string
參數中設定的任何節點 ID 值。 - 傳回值
一個
Ndb_cluster_connection
的實例。
- 描述
-
提供 TLS 連線所需的組態資訊。
如果節點在搜尋路徑中找到活動的 NDB TLS 節點金鑰和憑證(使用 ndb_sign_keys 或其他工具建立),則它可以安全地連線到其他節點。如果未對連線呼叫此方法,則搜尋路徑為編譯時的預設路徑(
WITH_NDB_TLS_SEARCH_PATH
),且 TLS 層級為0
(寬鬆)。另請參閱 NDB 集群的 TLS 連結加密。
- 簽章
void configure_tls ( const char *tls_search_path, int mgm_tls_level )
- 參數
- tls_search_path
一個以冒號分隔的目錄清單,其中可能包含 TLS 私鑰檔案或已簽署的公鑰憑證。搜尋路徑中包含的目錄參考可以是絕對或相對路徑。會展開環境變數。
- mgm_tls_level
此值為
0
或1
,用於指定保護此節點與 NDB 管理伺服器之間 MGM 通訊協定連線的 TLS 要求。0
表示 TLS 的要求是寬鬆的;節點會嘗試使用 TLS,但即使 TLS 失敗,連線也會成功。1
設定對 TLS 的嚴格要求;無法建立 TLS 會被視為錯誤(且無法建立連線)。
- 傳回值
無
- 描述
此方法連線到叢集管理伺服器。
- 簽章
int connect ( int retries = 30, int delay = 1, int verbose = 0 )
- 參數
-
此方法接受三個參數,所有參數都是可選的。
-
retries
指定在失敗時重試連線的次數。預設值為 30。0
表示在失敗時不會進行其他連線嘗試;為retries
使用負值會導致連線嘗試無限期地重複進行。 delay
表示重新連線嘗試之間的秒數;預設值為1
秒。verbose
指示此方法是否應輸出其進度的報告,1
表示啟用此報告;預設值為0
(停用報告)。
-
- 傳回值
-
此方法傳回一個
int
,它可以具有以下 3 個值之一0:連線嘗試成功。
1:表示可復原的錯誤。
-1:表示無法復原的錯誤。
- 描述
此方法擷取給定
Ndb_cluster_connection
的目前AutoReconnect
設定。如需更詳細的資訊,請參閱 Ndb_cluster_connection::set_auto_reconnect()。- 簽章
int get_auto_reconnect ( void )
- 參數
無.
- 傳回值
對應於此連線有效之目前
AutoReconnect
設定的整數值0
或1
。0
會強制 API 節點使用與叢集的新連線,而1
會啟用 API 節點以重複使用現有的連線。
- 描述
此方法可用於判斷此
Ndb_cluster_connection
最近一次嘗試的connect()
是否成功。如果連線成功,get_latest_error()
會傳回0
;否則,會傳回1
。如果連線嘗試失敗,請使用Ndb_cluster_connection::get_latest_error_msg()
來取得提供失敗原因的錯誤訊息。- 簽章
int get_latest_error ( void ) const
- 參數
無.
- 傳回值
1
或0
。傳回值為1
表示最近一次連線嘗試失敗;如果嘗試成功,則會傳回0
。
- 描述
如果此
Ndb_cluster_connection
最近一次連線嘗試失敗(如呼叫get_latest_error()
所判定的),此方法會提供錯誤訊息,其中包含有關失敗原因的資訊。- 簽章
const char* get_latest_error_msg ( void ) const
- 參數
無.
- 傳回值
一個字串,其中包含描述
Ndb_cluster_connection::connect()
失敗的錯誤訊息。如果最近一次連線嘗試成功,則會傳回空字串。
- 描述
取得適應性傳送機制強制傳送所有擱置訊號之前允許經過的最短時間 (以毫秒為單位)。
- 簽章
Uint32 get_max_adaptive_send_time ( )
- 參數
無.
- 傳回值
等待時間,以毫秒為單位。這應該永遠是 0 到 10(含)之間的值。
反覆運算 Ndb 物件。 若要擷取所有現有的 Ndb
物件,請執行以下三個步驟
呼叫
lock_ndb_objects()
方法。這會阻止建立任何新的Ndb
實例,直到呼叫unlock_ndb_objects()
方法。透過將
NULL
傳遞至get_next_ndb_object()
來擷取第一個可用的Ndb
物件。您可以透過將第一次呼叫擷取的指標傳遞至下一個get_next_ndb_object()
呼叫來擷取第二個Ndb
物件,依此類推。當使用指向最後一個可用Ndb
實例的指標時,該方法會傳回NULL
。擷取所有想要的
Ndb
物件後,您應該透過呼叫unlock_ndb_objects()
方法來重新啟用Ndb
物件的建立。
- 描述
取得為啟用由
set_recv_thread_cpu()
綁定的接收器執行緒所設定的層級。- 簽章
int get_recv_thread_activation_threshold ( void ) const
- 參數
無.
- 傳回值
整數臨界值。如需有關解譯此值的資訊,請參閱 Ndb_cluster_connection::set_recv_thread_activation_threshold()。
- 描述
從叢集組態取得系統名稱。這是叢集
config.ini
組態檔案中設定的Name
系統組態參數的值。- 簽章
const char* get_system_name ( void ) const
- 參數
無.
- 傳回值
叢集系統名稱。如果未在叢集組態檔案中設定,則這是以
MC_
形式產生的值(例如,時間戳記
MC_20170426182343
),並使用管理伺服器啟動的時間。
- 描述
-
擷取使用中 TLS 憑證檔案的路徑名稱。在呼叫
connect()
後呼叫。如果尚未呼叫
connect()
,或者在 TLS 搜尋路徑(無論是提供給configure_tls()
還是預設)中找不到有效的金鑰和憑證,則傳回null
。此方法已在 NDB 8.3.0 中新增。
- 簽章
const char *get_tls_certificate_path ( void ) const
- 參數
無.
- 傳回值
目前使用中 TLS 憑證檔案的絕對路徑。
- 描述
除非在
config.ini
檔案中設定AutoReconnect = 1
,或使用輸入值 1 呼叫此方法來覆寫此行為,否則與叢集斷開連線的 API 節點會強制使用新的連線物件重新連線。使用值 0 呼叫此方法的效果,與將AutoReconnect
組態參數(也在那些 NDB 叢集版本中引入)設定為 0 的效果相同;也就是說,API 節點會強制建立新的連線。
呼叫時,此方法會覆寫在 config.ini
檔案中對 AutoReconnect
所做的任何設定。
更多資訊,請參閱 在 NDB 叢集中定義 SQL 和其他 API 節點。
- 簽章
void set_auto_reconnect ( int value )
- 參數
值為 0 或 1 的
value
,決定 API 節點重新連線的行為。0 會強制 API 節點使用新的連線 (Ndb_cluster_connection
物件);1 允許 API 節點重複使用現有與叢集的連線。- 傳回值
無.
- 描述
-
設定連線的資料節點鄰居,用於最佳化交易協調器的放置。此方法可以在建立
Ndb_cluster_connection
之後,但在啟動任何查詢執行緒之前使用。這是因為此方法可能會更改使用它的執行緒所共用的Ndb_cluster_connection
內部狀態。此狀態不是執行緒安全的;更改它可能會在更改時導致非最佳的節點選擇。您可以使用
ndb_data_node_neighbour
伺服器系統變數,為 NDB 叢集 SQL 節點設定資料節點鄰居。此方法已在 NDB 7.5 中新增。
- 簽章
void set_data_node_neighbour ( Uint32 neighbour_node )
- 參數
要用作鄰居的節點 ID。
- 傳回值
無.
- 描述
設定在自適應傳送機制強制傳送所有待處理訊號之前允許經過的最小時間(以毫秒為單位)。
- 簽章
void set_max_adaptive_send_time ( Uint32 milliseconds )
- 參數
等待時間(以毫秒為單位)。範圍為 0-10,預設值為 10。
- 傳回值
無.
- 描述
-
設定繫結至 CPU(或 CPU)的接收執行緒數量,使用
set_recv_thread_cpu()
確定,並使用set_recv_thread_activation_threshold()
設定閾值。此方法應在嘗試連線至任何其他節點之前呼叫。
- 簽章
int set_num_recv_threads ( Uint32 num_recv_threads )
- 參數
接收執行緒的數量。唯一支援的值為
1
。- 傳回值
-1
表示錯誤;任何其他值表示成功。
- 描述
此方法可用於覆寫
connect()
方法的預設行為,關於應該首先連線哪個節點。- 簽章
void set_optimized_node_selection ( int value )
- 參數
一個整數
value
。- 傳回值
無.
- 描述
設定啟用由
set_recv_thread_cpu()
繫結的接收執行緒的層級。低於此層級時,會使用一般使用者執行緒來接收訊號。- 簽章
int set_recv_thread_activation_threshold ( Uint32 threshold )
- 參數
一個整數
threshold
值。16 或更高表示永遠不會將接收執行緒用作接收器。0 表示接收執行緒始終處於活動狀態,並保留其專屬使用的輪詢權,實際上阻止所有使用者執行緒成為接收器。在這種情況下,應注意確保接收執行緒不會與使用者執行緒競爭 CPU 資源;最好將其鎖定在 CPU 上以供其專屬使用。預設值為 8。- 傳回值
-1
表示錯誤;任何其他值表示成功。
- 描述
-
從 NDB 7.5.7 開始,此方法可用於在
ndbinfo.processes
表格中,為應用程式的列在service_URI
欄位中建立 URI。前提是此方法是在呼叫
connect()
之前呼叫的,服務 URI 會在連線後立即發佈;否則,它會在延遲最多HeartbeatIntervalDbApi
毫秒後發佈。 - 簽章
int set_service_uri ( const char* scheme, const char* host, int port, const char* path )
- 參數
-
此方法會採用此處列出的參數
scheme:URI 協定。這僅限於小寫字母、數字以及字元
.
、+
和-
(句點、加號和破折號)。最大長度為 16 個字元;超過此限制的任何字元都會被截斷。host
:URI 網路位址或主機名稱。最大長度為 48 個字元(足以容納 IPv6 網路位址);超過此限制的任何字元都會被截斷。如果為 null,則每個資料節點會報告其自身連線至此節點的網路位址。使用多個傳輸器或網路位址連線至不同資料節點的Ndb_cluster_connection
會反映在ndbinfo.processes
表格中的多個列中。port
:URI 連接埠。如果等於 0,則不會發佈。-
path
:URI 路徑,可能後面接著以?
開頭的查詢字串。路徑和查詢的組合最大長度不得超過 128 個字元;如果更長,則會截斷至此長度。路徑不能以雙斜線 (
//
) 開頭。
- 傳回值
成功時為 0,發生語法錯誤時為 1。
- 描述
設定接收執行緒應繫結的 CPU 或 CPU。透過呼叫
set_recv_thread_activation_threshold()
,設定啟用接收執行緒作為接收器的層級。透過呼叫unset_recv_thread_cpu()
,取消設定此接收執行緒的繫結。- 簽章
int set_recv_thread_cpu ( Uint16* cpuid_array, Uint32 array_len, Uint32 recv_thread_id = 0 )
- 參數
-
此方法會採用三個參數,此處列出
接收執行緒應繫結的一個或多個 CPU ID 的陣列
此陣列的長度
要繫結的接收執行緒的執行緒 ID。預設值為
0
。
- 傳回值
-1
表示錯誤;任何其他值表示成功。
- 描述
-
用於設定連線的逾時,以限制連線時可能會封鎖的時間量。
此方法實際上是 MGM API 函數
ndb_mgm_set_timeout()
的包裝函式。 - 簽章
int set_timeout ( int timeout_ms )
- 參數
逾時的長度(以毫秒為單位)(
timeout_ms
)。目前,僅接受 1000 的倍數。- 傳回值
成功時為 0;任何其他值表示失敗。
- 描述
此方法會取消
lock_ndb_objects()
方法的效果,使其可以建立Ndb
的新執行個體。在使用get_next_ndb_object()
方法完成擷取Ndb
物件後,應呼叫unlock_ndb_objects()
。- 簽章
-
void unlock_ndb_objects ( void ) const
從 NDB 7.4.13 開始,此方法為
const
(錯誤 #23709232)。 - 參數
無.
- 傳回值
無.
- 描述
取消設定使用
set_recv_thread_cpu()
繫結的接收執行緒的 CPU 或 CPU。- 簽章
int unset_recv_thread_cpu ( Uint32 recv_thread_id )
- 參數
要取消繫結的接收執行緒的執行緒 ID。
- 傳回值
-1
表示錯誤;任何其他值表示成功。
- 描述
此方法是建立與資料節點的連線所必需的。它會等到與一個或多個資料節點的請求連線成功,或直到符合逾時條件。
- 簽章
int wait_until_ready ( int timeoutBefore, int timeoutAfter )
- 參數
-
此方法會採用兩個參數
timeoutBefore
決定等待直到偵測到第一個「存活」節點的秒數。如果超過此時間量,且未偵測到任何存活節點,則該方法會立即傳回負值。timeoutAfter
決定在偵測到第一個「live」節點後,等待所有節點變為活動狀態的秒數。如果超過此時間而所有節點仍未變為活動狀態,則該方法會立即傳回大於零的值。
- 傳回值
-
wait_until_ready()
會傳回一個int
,其值的解釋如下:= 0
:所有節點都處於「live」狀態。> 0
:至少有一個節點處於「live」狀態(但是,無法得知所有節點是否都處於「live」狀態)。< 0
:發生錯誤。