文件首頁
MySQL NDB Cluster API 開發人員指南
相關文件 下載本手冊
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


MySQL NDB Cluster API 開發人員指南  /  ...  /  Ndb_cluster_connection 類別

2.3.12 Ndb_cluster_connection 類別

本節提供關於 Ndb_cluster_connection 類別的資訊,該類別會模擬管理伺服器 (ndb_mgmd) 與一組資料節點之間的連線。

Ndb_cluster_connection 類別概觀

父類別

子類別

描述

NDB 應用程式應該從建立單一 Ndb_cluster_connection 物件開始,並且通常會使用單一 Ndb_cluster_connection。當呼叫此物件的 connect() 方法時,應用程式會連線至叢集管理伺服器。藉由使用 wait_until_ready() 方法,可以等待連線到達一個或多個資料節點。

Ndb_cluster_connection 的執行個體是用於建立 Ndb 物件。

方法

下表列出此類別的公用方法以及每個方法的目的或用法

表 2.33 Ndb_cluster_connection 類別方法和描述

名稱 描述
Ndb_cluster_connection() 建構函式;建立與資料節點叢集的連線。
configure_tls() 提供 TLS 組態資料。
connect() 連線至叢集管理伺服器。
get_auto_reconnect() 取得使用此 Ndb_cluster_connection 的 API 節點的自動重新連線設定。
get_latest_error() 最近一次嘗試連線是否成功。
get_latest_error_msg() 如果最近一次嘗試連線失敗,則提供原因。
get_max_adaptive_send_time() 取得自適應傳送強制傳送所有擱置訊號之前的逾時。
get_num_recv_threads() 取得接收執行緒的數量。
get_next_ndb_object() 用於反覆運算多個 Ndb 物件。
get_recv_thread_activation_threshold() 取得已繫結接收執行緒的啟動層級。
get_tls_certificate_path() 取得作用中 TLS 憑證的路徑。
get_system_name() 取得叢集的系統名稱。
lock_ndb_objects() 停用建立新的 Ndb 物件。
set_auto_reconnect() 啟用或停用使用此 Ndb_cluster_connection 的 API 節點的自動重新連線。
set_data_node_neighbour() 設定相鄰節點,以獲得最佳交易協調器放置
set_max_adaptive_send_time() 設定經過逾時之後,自適應傳送會強制傳送所有擱置的訊號。
set_name() 提供連線的名稱
set_num_recv_threads() 設定要繫結的接收執行緒數目。
set_recv_thread_cpu() 設定一個或多個 CPU,以將接收執行緒繫結至該 CPU。
set_optimized_node_selection() 用於控制節點選取行為。
set_service_uri() 設定要在 ndbinfo.processes 表格中發佈的 URI
set_timeout() 設定連線逾時
unlock_ndb_objects() 啟用建立新的 Ndb 物件。
unset_recv_thread_cpu() 取消將接收執行緒繫結至一個或多個 CPU。
wait_until_ready() 等待與一個或多個資料節點的連線成功。

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 的實例。

Ndb_cluster_connection::configure_tls()

描述

提供 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

此值為 01,用於指定保護此節點與 NDB 管理伺服器之間 MGM 通訊協定連線的 TLS 要求。0 表示 TLS 的要求是寬鬆的;節點會嘗試使用 TLS,但即使 TLS 失敗,連線也會成功。1 設定對 TLS 的嚴格要求;無法建立 TLS 會被視為錯誤(且無法建立連線)。

傳回值

Ndb_cluster_connection::connect()

描述

此方法連線到叢集管理伺服器。

簽章
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::get_auto_reconnect()

描述

此方法擷取給定 Ndb_cluster_connection 的目前 AutoReconnect 設定。如需更詳細的資訊,請參閱 Ndb_cluster_connection::set_auto_reconnect()

簽章
int get_auto_reconnect
    (
      void
    )
參數

.

傳回值

對應於此連線有效之目前 AutoReconnect 設定的整數值 010 會強制 API 節點使用與叢集的新連線,而 1 會啟用 API 節點以重複使用現有的連線。

Ndb_cluster_connection::get_latest_error()

描述

此方法可用於判斷此 Ndb_cluster_connection 最近一次嘗試的 connect() 是否成功。如果連線成功,get_latest_error() 會傳回 0;否則,會傳回 1。如果連線嘗試失敗,請使用 Ndb_cluster_connection::get_latest_error_msg() 來取得提供失敗原因的錯誤訊息。

簽章
int get_latest_error
    (
      void
    ) const
參數

.

傳回值

10。傳回值為 1 表示最近一次連線嘗試失敗;如果嘗試成功,則會傳回 0

Ndb_cluster_connection::get_latest_error_msg()

描述

如果此 Ndb_cluster_connection 最近一次連線嘗試失敗(如呼叫 get_latest_error() 所判定的),此方法會提供錯誤訊息,其中包含有關失敗原因的資訊。

簽章
const char* get_latest_error_msg
    (
      void
    ) const
參數

.

傳回值

一個字串,其中包含描述 Ndb_cluster_connection::connect() 失敗的錯誤訊息。如果最近一次連線嘗試成功,則會傳回空字串。

Ndb_cluster_connection::get_max_adaptive_send_time()

描述

取得適應性傳送機制強制傳送所有擱置訊號之前允許經過的最短時間 (以毫秒為單位)。

簽章
Uint32 get_max_adaptive_send_time
    (

    )
參數

.

傳回值

等待時間,以毫秒為單位。這應該永遠是 0 到 10(含)之間的值。

Ndb_cluster_connection::get_next_ndb_object()

描述

此方法用於反覆運算一組 Ndb 物件,一次擷取一個。

簽章
const Ndb* get_next_ndb_object
    (
      const Ndb* p
    )
參數

此方法接受一個參數,即指向最後一個已擷取的 Ndb 物件的指標或 NULL

傳回值

傳回下一個 Ndb 物件,或如果沒有更多 Ndb 物件可用,則傳回 NULL

反覆運算 Ndb 物件。 若要擷取所有現有的 Ndb 物件,請執行以下三個步驟

  1. 呼叫 lock_ndb_objects() 方法。這會阻止建立任何新的 Ndb 實例,直到呼叫 unlock_ndb_objects() 方法。

  2. 透過將 NULL 傳遞至 get_next_ndb_object() 來擷取第一個可用的 Ndb 物件。您可以透過將第一次呼叫擷取的指標傳遞至下一個 get_next_ndb_object() 呼叫來擷取第二個 Ndb 物件,依此類推。當使用指向最後一個可用 Ndb 實例的指標時,該方法會傳回 NULL

  3. 擷取所有想要的 Ndb 物件後,您應該透過呼叫 unlock_ndb_objects() 方法來重新啟用 Ndb 物件的建立。

Ndb_cluster_connection::get_num_recv_threads()

描述

取得接收器執行緒的數量。

簽章
int get_num_recv_threads
    (
      void
    ) const
參數

.

傳回值

接收器執行緒的數量。

Ndb_cluster_connection::get_recv_thread_activation_threshold()

描述

取得為啟用由 set_recv_thread_cpu() 綁定的接收器執行緒所設定的層級。

簽章
int get_recv_thread_activation_threshold
    (
      void
    ) const
參數

.

傳回值

整數臨界值。如需有關解譯此值的資訊,請參閱 Ndb_cluster_connection::set_recv_thread_activation_threshold()

Ndb_cluster_connection::get_system_name()

描述

從叢集組態取得系統名稱。這是叢集 config.ini 組態檔案中設定的 Name 系統組態參數的值。

簽章
const char* get_system_name
    (
      void
    ) const
參數

.

傳回值

叢集系統名稱。如果未在叢集組態檔案中設定,則這是以 MC_時間戳記 形式產生的值(例如,MC_20170426182343),並使用管理伺服器啟動的時間。

Ndb_cluster_connection::get_tls_certificate_path()

描述

擷取使用中 TLS 憑證檔案的路徑名稱。在呼叫 connect() 後呼叫。

如果尚未呼叫 connect(),或者在 TLS 搜尋路徑(無論是提供給 configure_tls() 還是預設)中找不到有效的金鑰和憑證,則傳回 null

此方法已在 NDB 8.3.0 中新增。

簽章
const char *get_tls_certificate_path
  (
    void
  ) 
  const
參數

.

傳回值

目前使用中 TLS 憑證檔案的絕對路徑。

ndb_cluster_connection::lock_ndb_objects()

描述

呼叫此方法會阻止建立 Ndb 類別的新實例。必須先呼叫此方法,才能使用 get_next_ndb_object() 反覆運算多個 Ndb 物件。

簽章
void lock_ndb_objects
    (
      void
    ) const

從 NDB 7.4.13 開始,此方法為 const(錯誤 #23709232)。

更多資訊,請參閱 Ndb_cluster_connection::get_next_ndb_object()

參數

.

傳回值

.

Ndb_cluster_connection::set_auto_reconnect()

描述

除非在 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::set_data_node_neighbour()

描述

設定連線的資料節點鄰居,用於最佳化交易協調器的放置。此方法可以在建立 Ndb_cluster_connection 之後,但在啟動任何查詢執行緒之前使用。這是因為此方法可能會更改使用它的執行緒所共用的 Ndb_cluster_connection 內部狀態。此狀態不是執行緒安全的;更改它可能會在更改時導致非最佳的節點選擇。

您可以使用 ndb_data_node_neighbour 伺服器系統變數,為 NDB 叢集 SQL 節點設定資料節點鄰居。

此方法已在 NDB 7.5 中新增。

簽章
void set_data_node_neighbour
    (
      Uint32 neighbour_node
    )
參數

要用作鄰居的節點 ID。

傳回值

.

Ndb_cluster_connection::set_max_adaptive_send_time()

描述

設定在自適應傳送機制強制傳送所有待處理訊號之前允許經過的最小時間(以毫秒為單位)。

簽章
void set_max_adaptive_send_time
    (
      Uint32 milliseconds
    )
參數

等待時間(以毫秒為單位)。範圍為 0-10,預設值為 10。

傳回值

.

Ndb_cluster_connection::set_name()

描述

設定連線的名稱。如果指定了名稱,則會在叢集記錄中報告。

簽章
void set_name
    (
      const char* name
    )
參數

要用作連線識別符號的 name

傳回值

.

Ndb_cluster_connection::set_num_recv_threads()

描述

設定繫結至 CPU(或 CPU)的接收執行緒數量,使用 set_recv_thread_cpu() 確定,並使用 set_recv_thread_activation_threshold() 設定閾值。

此方法應在嘗試連線至任何其他節點之前呼叫。

簽章
int set_num_recv_threads
    (
      Uint32 num_recv_threads
    )
參數

接收執行緒的數量。唯一支援的值為 1

傳回值

-1 表示錯誤;任何其他值表示成功。

Ndb_cluster_connection::set_optimized_node_selection()

描述

此方法可用於覆寫 connect() 方法的預設行為,關於應該首先連線哪個節點。

簽章
void set_optimized_node_selection
    (
      int value
    )
參數

一個整數 value

傳回值

.

Ndb_cluster_connection::set_recv_thread_activation_threshold()

描述

設定啟用由 set_recv_thread_cpu() 繫結的接收執行緒的層級。低於此層級時,會使用一般使用者執行緒來接收訊號。

簽章
int set_recv_thread_activation_threshold
    (
      Uint32 threshold
    )
參數

一個整數 threshold 值。16 或更高表示永遠不會將接收執行緒用作接收器。0 表示接收執行緒始終處於活動狀態,並保留其專屬使用的輪詢權,實際上阻止所有使用者執行緒成為接收器。在這種情況下,應注意確保接收執行緒不會與使用者執行緒競爭 CPU 資源;最好將其鎖定在 CPU 上以供其專屬使用。預設值為 8。

傳回值

-1 表示錯誤;任何其他值表示成功。

Ndb_cluster_connection::set_service_uri()

描述

從 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。

Ndb_cluster_connection::set_recv_thread_cpu()

描述

設定接收執行緒應繫結的 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 表示錯誤;任何其他值表示成功。

Ndb_cluster_connection::set_timeout()

描述

用於設定連線的逾時,以限制連線時可能會封鎖的時間量。

此方法實際上是 MGM API 函數 ndb_mgm_set_timeout() 的包裝函式。

簽章
int set_timeout
    (
      int timeout_ms
    )
參數

逾時的長度(以毫秒為單位)(timeout_ms)。目前,僅接受 1000 的倍數。

傳回值

成功時為 0;任何其他值表示失敗。

Ndb_cluster_connection::unlock_ndb_objects()

描述

此方法會取消 lock_ndb_objects() 方法的效果,使其可以建立 Ndb 的新執行個體。在使用 get_next_ndb_object() 方法完成擷取 Ndb 物件後,應呼叫 unlock_ndb_objects()

簽章
void unlock_ndb_objects
    (
      void
    ) const

從 NDB 7.4.13 開始,此方法為 const(錯誤 #23709232)。

更多資訊,請參閱 Ndb_cluster_connection::get_next_ndb_object()

參數

.

傳回值

.

Ndb_cluster_connection::unset_recv_thread_cpu()

描述

取消設定使用 set_recv_thread_cpu() 繫結的接收執行緒的 CPU 或 CPU。

簽章
int unset_recv_thread_cpu
    (
      Uint32 recv_thread_id
    )
參數

要取消繫結的接收執行緒的執行緒 ID。

傳回值

-1 表示錯誤;任何其他值表示成功。

Ndb_cluster_connection::wait_until_ready()

描述

此方法是建立與資料節點的連線所必需的。它會等到與一個或多個資料節點的請求連線成功,或直到符合逾時條件。

簽章
int wait_until_ready
    (
      int timeoutBefore,
      int timeoutAfter
    )
參數

此方法會採用兩個參數

  • timeoutBefore 決定等待直到偵測到第一個「存活」節點的秒數。如果超過此時間量,且未偵測到任何存活節點,則該方法會立即傳回負值。

  • timeoutAfter 決定在偵測到第一個live節點後,等待所有節點變為活動狀態的秒數。如果超過此時間而所有節點仍未變為活動狀態,則該方法會立即傳回大於零的值。

傳回值

wait_until_ready() 會傳回一個 int,其值的解釋如下:

  • = 0:所有節點都處於live狀態。

  • > 0:至少有一個節點處於live狀態(但是,無法得知所有節點是否都處於live狀態)。

  • < 0:發生錯誤。