Program aracılığıyla Service Fabric kümeyi ölçeklendirme
Service Fabric azure'da çalışan kümeler, sanal makine ölçek kümelerinin üzerine inşa edilmiştir. Küme ölçeklendirme, küme Service Fabric el ile veya otomatik ölçeklendirme kurallarıyla nasıl ölçeklendirilebilir? Bu makalede, daha gelişmiş bir senaryo olan akıcı Azure işlem SDK'sı kullanılarak kimlik bilgilerini yönetme ve kümenin ölçeğini açma veya ölçeklendirme açıklanmıştır. Genel bakış için Azure ölçeklendirme işlemlerini koordine eden programlı yöntemleri okuyun.
Not
Bu makalede, Azure ile etkileşim kurmak için önerilen PowerShell modülü olan Azure Az PowerShell modülü kullanılır. Az PowerShell modülünü kullanmaya başlamak için Azure PowerShell’i yükleyin. 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 ele alan bir hizmet yazmanın zorluklarından biri, hizmetin etkileşimli oturum açma bilgileri olmadan sanal makine ölçek kümesi kaynaklarına erişemeden erişe girmesidir. Ölçeklendirme hizmeti Service Fabric kendi uygulama ayarlarını değiştirse de ölçek kümesine erişmek için kimlik bilgileri Service Fabric kümeye erişmek kolaydır. Oturum açma için Azure CLI ile oluşturulan bir hizmet sorumlularını kullanabilirsiniz.
Aşağıdaki adımlarla bir hizmet sorumlusu oluşturulabilir:
- Sanal makine ölçek kümesine erişimi olan bir kullanıcı olarak Azure CLI'de (
az login) oturum açma - Ile hizmet sorumlusu oluşturma
az ad sp create-for-rbac- AppId (başka bir yerde 'istemci kimliği' olarak adlandırılan), adı, parolayı ve kiracıyı daha sonra kullanmak üzere not edin.
- Ayrıca abonelik kimliğiniz de gerekir. Bu kimlik,
az account list
Fluent işlem kitaplığı aşağıdaki gibi bu kimlik bilgilerini kullanarak oturum açmasını sağlar (gibi temel akıcı Azure türlerinin IAzure 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çtıktan sonra, ölçek kümesi örnek sayısı aracılığıyla sorgu AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId).Capacity olabilir.
Ö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ştirdikten sonra Azure'daki sanal makine ölçek kümesi komutuyla Update-AzVmss güncelleştirilebilir.
El ile düğüm eklerken olduğu gibi, ölçek kümesi şablonu yeni örnekleri kümeye otomatik olarak eklemek için uzantılar içerir, çünkü ölçek kümesi şablonu yeni bir Service Fabric düğümü başlatmak için gereken tek şey Service Fabric gerekir.
Ölçeği genişletme
Ölçeği genişletme, ö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 belirtildiği gibi, Service Fabric kaldırılan düğümleri yalnızca Gold veya Silver dayanıklılıkla 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ümeyle etkileşim kurmanız gerekir.
Düğümü kapatmaya hazırlamak için kaldırılacak düğümü bulma (en son eklenen sanal makine ölçek kümesi örneği) ve düğümün devre dışı bırakılması gerekir. Sanal makine ölçek kümesi örnekleri eklendiklerine göre numaralandırıldı. Bu nedenle, düğümlerin adlarında (temel alınan sanal makine ölçek kümesi örnek adlarına göre) sayı soneki karşılaştırarak 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ı örnek ve önceki örnek kullanılarak devre FabricClient dışı IAzure bırakılabilir ve 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 yaklaşımı tercih edilirse burada da sanal makine ölçek kümesi kapasitesini değiştirmek için PowerShell cmdlet'leri kullanılabilir. Sanal makine örneği kaldırıldıktan sonra Service Fabric durumu kaldırılabilir.
await client.ClusterManager.RemoveNodeStateAsync(mostRecentLiveNode.NodeName);
Sonraki adımlar
Kendi otomatik ölçeklendirme mantığınızı uygulamaya başlamanız için aşağıdaki kavramlar ve kullanışlı API'ler hakkında bilgi sahibi olun:
- El ile veya otomatik ölçeklendirme kurallarıyla ölçeklendirme
- .NET için Azure Yönetim Kitaplıkları (Service Fabric kümenin temel alınan sanal makine ölçek kümeleri ile etkileşim kurmak için yararlıdır)
- System.Fabric.FabricClient (bir Service Fabric ve düğümleriyle etkileşim kurmak için yararlıdır)