Aracılığıyla paylaş


Service Fabric küme yönetimi ile küme kaynak yöneticisi tümleştirmesi

Service Fabric Kümesi Kaynak Yöneticisi, Service Fabric'te yükseltmeleri yönlendirmez, ancak buna dahil olur. Küme Kaynak Yöneticisi'nin yönetime yardımcı olması için ilk yol, kümenin ve içindeki hizmetlerin istenen durumunu izlemektir. Küme Resource Manager, kümeyi istenen yapılandırmaya yerleştiremediğinde sistem durumu raporlarını gönderir. Örneğin, kapasite yetersizse, Küme Kaynak Yöneticisi sorunu gösteren sistem durumu uyarıları ve hataları gönderir. Tümleştirmenin bir diğer parçası da yükseltmelerin çalışma şekliyle ilgili olmalıdır. Küme Resource Manager, yükseltmeler sırasında davranışını biraz değiştirir.

Sistem durumu tümleştirmesi

Küme Kaynak Yöneticisi, hizmetlerinizi yerleştirmek için tanımladığınız kuralları sürekli izler. Ayrıca düğümlerdeki ve kümedeki ve kümedeki her ölçüm için kalan kapasiteyi bir bütün olarak izler. Bu kuralları karşılayamazsa veya kapasite yetersizse sistem durumu uyarıları ve hatalar yayılır. Örneğin, bir düğüm kapasitenin üzerindeyse ve Küme Kaynak Yöneticisi hizmetleri taşıyarak durumu düzeltmeye çalışır. Durumu düzeltemezse, hangi düğümün kapasitenin üzerinde olduğunu ve hangi ölçümler için olduğunu belirten bir sistem durumu uyarısı yayar.

Resource Manager'ın sistem durumu uyarılarının bir diğer örneği de yerleştirme kısıtlamalarının ihlal edilmesidir. Örneğin, bir yerleştirme kısıtlaması (örneğin “NodeColor == Blue”) tanımladıysanız ve Resource Manager bu kısıtlamanın ihlalini algılarsa, bir sistem durumu uyarısı gönderir. Bu, özel kısıtlamalar ve varsayılan kısıtlamalar (Hata Etki Alanı ve Yükseltme Etki Alanı kısıtlamaları gibi) için geçerlidir.

Bu tür bir sistem durumu raporu örneği aşağıda verilmiştır. Bu durumda sistem durumu raporu sistem hizmetinin bölümlerinden birine yöneliktir. Sistem durumu iletisi, bu bölümün çoğaltmalarının geçici olarak çok az Yükseltme Etki Alanına paketlendiğini gösterir.

PS C:\Users\User > Get-ServiceFabricPartitionHealth -PartitionId '00000000-0000-0000-0000-000000000001'


PartitionId           : 00000000-0000-0000-0000-000000000001
AggregatedHealthState : Warning
UnhealthyEvaluations  :
                        Unhealthy event: SourceId='System.PLB', Property='ReplicaConstraintViolation_UpgradeDomain', HealthState='Warning', ConsiderWarningAsError=false.

ReplicaHealthStates   :
                        ReplicaId             : 130766528804733380
                        AggregatedHealthState : Ok

                        ReplicaId             : 130766528804577821
                        AggregatedHealthState : Ok

                        ReplicaId             : 130766528854889931
                        AggregatedHealthState : Ok

                        ReplicaId             : 130766528804577822
                        AggregatedHealthState : Ok

                        ReplicaId             : 130837073190680024
                        AggregatedHealthState : Ok

HealthEvents          :
                        SourceId              : System.PLB
                        Property              : ReplicaConstraintViolation_UpgradeDomain
                        HealthState           : Warning
                        SequenceNumber        : 130837100116930204
                        SentAt                : 8/10/2015 7:53:31 PM
                        ReceivedAt            : 8/10/2015 7:53:33 PM
                        TTL                   : 00:01:05
                        Description           : The Load Balancer has detected a Constraint Violation for this Replica: fabric:/System/FailoverManagerService Secondary Partition 00000000-0000-0000-0000-000000000001 is
                        violating the Constraint: UpgradeDomain Details: UpgradeDomain ID -- 4, Replica on NodeName -- Node.8 Currently Upgrading -- false Distribution Policy -- Packing
                        RemoveWhenExpired     : True
                        IsExpired             : False
                        Transitions           : Ok->Warning = 8/10/2015 7:13:02 PM, LastError = 1/1/0001 12:00:00 AM

Bu sistem durumu iletisinin bize anlattığı şey şudur:

  1. Tüm çoğaltmaların kendileri iyi durumda: Her birinde AggregatedHealthState : Ok
  2. Etki Alanı Yükseltme dağıtım kısıtlaması şu anda ihlal ediliyor. Bu, belirli bir Yükseltme Etki Alanı'nın bu bölümde olması gerekenden daha fazla çoğaltması olduğu anlamına gelir.
  3. İhlale neden olan çoğaltmayı içeren düğüm. Bu durumda Node.8 adlı düğüm söz konusu olur
  4. Bu bölüm için şu anda bir yükseltme yapılıp yapılmadığı ("Şu Anda Yükseltiliyor -- false")
  5. Bu hizmetin dağıtım ilkesi: "Dağıtım İlkesi -- Paketleme". Bu, yerleştirme ilkesine RequireDomainDistribution tabidir. Paketleme , bu durumda DomainDistribution'in gerekli olmadığını gösterir, bu nedenle bu hizmet için yerleştirme ilkesinin belirtilmediğinden eminiz.
  6. Rapor gerçekleştiğinde - 10.08.2015 19:13:02

Bunun gibi bilgiler uyarıyı çalıştırır. Üretim ortamındaki uyarıları kullanarak bir sorun olduğunu size haber vekleyebilirsiniz. Uyarı, hatalı yükseltmeleri algılamak ve durdurmak için de kullanılır. Bu durumda Resource Manager'ın çoğaltmaları neden Yükseltme Etki Alanı'na paketlemesi gerekip gerekmediğini öğrenmek isteriz. Örneğin, diğer Yükseltme Etki Alanlarındaki düğümler devre dışı olduğundan paketleme genellikle geçicidir.

Küme Kaynak Yöneticisi'nin bazı hizmetleri yerleştirmeye çalıştığını ancak işe yaramayan bir çözüm olmadığını varsayalım. Hizmetler yerleştirilemiyorsa, genellikle aşağıdaki nedenlerden biridir:

  1. Bazı geçici koşullar, bu hizmet örneğinin veya çoğaltmanın doğru şekilde yerleştirilip yerleştirilemediğinin
  2. Hizmetin yerleştirme gereksinimleri karşılanamaz.

Bu gibi durumlarda, Küme Resource Manager'daki sistem durumu raporları hizmetin neden yerleştirilmediğini belirlemenize yardımcı olur. Bu işleme kısıtlama eleme dizisi diyoruz. Bu işlem sırasında sistem, hizmeti etkileyen yapılandırılmış kısıtlamalarda yol gösterir ve ortadan kaldırdıklarını kaydeder. Bu şekilde hizmetler yerleştirilemediğinde hangi düğümlerin ortadan kaldırıldığını ve neden kaldırıldığını görebilirsiniz.

Kısıtlama türleri

Şimdi bu sistem durumu raporlarındaki farklı kısıtlamaların her biri hakkında konuşalım. Çoğaltmalar yerleştirilemediklerinde bu kısıtlamalarla ilgili sistem durumu iletilerini görürsünüz.

  • ReplicaExclusionStatic ve ReplicaExclusionDynamic: Bu kısıtlamalar, aynı bölümdeki iki hizmet nesnesinin aynı düğüme yerleştirilmesi gerekeceğinden bir çözümün reddedildiğini gösterir. Söz konusu düğümün başarısız olması söz konusu bölümü aşırı etkileyebileceğinden buna izin verilmez. ReplicaExclusionStatic ve ReplicaExclusionDynamic neredeyse aynı kuraldır ve farklılıklar önemli değildir. ReplicaExclusionStatic veya ReplicaExclusionDynamic kısıtlamasını içeren bir kısıtlama eleme dizisi görüyorsanız, Küme Kaynak Yöneticisi yeterli düğüm olmadığını düşünür. Bu, izin verilmeyen bu geçersiz yerleştirmeleri kullanmak için kalan çözümleri gerektirir. Dizideki diğer kısıtlamalar genellikle düğümlerin neden ilk etapta ortadan kaldırıldığını bildirir.
  • PlacementConstraint: Bu iletiyi görüyorsanız, hizmetin yerleştirme kısıtlamalarıyla eşleşmediğinden bazı düğümleri ortadan kaldırdığımız anlamına gelir. Şu anda yapılandırılmış olan yerleştirme kısıtlamalarını bu iletinin bir parçası olarak izleriz. Bir yerleştirme kısıtlaması tanımladıysanız bu normaldir. Ancak yerleştirme kısıtlaması yanlış bir şekilde çok fazla düğümün ortadan kaldırılmasına neden oluyorsa bunu fark edebilirsiniz.
  • NodeCapacity: Bu kısıtlama, Küme Kaynak Yöneticisi'nin belirtilen düğümlere çoğaltmaları yerleştiremediği anlamına gelir çünkü bu, bunları kapasitenin üzerine koyar.
  • Benzeme: Bu kısıtlama, benzite kısıtlamasının ihlaline neden olacağından çoğaltmayı etkilenen düğümlere yerleştiremediğimizi gösterir. Benşim hakkında daha fazla bilgi bu makalede verilmiştir
  • FaultDomain ve UpgradeDomain: Çoğaltmayı belirtilen düğümlere yerleştirmek belirli bir hata veya yükseltme etki alanında paketlemeye neden olacaksa bu kısıtlama düğümleri ortadan kaldırır. Hata ve yükseltme etki alanı kısıtlamaları ve sonuçta ortaya çıkan davranışlar konusunda bu kısıtlamayı ele alan birkaç örnek sunulmaktadır
  • PreferredLocation: Varsayılan olarak iyileştirme olarak çalıştığından normalde bu kısıtlamanın çözümden düğümleri kaldırdığı görmemelisiniz. Yükseltmeler sırasında tercih edilen konum kısıtlaması da mevcuttur. Yükseltme sırasında, hizmetleri yükseltme başlatıldığında bulundukları yere geri taşımak için kullanılır.

Blok Listesi Düğümleri

Küme Resource Manager'ın rapor verdiği bir diğer sistem durumu iletisi de düğümlerin engellendiği durum iletisidir. Blok listesi oluşturmayı sizin için otomatik olarak uygulanan geçici bir kısıtlama olarak düşünebilirsiniz. Düğümler, bu hizmet türünün örneklerini başlatırken yinelenen hatalarla karşılaştığında engellenir. Düğümler, hizmet türü temelinde blok listesine alınır. Bir düğüm bir hizmet türü için engellenmiş olabilir, ancak başka bir hizmet türü için listelenmeyebilir.

Geliştirme sırasında blok listesi oluşturma işleminin sık sık gerçekleştiğini görürsünüz: Bazı hatalar hizmet ana bilgisayarınızın başlangıçta kilitlenmesine neden olur, Service Fabric hizmet ana bilgisayarını birkaç kez oluşturmaya çalışır ve hata oluşmaya devam eder. Birkaç denemeden sonra düğüm engellenir ve Küme Kaynak Yöneticisi hizmeti başka bir yerde oluşturmayı dener. Bu hata birden çok düğümde olmaya devam ederse, kümedeki tüm geçerli düğümlerin engellenmesi mümkündür. Blok listesi, istenen ölçeği karşılamak için hizmeti başarıyla başlatabilecek kadar çok sayıda düğümü de kaldırabilir. Genellikle Küme Kaynak Yöneticisi'nden hizmetin istenen çoğaltma veya örnek sayısının altında olduğunu belirten ek hatalar veya uyarıların yanı sıra ilk etapta engelleme listesine neden olan hatanın ne olduğunu belirten sistem durumu iletileri görürsünüz.

Blok listesi kalıcı bir koşul değildir. Birkaç dakika sonra düğüm blok listesinden kaldırılır ve Service Fabric söz konusu düğümdeki hizmetleri yeniden etkinleştirebilir. Hizmetler başarısız olursa, düğüm bu hizmet türü için yeniden engellenmiş olur.

Kısıtlama öncelikleri

Uyarı

Kısıtlama önceliklerinin değiştirilmesi önerilmez ve kümeniz üzerinde önemli olumsuz etkilere neden olabilir. Varsayılan kısıtlama önceliklerinin ve davranışlarının başvurusu için aşağıdaki bilgiler sağlanır.

Tüm bu kısıtlamalarla, "Hey – Hata etki alanı kısıtlamalarının sistemimdeki en önemli şey olduğunu düşünüyorum. Hata etki alanı kısıtlamasının ihlal edilmesini sağlamak için diğer kısıtlamaları ihlal etmeye hazırım."

Kısıtlamalar farklı öncelik düzeyleriyle yapılandırılabilir. Bu ifadeler şunlardır:

  • "hard" (0)
  • "yumuşak" (1)
  • "iyileştirme" (2)
  • "off" (-1).

Kısıtlamaların çoğu varsayılan olarak sabit kısıtlamalar olarak yapılandırılır.

Kısıtlamaların önceliğini değiştirmek sık karşılaşılan bir durumdur. Kısıtlama önceliklerinin değiştirilmesi gereken zamanlar olmuştur ve genellikle ortamı etkileyen başka bir hata veya davranışa geçici bir çözüm bulmak için. Genellikle kısıtlama önceliği altyapısının esnekliği çok iyi çalıştı, ancak sık sık gerekli değildir. Çoğu zaman her şey varsayılan önceliklerine göredir.

Öncelik düzeyleri, belirli bir kısıtlamanın ihlal edilmesi veya her zaman karşılanacağı anlamına gelmez. Kısıtlama öncelikleri, kısıtlamaların zorunlu kılındığı bir sırayı tanımlar. Öncelikler, tüm kısıtlamaları karşılamanın imkansız olduğu durumlarda dengeleri tanımlar. Genellikle ortamda başka bir sorun olmadığı sürece tüm kısıtlamalar karşılanabilir. Kısıtlama ihlallerine neden olacak bazı senaryo örnekleri çakışan kısıtlamalar veya çok sayıda eşzamanlı hatadır.

Gelişmiş durumlarda kısıtlama önceliklerini değiştirebilirsiniz. Örneğin, düğüm kapasitesi sorunlarını çözmek için gerektiğinde benceliğin her zaman ihlal edildiğinden emin olmak istediğinizi varsayalım. Bunu başarmak için benzim kısıtlamasının önceliğini "soft" (1) olarak ayarlayabilir ve kapasite kısıtlamasını "hard" (0) olarak ayarlayabilirsiniz.

Farklı kısıtlamalar için varsayılan öncelik değerleri aşağıdaki yapılandırmada belirtilir:

ClusterManifest.xml

        <Section Name="PlacementAndLoadBalancing">
            <Parameter Name="PlacementConstraintPriority" Value="0" />
            <Parameter Name="CapacityConstraintPriority" Value="0" />
            <Parameter Name="AffinityConstraintPriority" Value="0" />
            <Parameter Name="FaultDomainConstraintPriority" Value="0" />
            <Parameter Name="UpgradeDomainConstraintPriority" Value="1" />
            <Parameter Name="PreferredLocationConstraintPriority" Value="2" />
        </Section>

Tek başına dağıtımlar için ClusterConfig.json veya Azure tarafından barındırılan kümeler için Template.json aracılığıyla:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "PlacementConstraintPriority",
          "value": "0"
      },
      {
          "name": "CapacityConstraintPriority",
          "value": "0"
      },
      {
          "name": "AffinityConstraintPriority",
          "value": "0"
      },
      {
          "name": "FaultDomainConstraintPriority",
          "value": "0"
      },
      {
          "name": "UpgradeDomainConstraintPriority",
          "value": "1"
      },
      {
          "name": "PreferredLocationConstraintPriority",
          "value": "2"
      }
    ]
  }
]

Hata etki alanı ve yükseltme etki alanı kısıtlamaları

Küme Kaynak Yöneticisi, hizmetlerin hata ve yükseltme etki alanları arasında yayılmasını sağlamak istiyor. Bunu Küme Resource Manager'ın altyapısında bir kısıtlama olarak modeller. Bunların nasıl kullanıldığı ve özel davranışları hakkında daha fazla bilgi için küme yapılandırması makalesine bakın.

Küme Resource Manager'ın yükseltme, hata veya diğer kısıtlama ihlalleriyle başa çıkmak için birkaç çoğaltmayı bir yükseltme etki alanına paketlemesi gerekebilir. Hata veya yükseltme etki alanlarına paketleme normalde yalnızca sistemde doğru yerleştirmeyi engelleyen birkaç hata veya başka bir değişim sıklığı olduğunda gerçekleşir. Bu durumlarda bile paketlemeyi önlemek istiyorsanız yerleştirme ilkesini kullanabilirsiniz.RequireDomainDistribution Bunun hizmet kullanılabilirliğini ve güvenilirliği etkileyebileceğini unutmayın, bu nedenle dikkatli düşünün.

Ortam doğru yapılandırıldıysa, yükseltmeler sırasında bile tüm kısıtlamalara tam olarak uyulur. Önemli olan, Küme Kaynak Yöneticisi'nin kısıtlamalarınıza dikkat ediyor olmasıdır. Bir ihlal algıladığında hemen bildirir ve sorunu düzeltmeye çalışır.

Tercih edilen konum kısıtlaması

PreferredLocation kısıtlaması, iki farklı kullanım alanı olduğundan biraz farklıdır. Bu kısıtlamanın bir kullanımı, uygulama yükseltmeleri sırasında kullanılır. Küme Kaynak Yöneticisi yükseltmeler sırasında bu kısıtlamayı otomatik olarak yönetir. Yükseltmeler tamamlandığında çoğaltmaların ilk konumlarına geri dönmesini sağlamak için kullanılır. PreferredLocation kısıtlamasının diğer kullanımı yerleştirme ilkesi içindirPreferredPrimaryDomain. Bunların her ikisi de iyileştirmelerdir ve bu nedenle PreferredLocation kısıtlaması varsayılan olarak "İyileştirme" olarak ayarlanan tek kısıtlamadır.

Yükseltmeler

Küme Kaynak Yöneticisi, iki işi olduğu uygulama ve küme yükseltmeleri sırasında da yardımcı olur:

  • küme kurallarının gizliliğinin ihlal edilmediğinden emin olun
  • yükseltmenin sorunsuz geçmesine yardımcı olmaya çalışın

Kuralları zorlamaya devam edin

Dikkat edilmesi gereken en önemli şey, yerleştirme kısıtlamaları ve kapasiteler gibi katı kısıtlamalar olan kuralların yükseltmeler sırasında yine de uygulanmasıdır. Yerleştirme kısıtlamaları, iş yüklerinizin yükseltmeler sırasında bile yalnızca izin verilen yerde çalışmasını sağlar. Hizmetler yüksek oranda kısıtlandığında yükseltmeler daha uzun sürebilir. Hizmet veya düğümü bir güncelleştirme için aşağı getirildiğinde, gidebileceği yer için birkaç seçenek olabilir.

Akıllı değişimler

Yükseltme başlatıldığında Resource Manager, kümenin geçerli düzenlemesinin anlık görüntüsünü alır. Her Yükseltme Etki Alanı tamamlandıktan sonra, o Yükseltme Etki Alanındaki hizmetleri özgün düzenlemelerine döndürmeye çalışır. Bu şekilde, yükseltme sırasında bir hizmet için en fazla iki geçiş vardır. Etkilenen düğümden bir taşıma ve bir geri taşıma vardır. Kümeyi veya hizmeti yükseltmeden öncekine döndürmek, yükseltmenin küme düzenini etkilememesini de sağlar.

Azaltılmış değişim sıklığı

Yükseltmeler sırasında Küme Kaynak Yöneticisi dengelemeyi de kapatır. Dengelemenin engellenmesi, hizmetleri yükseltme için boşaltılan düğümlere taşımak gibi yükseltmenin kendisine gereksiz tepkileri önler. Söz konusu yükseltme bir Küme yükseltmesi ise, yükseltme sırasında kümenin tamamı dengelenmez. Kısıtlama denetimleri etkin kalır, yalnızca ölçümlerin proaktif dengelemesine göre hareket devre dışı bırakılır.

Arabelleğe alınan kapasite ve yükseltme

Genellikle küme kısıtlanmış veya doluya yakın olsa bile yükseltmenin tamamlanmasını istersiniz. Yükseltmeler sırasında kümenin kapasitesini yönetmek normalden daha da önemlidir. Yükseltme etki alanlarının sayısına bağlı olarak, yükseltme kümeden geçerken kapasitenin yüzde 5 ila 20'si geçirilmelidir. Bu işin bir yere gitmesi gerekiyor. Arabelleğe alınan kapasiteler bu noktada yararlıdır. Normal çalışma sırasında arabelleğe alınan kapasiteye uyulur. Küme Resource Manager, gerekirse yükseltmeler sırasında düğümleri toplam kapasitesine (arabellek tüketerek) kadar doldurabilir.

Sonraki adımlar