Freigeben über


MoveClusterGroupEx-Funktion (clusapi.h)

Erweitert die vorhandene MoveClusterGroup-Methode um das Hinzufügen von Flags und einem Puffer. Die Flags steuern das Verhalten der Clusterfailoverrichtlinie, und der Eingabepuffer ermöglicht es dem Client, spezielle Anweisungen an die Ressourcen in der Gruppe zu senden.

Syntax

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

Parameter

[in] hGroup

Das Handle für eine Clustergruppe.

[in, optional] hDestinationNode

Das Handle zu einem Clusterknoten, das den Knoten angibt, in den die Gruppe verschoben werden soll. Dieser Parameter ist optional. Wenn NULL übrig bleibt, verschenkt der Cluster die Gruppe gemäß den failoverrichtlinien, die für den Cluster und für diese bestimmte Gruppe konfiguriert sind, auf den am besten geeigneten Knoten.

[in] dwMoveFlags

Eine bitweise Kombination der Flags, die die Failoverrichtlinie in Bezug auf diesen Verschiebungsvorgang beeinflussen.

CLUSAPI_GROUP_MOVE_IGNORE_RESOURCE_STATUS (0x00000001)

Erzwingt das Verschieben der Gruppe, auch wenn eine Ressource angegeben hat, dass sie im aktuellen Zustand auf dem aktuellen Knoten "gesperrt" sein soll, und beendet die Ressource bei Bedarf.

CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR (0x00000002)

Wenn die Gruppe ihren persistenten Zustand auf dem Zielknoten nicht erreicht (unabhängig davon, ob sie mit hDestinationNode angegeben oder vom Cluster ausgewählt wurde), wird die Gruppe an den Quellknoten zurückgegeben und dort in den persistenten Zustand versetzt.

CLUSAPI_GROUP_MOVE_QUEUE_ENABLED (0x00000004)

Wenn eine Ressourcen-DLL in der Gruppe angibt, dass die Verschiebung zu diesem Zeitpunkt nicht möglich ist, aber in naher Zukunft möglich ist, wird diese Verschiebung im Clusterdienst in die Warteschlange eingereiht und bei Bedarf fortgesetzt, bis der Verschiebungsvorgang abgeschlossen oder vom Client abgebrochen wird.

CLUSAPI_GROUP_MOVE_HIGH_PRIORITY_START (0x00000008)

Versetzt diese Gruppe so schnell wie möglich in den persistenten Zustand auf dem Zielknoten, ohne dass implementierungsspezifische Richtlinien beachtet werden, die die Reihenfolge und/oder Priorisierung von Gruppen in ihre persistenten Zustände steuern.

CLUSAPI_GROUP_MOVE_FAILBACK (0x00000010)

Reserviert.

[in, optional] lpInBuffer

Eine Eigenschaftenliste , die Anweisungen zum Verschieben von Vorgängen für bestimmte Ressourcen innerhalb der Gruppe enthält. Die Anweisungen sind in Eigenschaftswerten enthalten. Ressourcen in der Gruppe durchsuchen die Eigenschaftenliste nach Eigenschaftennamen, die sie für Verschiebevorgänge unterstützen, und interpretieren dann die Anweisungen im zugeordneten Eigenschaftswert. Die von einer Ressource in einem MoveClusterGroupEx-Vorgang unterstützten Eigenschaften beziehen sich nicht auf die privaten Eigenschaften, die einer Ressource zugeordnet sind.

[in] cbInBufferSize

Die Größe von lpInBuffer in Bytes.

Rückgabewert

MoveClusterGroupEx gibt ERROR_IO_PENDING zurück, wenn der Verschiebungsbefehl akzeptiert wurde und ausgeführt wird. MoveClusterGroupEx gibt einen Fehlercode ungleich null zurück, wenn der Verschiebungsbefehl sofort ohne Änderungen am Gruppenstatus abgelehnt wurde. Bei instance geschieht dies, wenn hDestinationNode zum Zeitpunkt der Verschiebungsanforderung nicht up ist.

Hinweise

MoveClusterGroupEx schlägt sofort mit einem Fehler ERROR_CLUSTER_RESOURCE_LOCKED_STATUS fehl, wenn das flag CLUSAPI_GROUP_MOVE_IGNORE_RESOURCE_STATUS nicht festgelegt ist und eine Ressource in der Gruppe online ist und angegeben hat, dass sie im aktuellen Zustand "gesperrt" ist.

Nachdem MoveClusterGroupExERROR_IO_PENDING zurückgegeben hat, gibt es eine Reihe möglicher Ergebnisse, darunter:

  • Der Verschiebungsvorgang konnte erfolgreich sein, und die Gruppe könnte ihren persistenten Zustand auf dem Zielknoten erreichen.
  • Der Verschiebungsvorgang kann fehlschlagen, da die Gruppe ihren persistenten Zustand auf dem Zielknoten nicht erreichen kann. Wenn dwMoveFlags keine CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR enthält, führt der Cluster geeignete Maßnahmen (gemäß konfigurierter Richtlinien) aus, um die Gruppe in den persistenten Zustand zu versetzen, z. B. auf anderen Knoten im Cluster. Wenn dwMoveFlagsCLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR enthält, versucht der Cluster, die Gruppe auf dem Quellknoten in den persistenten Zustand zu versetzen. Wenn dies fehlschlägt, führt der Cluster geeignete Maßnahmen (gemäß konfigurierter Richtlinien) aus, um die Gruppe in den persistenten Zustand zu versetzen, z. B. auf anderen Knoten im Cluster.
  • Der Verschiebungsvorgang kann in die Warteschlange eingereiht werden, wenn eine Ressource angibt, dass sie nicht sofort verschoben werden kann und das flag CLUSAPI_GROUP_MOVE_QUEUE_ENABLED festgelegt ist.
  • Der Verschiebungsvorgang kann von einer Ressource in der Gruppe abgelehnt werden, sodass die Gruppe auf dem Quellknoten in den persistenten Zustand versetzt wird, ohne die Fehleranzahl zu erhöhen oder Fehlerrichtlinien auszulösen. Dies kann nicht auftreten, wenn das flag CLUSAPI_GROUP_MOVE_IGNORE_RESOURCE_STATUS festgelegt ist.
Führen Sie für eine Livemigration eines virtuellen Computers die folgenden Schritte aus:
  1. Legen Sie im dwMoveFlags-Parameter die Flags CLUSAPI_GROUP_MOVE_RETURN_TO_SOURCE_NODE_ON_ERROR, CLUSAPI_GROUP_MOVE_QUEUE_ENABLED und CLUSAPI_GROUP_MOVE_HIGH_PRIORITY_START fest.
  2. Fügen Sie im lpInBuffer-Parameter der Eigenschaftsliste einen Ressourcentyp namens "Virtual Machine" oder "Virtual Machine Configuration" hinzu, der einen CLUSTER_PROPERTY_FORMAT Enumerationswert von CLUSPROP_FORMAT_DWORD (der das Datenformat der Eigenschaft darstellt) und einen Eigenschaftswert von VmResdllContextLiveMigration (aus der VM_RESDLL_CONTEXT Enumeration möglicher VM-Aktionen) angibt.
MoveClusterGroupEx erfordert, dass dem Client Vollzugriff im Clustersicherheitsdeskriptor gewährt wird.

Beispiele

#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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Nicht unterstützt
Unterstützte Mindestversion (Server) Windows Server 2012
Zielplattform Windows
Kopfzeile clusapi.h
Bibliothek ClusAPI.lib
DLL ClusAPI.dll