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

Service Fabric Kümesi Resource Manager, Service Fabric'te yükseltmeleri yönlendirmez, ancak söz konusudur. Küme Resource Manager yönetimine yardımcı olan 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 Resource Manager sorunu belirten sistem durumu uyarıları ve hataları gönderir. Diğer bir tümleştirme parçasının da yükseltmelerin nasıl çalıştığıyla ilgili olması gerekir. Küme Resource Manager yükseltmeler sırasında davranışını biraz değiştirir.

Sistem durumu tümleştirmesi

Küme Resource Manager, hizmetlerinizi yerleştirmek için tanımladığınız kuralları sürekli izler. Ayrıca düğümlerdeki, kümedeki ve kümedeki tüm ölçümler için kalan kapasiteyi 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 Resource Manager 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ı gösterir.

Resource Manager sistem durumu uyarılarının bir diğer örneği de yerleştirme kısıtlamaları ihlalleridir. Ö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ı yayar. 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.

Aşağıda bu tür bir sistem durumu raporu örneği 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 söylediği şey şudur:

  1. Tüm çoğaltmaların kendileri sağlıklıdır: Her birinde AggregatedHealthState : Ok
  2. Etki Alanını Yükseltme dağıtım kısıtlaması şu anda ihlal ediliyor. Bu, belirli bir Yükseltme Etki Alanının bu bölümden 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 ilkesineRequireDomainDistribution 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ı tetikler. Üretim ortamındaki uyarıları kullanarak bir sorun olduğunu öğrenebilirsiniz. Uyarı, hatalı yükseltmeleri algılamak ve durdurmak için de kullanılır. Bu durumda, Resource Manager neden çoğaltmaları Yükseltme Etki Alanına paketlemek zorunda olduğunu anlamak istiyoruz. Örneğin, diğer Yükseltme Etki Alanlarındaki düğümler kapalı olduğundan paketleme genellikle geçicidir.

Küme Resource Manager 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 yerleştirilmesini imkansız hale getirdi
  2. Hizmetin yerleştirme gereksinimleri tatmin edici değildir.

Böyle durumlarda, Küme Resource Manager 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 bunların ortadan kaldırdıklarını kaydeder. Bu şekilde, hizmetler yerleştirilemediğinde hangi düğümlerin 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. Bu 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 farklar önemli değildir. ReplicaExclusionStatic veya ReplicaExclusionDynamic kısıtlamasını içeren bir kısıtlama eleme dizisi görüyorsanız, Küme Resource Manager 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ürseniz, hizmetin yerleştirme kısıtlamalarıyla eşleşmediğinden bazı düğümleri ortadan kaldırdığımız anlamına gelir. Bu iletinin bir parçası olarak şu anda yapılandırılmış olan yerleştirme kısıtlamalarını izleriz. Tanımlı bir yerleştirme kısıtlamanız varsa 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 Resource Manager çoğaltmaları belirtilen düğümlere yerleştiremediği anlamına gelir çünkü bu, bunları kapasitenin üzerine getirebilecektir.
  • Benzite: Bu kısıtlama, benzite kısıtlamasının ihlaline neden olacağından etkilenen düğümlere çoğaltma yerleştiremediğimizi gösterir. Benşim hakkında daha fazla bilgi bu makalede verilmiştir
  • FaultDomain ve UpgradeDomain: Belirtilen düğümlere çoğaltmanın yerleştirilmesi 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ış konusunda bu kısıtlamayı ele alan birkaç örnek verilmiştir
  • 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ümenin rapor Resource Manager başka bir 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 engellenir. Bir düğüm bir hizmet türü için engellenmiş olabilir, ancak başka bir hizmet türü için listelenmemiş olabilir.

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 Resource Manager 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. Küme Resource Manager 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.

Engelleme 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ümenizde önemli olumsuz etkilere neden olabilir. Varsayılan kısıtlama önceliklerine ve davranışlarına başvurmak 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. Bunlar:

  • "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 yaygın değildir. Kısıtlama önceliklerinin değiştirilmesi gerektiği zamanlar olmuştur ve genellikle ortamı etkileyen diğer bazı hatalara veya davranışlara geçici bir çözüm bulmak için gereklidir. Kısıtlama önceliği altyapısının esnekliği genellikle çok iyi çalıştı, ancak sık sık gerekli değildir. Çoğu zaman her şey varsayılan önceliklerine göre yer alır.

Öncelik düzeyleri, belirli bir kısıtlamanın ihlal edilmesi veya her zaman karşılanması 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şılamak mümkün olmadığında dengeleri tanımlar. Genellikle ortamda başka bir sorun olmadığı sürece tüm kısıtlamalar karşılanabilir. Kısıtlama ihlallerine yol açacak 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 "yumuşak" (1) olarak ayarlayabilir ve kapasite kısıtlamasını "sabit" (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 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 Resource Manager, hizmetleri hata ve yükseltme etki alanları arasında yaymak istiyor. Bunu Küme Resource Manager altyapısı içinde bir kısıtlama olarak modeller. Bunların nasıl kullanıldığı ve belirli davranışları hakkında daha fazla bilgi için küme yapılandırması makalesine göz atın.

Küme Resource Manager 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 kullanabilirsinizRequireDomainDistribution. Bunu yapmanın hizmetin kullanılabilirliğini ve güvenilirliğini 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 Resource Manager 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ı 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 Resource Manager 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 Resource Manager, iki işi olan uygulama ve küme yükseltmeleri sırasında da yardımcı olur:

  • küme kurallarının tehlikeye atılmadığından emin olun
  • yükseltmenin sorunsuz ilerlemesine yardımcı olmaya çalışın

Kuralları zorlamaya devam edin

Dikkat edilmesi gereken temel şey, kuralların (yerleştirme kısıtlamaları ve kapasiteler gibi katı kısıtlamalar) yükseltmeler sırasında hala zorlanmasıdır. Yerleştirme kısıtlamaları, iş yüklerinizin yükseltmeler sırasında bile yalnızca izin verilen yerlerde ç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 yerler için birkaç seçenek olabilir.

Akıllı değiştirmeler

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 önceki şekline 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 Resource Manager dengelemeyi de kapatır. Dengelemenin önlenmesi, hizmetleri yükseltme için boşaltılan düğümlere taşıma 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 dayalı 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ş bir yere gitmek zorunda. Arabelleğe alınan kapasiteler bu noktada yararlı olur. 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