Service Fabric kümesini program aracılığıyla ölçeklendirme

Azure'da çalışan Service Fabric kümeleri, sanal makine ölçek kümelerinin üzerine kurulmuştur. Küme ölçeklendirme , Service Fabric kümelerinin el ile veya otomatik ölçeklendirme kurallarıyla nasıl ölçeklendirilebileceğini açıklar. Bu makalede, daha gelişmiş bir senaryo olan akıcı Azure işlem SDK'sını kullanarak kimlik bilgilerinin nasıl yönetildiği ve kümenin nasıl ölçeklendirildiği veya genişletildiği açıklanmaktadır. Genel bakış için Azure ölçeklendirme işlemlerini koordine etmek için programlı yöntemleri okuyun.

Not

Azure ile etkileşim kurmak için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz . Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

Kimlik bilgilerini yönetme

Ölçeklendirmeyi işlemek için hizmet yazmanın bir zorluğu, hizmetin etkileşimli oturum açma olmadan sanal makine ölçek kümesi kaynaklarına erişebilmesi gerektiğidir. Ölçeklendirme hizmeti kendi Service Fabric uygulamasını değiştiriyorsa Service Fabric kümesine erişmek kolaydır, ancak ölçek kümesine erişmek için kimlik bilgileri gerekir. Oturum açmak için Azure CLI ile oluşturulan bir hizmet sorumlusunu kullanabilirsiniz.

Aşağıdaki adımlarla bir hizmet sorumlusu oluşturulabilir:

  1. Sanal makine ölçek kümesine erişimi olan bir kullanıcı olarak Azure CLI'da (az login) oturum açın
  2. ile hizmet sorumlusu oluşturma az ad sp create-for-rbac
    1. AppId değerini (başka bir yerde 'istemci kimliği' olarak adlandırılır), adı, parolayı ve kiracıyı daha sonra kullanmak üzere not edin.
    2. Ayrıca, ile görüntülenebilen abonelik kimliğiniz de gerekir az account list

Akıcı işlem kitaplığı aşağıdaki gibi bu kimlik bilgilerini kullanarak oturum açabilir (gibi IAzure temel fluent Azure türlerinin Microsoft.Azure.Management.Fluent paketinde olduğunu unutmayın):

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");
}

Oturum açıldıktan sonra ölçek kümesi örnek sayısı aracılığıyla AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId).Capacitysorgulanabilir.

Ölçeği genişletme

Akıcı Azure işlem SDK'sı kullanılarak örnekler yalnızca birkaç çağrıyla sanal makine ölçek kümesine eklenebilir -

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

Alternatif olarak, sanal makine ölçek kümesi boyutu PowerShell cmdlet'leri ile de yönetilebilir. Get-AzVmss sanal makine ölçek kümesi nesnesini alabilir. Geçerli kapasite özelliği aracılığıyla .sku.capacity kullanılabilir. Kapasite istenen değere değiştirildikten sonra Azure'daki sanal makine ölçek kümesi komutuyla Update-AzVmss güncelleştirilebilir.

Bir düğümü el ile eklerken olduğu gibi, ölçek kümesi şablonu yeni örnekleri Service Fabric kümesine otomatik olarak birleştiren uzantılar içerdiğinden, yeni bir Service Fabric düğümü başlatmak için gereken tek şey ölçek kümesi örneği eklemek olmalıdır.

Ölçeği daraltma

Ölçeği daraltma, ölçeği genişletmeye benzer. Gerçek sanal makine ölçek kümesi değişiklikleri pratikte aynıdır. Ancak, daha önce açıklandığı gibi Service Fabric yalnızca Gold veya Silver dayanıklılığına sahip kaldırılan düğümleri otomatik olarak temizler. Bu nedenle Bronz dayanıklılık ölçeğinde kaldırılacak düğümü kapatmak ve ardından durumunu kaldırmak için Service Fabric kümesiyle etkileşime geçmek gerekir.

Düğümü kapatmaya hazırlamak için kaldırılacak düğümün bulunması (en son eklenen sanal makine ölçek kümesi örneği) ve devre dışı bırakılması gerekir. Sanal makine ölçek kümesi örnekleri eklendikleri sırayla numaralandırılır, bu nedenle düğümlerin adlarındaki sayı soneki karşılaştırılarak (temel alınan sanal makine ölçek kümesi örnek adlarıyla eşleşen) daha yeni düğümler bulunabilir.

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();

Kaldırılacak düğüm bulunduktan sonra, aynı FabricClient örnek ve daha önceki örnek kullanılarak devre dışı bırakılabilir ve IAzure kaldırılabilir.

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(); 

Ölçeği genişletmede olduğu gibi, bir betik oluşturma yaklaşımı tercih edilirse sanal makine ölçek kümesi kapasitesini değiştirmeye yönelik PowerShell cmdlet'leri de burada kullanılabilir. Sanal makine örneği kaldırıldıktan sonra Service Fabric düğüm durumu kaldırılabilir.

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

Sonraki adımlar

Kendi otomatik ölçeklendirme mantığınızı uygulamaya başlamak için aşağıdaki kavramlar ve yararlı API'ler hakkında bilgi edinin: