文档主页
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 以将接收线程绑定到。
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 Cluster 的连接,即到数据节点集群的连接。要实例化 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 Cluster 的 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
    )
参数

.

返回值

整数值 01,对应于当前对此连接生效的 AutoReconnect 设置。0 强制 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() 方法。这可以防止在调用 unlock_ndb_objects() 方法之前创建 Ndb 的任何新实例。

  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_timestamp 形式的生成值(例如,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()

描述

与集群断开连接的 API 节点被迫使用新的连接对象来重新连接,除非通过在 config.ini 文件中设置 AutoReconnect = 1 或使用 1 作为输入值调用此方法来覆盖此行为。使用 0 作为值调用此方法与将 AutoReconnect 配置参数(也在这些 NDB Cluster 版本中引入)设置为 0 具有相同的效果;也就是说,API 节点被迫创建新连接。

重要

调用此方法会覆盖在 config.ini 文件中对 AutoReconnect 进行的任何设置。

有关详细信息,请参阅 在 NDB 集群中定义 SQL 和其他 API 节点

签名
void set_auto_reconnect
    (
      int value
    )
参数

value 为 0 或 1,用于确定 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 Cluster 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()

描述

设置绑定到使用 set_recv_thread_cpu() 确定的 CPU(或多个 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 开始,可以使用此方法创建 URI,以便在 ndbinfo.processes 表中应用程序行的 service_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。通过调用 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。

签名
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 确定在检测到第一个“活动”节点后等待所有节点变为活动状态的秒数。如果超过此时间但并非所有节点都变为活动状态,则该方法会立即返回大于零的值。

返回值

wait_until_ready() 返回一个 int,其值的解释如下

  • = 0:所有节点都“活动”。

  • > 0:至少有一个节点“活动”(但是,不知道所有节点是否都“活动”)。

  • < 0:发生错误。