cc [flags…] –I /usr/cluster/include file –L /usr/cluster/lib –l scha#include <scha.h>scha_err_t scha_cluster_open( scha_cluster_t *handle);
scha_err_t scha_cluster_open_zone(const char *cluster, scha_cluster_t *handlep);
scha_err_t scha_cluster_get(scha_cluster_t handle, const char ** tag, ...);
scha_err_t scha_cluster_get_zone(const char *cluster, scha_cluster_t handlep, const char *cluster_tag, ...);
scha_err_t scha_cluster_close(scha_cluster_t handle);
将 scha_cluster_open()、scha_cluster_get() 和 scha_cluster_close() 函数一起使用可以获取有关群集的信息。
scha_cluster_open() 初始化群集访问,并返回访问句柄以供 scha_cluster_get() 使用。handle 参数是变量的地址,用于保存函数调用返回的值。
scha_cluster_get() 根据 tag 参数的指示访问群集信息。 handle 参数是从对 scha_cluster_open() 的之前调用返回的值。tag 参数是字符串值,在 scha_tags.h 头文件中由宏定义。tag 之后的参数取决于 tag 参数的值。
您可能需要提供 tag 参数后面的其他参数,以指示将从中检索信息的群集节点。参数列表中的最后一个参数将成为适用于保存 tag 参数指示的信息的类型。该参数是群集信息的输出参数。如果函数失败,不会为输出参数返回值。对用于 scha_cluster_get() 函数的句柄调用 scha_cluster_close() 之前,所分配的用于保存 scha_cluster_get() 函数返回的信息的内存将保持不变。
scha_cluster_close() 将获取从对 scha_cluster_get() 函数的之前调用返回的 handle 参数。该函数使句柄无效,并将用来返回值而分配的内存释放给使用句柄进行的 scha_cluster_get() 调用。请注意,如果需要返回值,则为每个 get 调用分配内存。在一个调用中为返回值而分配的空间不会被后续调用覆盖和重新使用。
scha_cluster_open_zone() 和 scha_cluster_get_zone() 函数的作用分别与 scha_cluster_open() 和 scha_cluster_get() 相同,且带有一个额外的 cluster 参数,用于指定资源组存在于其中且您要在其上执行操作的区域群集的名称。当代码在全局区域中执行,但需要在指定区域群集上操作时,这些函数十分有用。无法在某一区域群集中使用它们来访问其他区域群集。
如果 scha_cluster_open_zone() 或 scha_cluster_get_zone() 的 cluster 参数为 NULL,则会对从中执行调用的群集执行查询;换句话说,带有 NULL 参数的调用分别等效于 scha_cluster_open() 或 scha_cluster_get()。
要关闭由 scha_cluster_open_zone() 返回的句柄,请使用 scha_cluster_close()。不需要使用 cluster 参数。
在 scha_tags.h 中定义的可用作 tag 参数的宏如下所示。指示输出参数和任何其他参数的类型。scha_calls(3HA) 中介绍了结构和 enum 类型。
输出参数类型为 scha_str_array_t**。
该宏返回在群集中定义的所有 loadlimit 名称。
输出参数类型为 scha_uint_array_t**。
该宏返回群集中所有节点的数字节点标识符。
输出参数类型为 scha_str_array_t**。
该宏返回群集中所有节点的名称。
输出参数类型为 scha_str_array_t**。
该宏返回所有群集节点的主机名,根据这些主机名在群集互连上找到节点。
输出参数类型为 scha_str_array_t**。
该宏返回群集中定义的所有专用字符串的名称。有关专用字符串的更多信息,请参见 clpstring(1CL) 手册页。
输出参数类型为 scha_str_array_t**。
该宏返回在群集上被管理的所有资源组的名称。
输出参数类型为 scha_str_array_t**。
该宏返回在群集上注册的所有资源类型的名称。
输出参数类型为 char**。
该宏返回群集的名称。
输出参数类型为 scha_str_array_t**。
该宏为指定的限制名称返回群集中所有节点的硬负载限制值。它需要作为负载限制名称字符串的其他参数,其类型为 char *。
字符串数组输出的每个元素的格式均为 "%s=%d",其中,左侧字符串是 nodename,右侧整数是该节点上指定的限制名称的硬负载限制值。如果没有指定硬限制,将显示值 -1 作为硬限制。
输出参数类型为 scha_str_array_t**。
该宏根据指定的限制名称为群集中的所有节点返回硬负载和软负载限制值(以 / 分隔)。它需要作为负载限制名称字符串的其他参数,其类型为 char *。
字符串数组输出的每个元素都是 "%s=%d/%d" 格式的字符串,其中,左侧的字符串是 nodename,第一个整数是软限制,第二个整数是硬限制。如果没有指定硬限制,将显示值 -1 作为硬限制。如果没有指定软限制,将显示值 0 作为软限制。
输出参数类型为 scha_str_array_t**。
该宏为特定节点返回负载限制(用 / 分隔)和限制名称。它需要类型为 char * 的 nodename 的附加参数。
字符串数组输出的每个元素都是 "%s=%d/%d" 格式的字符串,其中,字符串是指定节点上定义的限制名称,第一个整数是软限制值,第二个整数是硬限制值。如果没有指定硬限制,将显示值 -1 作为硬限制。如果没有指定软限制,将显示值 0 作为软限制。
输出参数类型为 uint_t*。
该宏返回在其中执行命令的节点的数字节点标识符。
输出参数类型为 uint_t*。附加参数的类型为 char *。该宏需要一个作为群集节点名称的附加参数。
该宏返回由名称指示的节点的数字节点标识符。
输出参数类型为 char**。
该宏返回在其中执行函数的群集节点的名称。
输出参数类型为 char**。附加参数的类型为 uint_t。该附加参数是数字群集节点标识符。
该宏返回由数字标识符指示的节点的名称。
输出参数类型为 scha_node_state_t*。
该宏返回 SCHA_NODE_UP 或 SCHA_NODE_DOWN ,具体取决于在其中执行命令的节点的状态。
输出参数类型为 scha_node_state_t*。附加参数的类型为 char*。该宏需要作为群集节点名称的其他未标记参数。
根据命名节点的状态,该宏返回 SCHA_NODE_UP 或 SCHA_NODE_DOWN 。
输出参数类型为 char**。
该宏返回主机名,根据该主机名在群集互连上找到在其上运行命令的节点。
输出参数类型为 char**。附加参数的类型为 char *。该宏需要作为群集节点名称的其他未标记参数。
该宏返回主机名,根据该主机名在群集互连上找到命名的节点。
输出参数类型为 char**。
该宏返回专用字符串的明文值。它需要提供专用字符串名称的附加参数,其类型为 char*。超级用户以外的用户需要具有 solaris.cluster.modify 基于角色的访问控制 (role-based access control, RBAC) 授权才能使用该查询标记。有关专用字符串的更多信息,请参见 clpstring(1CL) 手册页。
输出参数类型为 char**。
该宏返回 resource_security 群集属性的当前设置。
输出参数类型为 scha_str_array_t**。
该宏为指定的限制名称返回群集中所有节点的软负载限制值。它需要作为负载限制名称字符串的其他参数,其类型为 char *。
字符串数组输出的每个元素的格式均为 "%s=%d",其中,左侧字符串是 nodename,右侧整数是该节点上指定的限制名称的软负载限制值。如果没有指定软限制,将显示值 0 作为软限制。
输出参数类型为 int*。
该宏返回 RGM 用于日志消息的 syslog(3C) 设备的编号。返回的值为 24,它对应于 LOG_DAEMON 设备值。
该函数成功。
有关其他错误代码的描述,请参见 scha_calls(3HA)。
以下示例使用 scha_cluster_get() 函数获取所有群集节点的名称。该函数还确定节点是处于打开状态还是关闭状态。
该代码示例还显示为每个群集节点(在其中配置该限制)的 limitname(名为 mylimit)配置的软负载限制和硬负载限制设置。每个节点的负载限制值按以下格式显示:nodename=softlimit/[hardlimit],其中,如果没有设置硬限制,则 hardlimit 值是没有限制的 (-1)。
#include <scha.h> #include <stdio.h> #include <stdlib.h> main() { scha_err_t err; scha_node_state_t node_state; scha_str_array_t *all_nodenames; scha_cluster_t handle; int ix; const char *str; scha_str_array_t *load_limits; err = scha_cluster_open(&handle); if (err != SCHA_ERR_NOERR) { fprintf(stderr, "FAILED: scha_cluster_open()0); exit(err); } err = scha_cluster_get(handle, SCHA_ALL_NODENAMES, &all_nodenames); if (err != SCHA_ERR_NOERR) { fprintf(stderr, "FAILED: scha_cluster_get()0); exit(err); } for (ix = 0; ix < all_nodenames->array_cnt; ix++) { err = scha_cluster_get(handle, SCHA_NODESTATE_NODE, all_nodenames->str_array[ix], &node_state); if (err != SCHA_ERR_NOERR) { fprintf(stderr, "FAILED: scha_cluster_get()" "SCHA_NODESTATE_NODE0); exit(err); } switch (node_state) { case SCHA_NODE_UP: str = "UP"; break; case SCHA_NODE_DOWN: str = "DOWN"; break; } printf("State of node: %s value: %s\n", all_nodenames->str_array[ix], str); } err = scha_cluster_get(handle, SCHA_LOADLIMIT_PROPS, "mylimit", &load_limits); printf("\n\nLoad limits settings for limitname 'mylimit':\n\n"); for (ix = 0; ix < load_limits->array_cnt; ix++) { printf("%s\n", load_limits->str_array[ix]); } }
头文件
库
有关以下属性的描述,请参见 attributes(5):
|
scha_cluster_get(1HA)、scha_calls(3HA)、scha_cluster_getlogfacility(3HA )、scha_cluster_getnodename(3HA)、scha_strerror(3HA)、syslog(3C)、attributes(5)、rg_properties(5)