MoveClusterGroupEx 函数 (clusapi.h)

通过添加标志和缓冲区来扩展现有的 MoveClusterGroup 方法。 标志控制群集故障转移策略的行为,输入缓冲区使客户端能够向组中的资源发送特殊指令。

语法

DWORD MoveClusterGroupEx(
  [in]           HGROUP hGroup,
  [in, optional] HNODE  hDestinationNode,
  [in]           DWORD  dwMoveFlags,
  [in, optional] PBYTE  lpInBuffer,
  [in]           DWORD  cbInBufferSize
);

参数

[in] hGroup

群集组的句柄。

[in, optional] hDestinationNode

群集节点的句柄,指示组应移动到的节点。 此参数是可选的。 如果保留 NULL,则群集将根据为群集和此特定组配置的故障转移策略,将组移动到最合适的节点。

[in] dwMoveFlags

影响此移动操作的故障转移策略的标志的按位组合。

CLUSAPI_GROUP_MOVE_IGNORE_RESOURCE_STATUS (0x00000001)

强制组移动(即使资源已指示该资源应处于当前节点上的当前状态“锁定”),并在必要时终止该资源。

CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR (0x00000002)

如果组未能在目标节点上达到其持久性状态, (无论是使用 hDestinationNode 指定还是群集) 选择,将组返回到源节点,并将其置于该节点的永久状态。

CLUSAPI_GROUP_MOVE_QUEUE_ENABLED (0x00000004)

如果组中的资源 DLL 指示目前无法移动,但在不久的将来可能进行移动,则将在群集服务中将此移动排入队列,并在认为合适时继续重试,直到移动操作完成或客户端取消。

CLUSAPI_GROUP_MOVE_HIGH_PRIORITY_START (0x00000008)

使此组尽快在目标节点上进入其持久状态,而不考虑特定于实现的策略,这些策略控制使组进入其持久状态的排序和/或优先级。

CLUSAPI_GROUP_MOVE_FAILBACK (0x00000010)

保留。

[in, optional] lpInBuffer

一个 属性列表 ,其中包含组中特定资源的移动操作说明。 说明包含在属性值中。 组中的资源在属性列表中搜索它们支持移动操作的属性名称,然后解释关联的属性值中的说明。 MoveClusterGroupEx 操作中资源支持的属性与与资源关联的私有属性无关。

[in] cbInBufferSize

lpInBuffer 的大小(以字节为单位)。

返回值

MoveClusterGroupEx 返回 ERROR_IO_PENDING 移动命令是否已接受且正在进行。 如果移动命令立即被拒绝且组状态没有更改,MoveClusterGroupEx 将返回非零错误代码。 例如,如果 hDestinationNode 在移动请求时未启动,则会发生这种情况。

注解

如果未设置CLUSAPI_GROUP_MOVE_IGNORE_RESOURCE_STATUS标志,并且组中的任何资源处于联机状态,并且已指示其处于当前状态“锁定”,MoveClusterGroupEx 立即失败并出现错误ERROR_CLUSTER_RESOURCE_LOCKED_STATUS。

MoveClusterGroupEx 返回ERROR_IO_PENDING后,有许多可能的结果,包括:

  • 移动操作可能会成功,并且组可以在目标节点上达到其持久状态。
  • 移动操作可能会失败,组无法在目标节点上达到其持久状态。 如果 dwMoveFlags 不包括 CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR,则群集将根据配置的策略 (采取适当的操作) ,使组进入其持久性状态,可能在群集中的其他节点上。 如果 dwMoveFlags 包含 CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR,则群集将尝试将组置于源节点上的持久状态。 如果此操作失败,则群集将根据配置的策略 (采取适当的操作,) 将组置于其持久性状态(可能在群集中的其他节点上)。
  • 如果某个资源指示无法立即移动并且设置了 CLUSAPI_GROUP_MOVE_QUEUE_ENABLED 标志,则移动操作可能会排队。
  • 移动操作可能被组中的资源拒绝,从而在源节点上将组返回到其持久状态,而不会递增任何失败计数或触发任何失败策略。 如果设置了 CLUSAPI_GROUP_MOVE_IGNORE_RESOURCE_STATUS 标志,则不会发生这种情况。
对于虚拟机的实时迁移,请执行以下步骤:
  1. dwMoveFlags 参数中,设置 CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERRORCLUSAPI_GROUP_MOVE_QUEUE_ENABLEDCLUSAPI_GROUP_MOVE_HIGH_PRIORITY_START 标志。
  2. lpInBuffer 参数中,将名为“Virtual Machine”或“Virtual Machine Configuration”的资源类型添加到属性列表中,该类型指定 CLUSTER_PROPERTY_FORMAT 枚举值 CLUSPROP_FORMAT_DWORD (,该值表示属性的数据格式) ,属性值为 VmResdllContextLiveMigration () VM_RESDLL_CONTEXT枚举中的 可能虚拟机操作) 。
MoveClusterGroupEx 要求在群集安全描述符中向客户端授予完全访问权限。

示例

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <ClusAPI.h>


#define DemoResDllTypeName L"dummy"
#define DemoGroupName L"DemoGroup"


int __cdecl main( void )
{
    HCLUSTER hCluster= NULL;
    HGROUP hGroup = NULL;
    DWORD error = 0;

    hCluster = OpenCluster( NULL );
    if ( hCluster == NULL )
    {
        error = GetLastError();
        wprintf( L"Failed to open cluster: 0x%x\n", error );
        goto Cleanup;
    }

    hGroup = OpenClusterGroup( hCluster, DemoGroupName );
    if ( hGroup == NULL )
    {
        error = GetLastError();
        wprintf( L"Failed to open cluster group " DemoGroupName L": 0x%x\n", error );
        goto Cleanup;
    }


    // Move Group example
    error = MoveClusterGroupEx( hGroup,
                                NULL,
                                CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR | CLUSAPI_GROUP_MOVE_IGNORE_RESOURCE_STATUS,
                                NULL,
                                0);

    if ( error == ERROR_IO_PENDING  )
    {
        wprintf( L"Group move pending" DemoGroupName L": 0x%x\n", error );
        error = ERROR_SUCCESS;
    }
    else if ( error != ERROR_SUCCESS)
    {
        wprintf( L"Failed to move group" DemoGroupName L": 0x%x\n", error );
    }
    else 
    {
        wprintf( L"Group move completed" DemoGroupName L": 0x%x\n");
    }

Cleanup:

    if ( hGroup != NULL )
    {
        CloseClusterGroup( hGroup );
        hGroup = NULL;
    }
    if ( hCluster != NULL )
    {
        CloseCluster( hCluster );
        hCluster = NULL;
    }

    return (int)error;
}

要求

要求
最低受支持的客户端 无受支持的版本
最低受支持的服务器 Windows Server 2012
目标平台 Windows
标头 clusapi.h
Library ClusAPI.lib
DLL ClusAPI.dll