现在的位置: 首页 > 综合 > 正文

获取MS故障转移群集节点列表

2013年07月21日 ⁄ 综合 ⁄ 共 1313字 ⁄ 字号 评论关闭

微软故障转移群集是Windows平台物美价廉的有效保障,随着群集中的节点增加,部署的企业应用的增加,群集应用程序的配置会占用很大的维护工作量。

为什么不能自动配置群集节点呢?因为你没有想到!很多时候没有做不到,只有想不到~!

微软SDK中提供了FailOver Cluster API,完全可以胜任这样的任务!

这里我们演示一下如何通过API获得群集中的节点和IP地址:

首先,需要连接到群集:

HCLUSTER _hCluster = OpenCluster(NULL);
std::cout << "群集句柄:" << 	_hCluster << std::endl;

获取群集信息:

	WCHAR chClusterName[MAX_PATH];
	DWORD dwLen = MAX_PATH;
	CLUSTERVERSIONINFO clusterInfo;
	DWORD dwRet = GetClusterInformation(_hCluster,chClusterName,&dwLen,&clusterInfo);

	if(ERROR_SUCCESS==dwRet)
	{
		std::cout << "群集名称:" << 	CW2A(chClusterName) << std::endl;
		std::cout << "群集版本:" << 	clusterInfo.MajorVersion << "." << clusterInfo.MinorVersion << std::endl;
	}

获取群集节点列表:

//使用封装函数
void EnumResources(CLUSTER_ENUM typ)
{
	HCLUSENUM hClusterEnum = ClusterOpenEnum(_hCluster,typ);
	if(hClusterEnum)
	{
		std::cout << "资源枚举句柄:" << hClusterEnum << std::endl;

		DWORD dwNodeCount = ClusterGetEnumCount(hClusterEnum);

		std::cout << "资源枚举数目:" << dwNodeCount << std::endl;

		for(int nPos=0;nPos<dwNodeCount;nPos++)
		{			
			DWORD dwType;
			WCHAR wchName[MAX_PATH];
			DWORD wlen=MAX_PATH;
			DWORD dwRetEnum = ClusterEnum(hClusterEnum,nPos,&dwType,wchName,&wlen);

			if(dwRetEnum==ERROR_SUCCESS)
			{
				std::cout << "资源" << 	nPos << ":" << CW2A(wchName) << std::endl;

				if(typ==CLUSTER_ENUM_NODE)
				{
					GetIpByHostName(wchName);
				}
			}
		}
		ClusterCloseEnum(hClusterEnum);
	}
}
//枚举群集节点:
std::cout << "\tCLUSTER_ENUM_NODE" << std::endl;
EnumResources(CLUSTER_ENUM_NODE);

这样我们就得到了群集中的所有节点列表,后面就可以按需扩展实现其他功能了!

抱歉!评论已关闭.