3.1 MGM API概念

本节介绍NDB集群MGM API的基本概念。

NdbMgmHandle

每个MGM API函数都需要一个管理服务器句柄类型NdbMgmHandle。这个句柄是通过调用函数来创建的ndb_mgm_create_handle ()并通过呼唤释放ndb_mgm_destroy_handle ()

看到ndb_mgm_create_handle (),ndb_mgm_destroy_handle (),以获得有关这两个函数的更多信息。

重要的

你不应该和别人分享NdbMgmHandle线程之间。虽然可以这样做(如果您实现自己的锁),但不建议使用;每个线程都应该使用自己的管理服务器句柄。

函数可以返回以下任意一个:

  • 一个整数值,值为1显示一个错误。

  • 一个非常量指针值。一个Value表示错误;否则,程序员必须释放返回值。

  • 一个常量指针值,带有指示错误的值。返回值不应该被释放。

可以使用适当的错误报告功能来识别错误条件ndb_mgm_get_latest_error ()ndb_mgm_error()

下面是一个使用MGM API的例子(为了简洁起见,没有错误处理):

NdbMgmHandle处理= ndb_mgm_create_handle ();ndb_mgm_connect(处理,0,0,0);Struct ndb_mgm_cluster_state *state= ndb_mgm_get_status(句柄);for (int i = 0;我< - > no_of_nodes;I ++) {struct ndb_mgm_node_state *node_state= &state->node_states[I];printf("node with ID=%d ", node_state->node_id);If (node_state->version != 0) printf("connected\n");其他printf(“没有连接\ n”);}免费((void *)状态); ndb_mgm_destroy_handle(&handle);

处理日志事件

数据节点和管理服务器定期或在特定情况下报告集群中发生的各种日志事件。这些日志事件被写到集群日志中。MGM API客户端可以选择使用该方法侦听这些事件ndb_mgm_listen_event ()。每个日志事件都属于一个类别ndb_mgm_event_category),而且病情严重ndb_mgm_event_severity与它相关联的。每个日志事件也有一个与之关联的级别(0-15)。

输出的日志事件是由哪些日志事件控制的ndb_mgm_listen_event (),ndb_mgm_set_clusterlog_loglevel (),ndb_mgm_set_clusterlog_severity_filter ()

这是一个演示如何监听与备份相关的事件的示例:

int filter[] = {15, NDB_MGM_EVENT_CATEGORY_BACKUP, 0};Int fd = ndb_mgm_listen_event(句柄,过滤器);

结构化的日志事件

MGM API中结构化日志事件的处理包括以下步骤:

  1. 创建一个NdbLogEventHandle使用ndb_mgm_create_logevent_handle ()

  2. 使用。等待和存储日志事件ndb_logevent_get_next ()

  3. 该结构中有日志事件数据ndb_logevent。特定于特定事件的数据存储在一个结构间的联合中;使用ndb_logevent:类型决定哪个结构有效。

以下示例代码演示了侦听与备份相关的事件:

int filter[] = {15, NDB_MGM_EVENT_CATEGORY_BACKUP, 0};NdbLogEventHandle le_handle= ndb_mgm_create_logevent_handle(handle, filter);struct ndb_logevent勒;Int r= ndb_logevent_get_next(le_handle, &le, 0);if(r < 0) /* error */ else if(r == 0) /* no event */ switch(le.type) {case NDB_LE_BackupStarted:…le.BackupStarted.starting_node;…le.BackupStarted.backup_id;打破;案例NDB_LE_BackupFailedToStart:…… le.BackupFailedToStart.error; break; case NDB_LE_BackupCompleted: ... le.BackupCompleted.stop_gci; break; case NDB_LE_BackupAborted: ... le.BackupStarted.backup_id; break; default: break; }

有关更多信息,请参见3.2.1节“日志事件功能”

中列出了可用的日志事件类型Ndb_logevent_type类型,以及在文件中/storage/ndb/include/mgmapi/ndb_logevent.h.在NDB群集源中。