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 fluent Azure işlem SDK'sını kullanarak kimlik bilgilerinin nasıl yönetildiği ve kümenin nasıl ölçeklendirildiği açıklanır. Genel bakış için Azure ölçeklendirme işlemlerini koordine etmeye yönelik programlı yöntemleri okuyun.

Not

Azure ile etkileşime geçmek 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, ancak ölçek kümesine erişmek için kimlik bilgileri gerekiyorsa Service Fabric kümesine erişmek kolaydır. 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 sorumlusunu 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ştirmeye yönelik 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 neredeyse aynıdır. Ancak, daha önce de açıklandığı gibi Service Fabric kaldırılan düğümleri yalnızca Gold veya Silver dayanıklılığıyla 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 (en son eklenen sanal makine ölçek kümesi örneği) bulunması 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: