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 引数で指定される情報の格納に適した変数型にする必要があります。これは出力引数で、クラスタの情報を格納します。関数の実行に失敗した場合、出力引数に値は返されません。scha_cluster_get() 関数が返す情報を格納するために割り当てられたメモリーは、scha_cluster_get() 関数に使用したハンドルで scha_cluster_close() を呼び出すまで、そのまま残ります。
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 引数に使用できるマクロを示します。ここでは出力引数および追加引数の型を説明します。構造体と enum 型は、scha_calls(3HA) で説明されています。
出力引数の型は 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、最初の整数は弱い制限値、2 番目の整数は強い制限値です。強い制限値を指定しない場合、強い制限値の値として -1 が表示されます。弱い制限値を指定しない場合、弱い制限値の値として 0 が表示されます。
出力引数の型は scha_str_array_t** です。
このマクロは、特定のノードの負荷制限値 (/ 区切り) と制限名を返します。nodename である、char * 型の追加の引数が必要です。
文字列配列の出力の各要素の書式は "%s=%d/%d" で、文字列は指定したノードに定義されている制限名、最初の整数は弱い制限値、2 番目の整数は強い制限値です。強い制限値を指定しない場合、強い制限値の値として -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 役割に基づくアクセス制御 (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() 関数を使用して、全クラスタノードの名前を取得します。この関数を使用すると、ノードが稼働しているかどうかもわかります。
このコード例では、制限が構成されている各クラスタノードに対し、mylimit という limitname に構成されている弱い負荷制限値と強い負荷制限値も出力されます。各ノードの負荷制限値の出力形式は 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)