Megosztás a következőn keresztül:


Service Fabric-fürt programozott skálázása

Az Azure-ban futó Service Fabric-fürtök a virtuálisgép-méretezési csoportokra épülnek. A fürtméretezés azt ismerteti, hogyan méretezhetők a Service Fabric-fürtök manuálisan vagy automatikus skálázási szabályokkal. Ez a cikk bemutatja, hogyan kezelheti a hitelesítő adatokat, és hogyan skálázhat ki vagy be egy fürtöt a fluent Azure Compute SDK használatával, ami egy fejlettebb forgatókönyv. Az áttekintéshez olvassa el az Azure skálázási műveletek összehangolásának programozott módszereit.

Feljegyzés

Javasoljuk, hogy az Azure Az PowerShell modult használja az Azure-ral való interakcióhoz. Első lépésként tekintse meg az Azure PowerShell telepítését ismertető témakört. Az Az PowerShell-modulra történő migrálás részleteiről lásd: Az Azure PowerShell migrálása az AzureRM modulból az Az modulba.

Hitelesítő adatok kezelése

A skálázás kezelésére szolgáló szolgáltatás írásának egyik kihívása, hogy a szolgáltatásnak interaktív bejelentkezés nélkül is hozzá kell tudnia férni a virtuálisgép-méretezési csoport erőforrásaihoz. A Service Fabric-fürt elérése egyszerű, ha a skálázási szolgáltatás módosítja a saját Service Fabric-alkalmazását, de a méretezési csoport eléréséhez hitelesítő adatokra van szükség. A bejelentkezéshez használhatja az Azure CLI-vel létrehozott szolgáltatásnevet.

A szolgáltatásnév a következő lépésekkel hozható létre:

  1. Jelentkezzen be az Azure CLI-be (az login) felhasználóként a virtuálisgép-méretezési csoporthoz való hozzáféréssel
  2. A szolgáltatásnév létrehozása a következővel: az ad sp create-for-rbac
    1. Jegyezze fel az appId azonosítót (máshol "ügyfélazonosító"), a nevet, a jelszót és a bérlőt későbbi használatra.
    2. Szüksége lesz az előfizetés-azonosítóra is, amely megtekinthető a következővel: az account list

A fluent számítási kódtár az alábbiak szerint tud bejelentkezni ezekkel a hitelesítő adatokkal (vegye figyelembe, hogy az alapvető fluent Azure-típusok, például IAzure a Microsoft.Azure.Management.Fluent csomagban találhatók):

var credentials = new AzureCredentials(new ServicePrincipalLoginInformation {
                ClientId = AzureClientId,
                ClientSecret = 
                AzureClientKey }, AzureTenantId, AzureEnvironment.AzureGlobalCloud);
IAzure AzureClient = Azure.Authenticate(credentials).WithSubscription(AzureSubscriptionId);

if (AzureClient?.SubscriptionId == AzureSubscriptionId)
{
    ServiceEventSource.Current.ServiceMessage(Context, "Successfully logged into Azure");
}
else
{
    ServiceEventSource.Current.ServiceMessage(Context, "ERROR: Failed to login to Azure");
}

Bejelentkezés után a méretezési csoport példányszáma lekérdezhető a következőn keresztül AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId).Capacity: .

Méretezés

A fluent Azure Compute SDK használatával a példányok csak néhány hívással vehetők fel a virtuálisgép-méretezési csoporthoz –

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);
var newCapacity = (int)Math.Min(MaximumNodeCount, scaleSet.Capacity + 1);
scaleSet.Update().WithCapacity(newCapacity).Apply(); 

A virtuálisgép-méretezési csoport mérete a PowerShell-parancsmagokkal is kezelhető. Get-AzVmss lekérheti a virtuálisgép-méretezési csoport objektumát. Az aktuális kapacitás a .sku.capacity tulajdonságon keresztül érhető el. Miután a kapacitást a kívánt értékre módosította, az Azure-beli virtuálisgép-méretezési csoport frissíthető a Update-AzVmss paranccsal.

A csomópont manuális hozzáadásához hasonlóan a méretezési csoportpéldányok hozzáadásának is csak egy új Service Fabric-csomópont elindításához szükségesnek kell lennie, mivel a méretezési csoportsablon bővítményeket tartalmaz az új példányok Service Fabric-fürthöz való automatikus csatlakoztatásához.

Méretezés a következőben:

A horizontális felskálázás hasonló a horizontális felskálázáshoz. A virtuálisgép-méretezési csoport tényleges változásai gyakorlatilag megegyeznek. De, ahogy korábban szó volt róla, a Service Fabric csak automatikusan törli az eltávolított csomópontokat a Gold vagy Silver tartósságával. A Bronz tartóssági méretezés esetében tehát a Service Fabric-fürttel kell együttműködni az eltávolítandó csomópont leállításához, majd az állapotának eltávolításához.

A csomópont leállításra való előkészítéséhez meg kell találni az eltávolítandó csomópontot (a legutóbb hozzáadott virtuálisgép-méretezési csoportpéldányt), és inaktiválni kell. A virtuálisgép-méretezési csoport példányai a hozzáadásuk sorrendjében vannak számmal eladva, így az újabb csomópontok a csomópontok nevének szám-utótagjának összehasonlításával találhatók (amelyek megfelelnek az alapul szolgáló virtuálisgép-méretezési csoport példányainak neveinek).

using (var client = new FabricClient())
{
	var mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync())
	    .Where(n => n.NodeType.Equals(NodeTypeToScale, StringComparison.OrdinalIgnoreCase))
	    .Where(n => n.NodeStatus == System.Fabric.Query.NodeStatus.Up)
        .OrderByDescending(n =>
        {
            var instanceIdIndex = n.NodeName.LastIndexOf("_");
            var instanceIdString = n.NodeName.Substring(instanceIdIndex + 1);
            return int.Parse(instanceIdString);
        })
	    .FirstOrDefault();

Miután megtalálta az eltávolítandó csomópontot, inaktiválható és eltávolítható ugyanazzal FabricClient a példánysal és a IAzure korábbi példánysal.

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);

// Remove the node from the Service Fabric cluster
ServiceEventSource.Current.ServiceMessage(Context, $"Disabling node {mostRecentLiveNode.NodeName}");
await client.ClusterManager.DeactivateNodeAsync(mostRecentLiveNode.NodeName, NodeDeactivationIntent.RemoveNode);

// Wait (up to a timeout) for the node to gracefully shutdown
var timeout = TimeSpan.FromMinutes(5);
var waitStart = DateTime.Now;
while ((mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Up || mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Disabling) &&
        DateTime.Now - waitStart < timeout)
{
    mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync()).FirstOrDefault(n => n.NodeName == mostRecentLiveNode.NodeName);
    await Task.Delay(10 * 1000);
}

// Decrement VMSS capacity
var newCapacity = (int)Math.Max(MinimumNodeCount, scaleSet.Capacity - 1); // Check min count 

scaleSet.Update().WithCapacity(newCapacity).Apply(); 

A horizontális felskálázáshoz hasonlóan itt is használhatók a virtuálisgép-méretezési csoport kapacitásának módosítására szolgáló PowerShell-parancsmagok, ha a szkriptelési módszer előnyösebb. A virtuálisgép-példány eltávolítása után a Service Fabric-csomópont állapota eltávolítható.

await client.ClusterManager.RemoveNodeStateAsync(mostRecentLiveNode.NodeName);

Következő lépések

Saját automatikus skálázási logika implementálásának megkezdéséhez ismerkedjen meg a következő fogalmakkal és hasznos API-kkal: