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 旗標,則無法發生這種情況。
- 在 dwMoveFlags 參數中,設定 CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR、 CLUSAPI_GROUP_MOVE_QUEUE_ENABLED和 CLUSAPI_GROUP_MOVE_HIGH_PRIORITY_START 旗標。
- 在 lpInBuffer 參數中,將 新增至屬性清單中名為 “Virtual Machine” 或 “Virtual Machine Configuration” 的資源類型,以指定CLUSPROP_FORMAT_DWORD (的CLUSTER_PROPERTY_FORMAT列舉值,其表示屬性的數據格式) ,以及 vmResdllContextLiveMigration (的VM_RESDLL_CONTEXT列舉) 。
範例
#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 |