共用方式為


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 不是 Up,就會發生這種情況。

備註

如果未設定 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” 的資源類型,以指定CLUSPROP_FORMAT_DWORD (的CLUSTER_PROPERTY_FORMAT列舉值,其表示屬性的數據格式) ,以及 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
程式庫 ClusAPI.lib
Dll ClusAPI.dll