本节提供有关 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 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
的实例。
- 描述
-
提供 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
值为
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 )
- 参数
无.
- 返回值
整数值
0
或1
,对应于当前对此连接生效的AutoReconnect
设置。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()
方法。这可以防止在调用unlock_ndb_objects()
方法之前创建Ndb
的任何新实例。通过将
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_
形式的生成值(例如,timestamp
MC_20170426182343
),使用管理服务器启动的时间。
- 描述
-
检索活动 TLS 证书文件的路径名。在调用
connect()
后调用。如果尚未调用
connect()
,或者在 TLS 搜索路径(无论是提供给configure_tls()
的还是默认的)中找不到有效的密钥和证书,则返回null
。此方法已在 NDB 8.3.0 中添加。
- 签名
const char *get_tls_certificate_path ( void ) const
- 参数
无.
- 返回值
当前活动的 TLS 证书文件的绝对路径。
- 描述
调用此方法可以防止创建
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()。
- 参数
无.
- 返回值
无.
- 描述
与集群断开连接的 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
后但在启动任何查询线程之前使用。这是因为此方法可能会更改使用它的线程共享的Ndb_cluster_connection
的内部状态。此状态不是线程安全的;更改它可能会导致在更改时选择节点的效率不高。您可以使用
ndb_data_node_neighbour
服务器系统变量为 NDB Cluster SQL 节点设置数据节点邻居。此方法已在 NDB 7.5 中添加。
- 签名
void set_data_node_neighbour ( Uint32 neighbour_node )
- 参数
要作为邻居使用的节点的 ID。
- 返回值
无.
- 描述
设置在自适应发送机制强制发送所有挂起的信号之前允许经过的最短时间(以毫秒为单位)。
- 签名
void set_max_adaptive_send_time ( Uint32 milliseconds )
- 参数
等待时间,以毫秒为单位。范围为 0-10,默认值为 10。
- 返回值
无.
- 描述
-
设置绑定到使用
set_recv_thread_cpu()
确定的 CPU(或多个 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 开始,可以使用此方法创建 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。
- 描述
设置接收器线程应绑定到的 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)。有关详细信息,请参阅 Ndb_cluster_connection::get_next_ndb_object()。
- 参数
无.
- 返回值
无.
- 描述
取消设置使用
set_recv_thread_cpu()
绑定到的 CPU。- 签名
int unset_recv_thread_cpu ( Uint32 recv_thread_id )
- 参数
要解除绑定的接收器线程的线程 ID。
- 返回值
-1
表示错误;任何其他值表示成功。
- 描述
需要使用此方法与数据节点建立连接。它会一直等到与一个或多个数据节点的请求连接成功,或者直到满足超时条件。
- 签名
int wait_until_ready ( int timeoutBefore, int timeoutAfter )
- 参数
-
此方法采用两个参数
timeoutBefore
确定在检测到第一个“活动”节点之前要等待的秒数。如果超过此时间但未检测到活动节点,则该方法会立即返回负值。timeoutAfter
确定在检测到第一个“活动”节点后等待所有节点变为活动状态的秒数。如果超过此时间但并非所有节点都变为活动状态,则该方法会立即返回大于零的值。
- 返回值
-
wait_until_ready()
返回一个int
,其值的解释如下= 0
:所有节点都“活动”。> 0
:至少有一个节点“活动”(但是,不知道所有节点是否都“活动”)。< 0
:发生错误。