Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zásady umístění jsou další pravidla, která se dají použít k řízení umístění služby v některých konkrétních méně běžných scénářích. Mezi příklady těchto scénářů patří:
- Cluster Service Fabric zahrnuje zeměpisné vzdálenosti, například několik místních datacenter nebo napříč oblastmi Azure.
- Vaše prostředí zahrnuje několik oblastí geopolitického nebo právního řízení nebo v jiném případě, kdy máte hranice zásad, které potřebujete vynutit.
- Je potřeba vzít v úvahu výkon komunikace nebo latenci kvůli velkým vzdálenostem nebo použití pomalejších nebo méně spolehlivých síťových propojení.
- Potřebujete udržovat určité úlohy ve vzájemné blízkosti pokud možno co nejlépe, buď spolu s jinými úlohami, nebo v blízkosti zákazníků.
- Potřebujete více bezstavových instancí oddílu na jednom uzlu.
Většina těchto požadavků odpovídá fyzickému rozložení clusteru, které je reprezentované jako domény selhání clusteru.
Pokročilé zásady umístění, které pomáhají řešit tyto scénáře:
- Neplatné domény
- Požadované domény
- Upřednostňované domény
- Zákaz balení replik
- Povolit více bezstavových instancí na daném uzlu
Většinu následujících ovládacích prvků je možné nakonfigurovat prostřednictvím vlastností uzlu a omezení umístění, ale některé jsou složitější. Kvůli zjednodušení poskytuje Resource Manager clusteru Service Fabric tyto další zásady umístění. Zásady umístění se konfigurují pro jednotlivé pojmenované instance služby. Dají se také dynamicky aktualizovat.
Zadání neplatných domén
Zásada umístění InvalidDomain umožňuje určit, že konkrétní chybová doména je pro konkrétní službu neplatná. Tato zásada zajišťuje, že konkrétní služba nikdy neběží v určité oblasti, například z geopolitických nebo firemních důvodů. Více neplatných domén je možné zadat pomocí samostatných zásad.
Kód:
ServicePlacementInvalidDomainPolicyDescription invalidDomain = new ServicePlacementInvalidDomainPolicyDescription();
invalidDomain.DomainName = "fd:/DCEast"; //regulations prohibit this workload here
serviceDescription.PlacementPolicies.Add(invalidDomain);
PowerShell:
New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("InvalidDomain,fd:/DCEast”)
Určení požadovaných domén
Požadované zásady umístění domény vyžadují, aby služba byla přítomna pouze v zadané doméně. Více požadovaných domén je možné zadat prostřednictvím samostatných zásad.
Kód:
ServicePlacementRequiredDomainPolicyDescription requiredDomain = new ServicePlacementRequiredDomainPolicyDescription();
requiredDomain.DomainName = "fd:/DC01/RK03/BL2";
serviceDescription.PlacementPolicies.Add(requiredDomain);
PowerShell:
New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomain,fd:/DC01/RK03/BL2")
Určení upřednostňované domény pro primární repliky stavové služby
Upřednostňovaná primární doména určuje doménu selhání, do které se má primární doména umístit. Primární systém skončí v této doméně, když je všechno v pořádku. Pokud doména nebo primární replika selže nebo se vypne, primární se přesune do jiného umístění, ideálně ve stejné doméně. Pokud toto nové umístění není v upřednostňované doméně, Resource Manager clusteru ho co nejdříve přesune do upřednostňované domény. Přirozeně toto nastavení dává smysl jenom pro stavové služby. Tato zásada je nejužitečnější v clusterech, které jsou rozložené napříč oblastmi Azure nebo několika datovými centry, ale mají služby, které dávají přednost umístění v určitém umístění. Udržování primaries blízko uživatelům nebo jiným službám pomáhá poskytovat nižší latenci, zejména pro čtení, která jsou ve výchozím nastavení zpracovávána primariemi.
ServicePlacementPreferPrimaryDomainPolicyDescription primaryDomain = new ServicePlacementPreferPrimaryDomainPolicyDescription();
primaryDomain.DomainName = "fd:/EastUS/";
serviceDescription.PlacementPolicies.Add(primaryDomain);
PowerShell:
New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("PreferredPrimaryDomain,fd:/EastUS")
Vyžadování distribuce repliky a zákaz balení
Repliky se obvykle distribuují napříč doménami selhání a aktualizace, když je cluster zdravý. Existují však případy, kdy více než jedna replika pro daný oddíl může dočasně skončit v jedné doméně. Řekněme například, že cluster má devět uzlů ve třech doménách selhání, fd:/0, fd:/1 a fd:/2. Řekněme také, že vaše služba má tři repliky. Řekněme, že uzly používané pro tyto repliky v fd:/1 a fd:/2 zmizely. Obvykle by Správce prostředků clusteru preferoval jiné uzly ve stejných doménách selhání. V tomto případě řekněme, že kvůli problémům s kapacitou nebyly platné žádné jiné uzly v těchto doménách. Pokud Správce prostředků clusteru sestaví náhrady za tyto repliky, bude muset vybrat uzly v rámci fd:/0. Tímto ale vznikne situace, kdy dochází k porušení omezení domény selhání. Balení replik zvyšuje pravděpodobnost, že celá sada replik může selhat nebo být ztracena.
Poznámka:
Další informace o omezeních a prioritách omezení naleznete v tomto tématu.
Pokud jste někdy viděli zdravotní zprávu, například "The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: FaultDomain
", pak jste narazili na tuto situaci nebo něco podobného. Obvykle se dočasně zabalí jenom jedna nebo dvě repliky. Pokud je v dané doméně méně než kvorum replik, jste v bezpečí. Hloučkování je vzácné, ale může se stát. Nicméně, obvykle jsou tyto situace dočasné, protože se uzly vrátí. Pokud uzly zůstanou mimo provoz a Resource Manager clusteru potřebuje sestavit náhrady, obvykle jsou v ideálních doménách selhání k dispozici další uzly.
Některé úlohy by vždy preferovaly cílový počet replik, i když jsou zabalené do menšího počtu domén. Tyto úlohy spoléhají na to, že nedojde k plnému a současnému trvalému selhání všech domén, a obvykle mohou obnovit místní stav systému. Jiné úlohy by raději přijaly dřívější výpadek než riskovaly správnost nebo ztrátu dat. Většina produkčních úloh běží s více než třemi replikami, více než třemi doménami selhání a mnoha platnými uzly na doménu selhání. Z tohoto důvodu výchozí chování umožňuje balení domény ve výchozím nastavení. Výchozí chování umožňuje běžné vyrovnávání zátěže a zpracování přepnutí služeb při selhání, aby se tyto extrémní případy řešily, i když to znamená dočasné slučování domén.
Pokud chcete takové balení pro konkrétní úlohu zakázat, můžete na službě zadat RequireDomainDistribution
zásadu. Pokud je tato zásada nastavena, Správce prostředků clusteru zajistí, že žádné dvě repliky ze stejného oddílu neběží ve stejné poruchové nebo upgradové doméně.
Kód:
ServicePlacementRequireDomainDistributionPolicyDescription distributeDomain = new ServicePlacementRequireDomainDistributionPolicyDescription();
serviceDescription.PlacementPolicies.Add(distributeDomain);
PowerShell:
New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomainDistribution")
Bylo by teď možné použít tyto konfigurace pro služby v clusteru, který nebyl geograficky rozložený? Mohl bys, ale není to moc důvod. Požadované, neplatné a upřednostňované konfigurace domény by se měly vyhnout, pokud je scénáře nevyžadují. Nemá smysl se pokusit vynutit spuštění dané úlohy v jednom racku nebo preferovat nějaký segment místního clusteru před jiným. Různé konfigurace hardwaru by se měly rozložit mezi domény selhání a zpracovávat prostřednictvím normálních omezení umístění a vlastností uzlu.
Umístění několika bezstavových instancí oddílu na jednom uzlu
Zásada umístění AllowMultipleStatelessInstancesOnNode dovoluje umístění více bezstavových instancí oddílu na jednom uzlu. Ve výchozím nastavení nelze na uzel umístit více instancí jednoho oddílu. I s -1 službou není možné škálovat počet instancí nad rámec počtu uzlů v clusteru pro danou pojmenovanou službu. Tato zásada umístění odebere toto omezení a umožňuje zadat InstanceCount vyšší než počet uzlů.
Pokud jste někdy viděli zdravotní zprávu, například "The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: ReplicaExclusion
", pak jste narazili na tuto situaci nebo něco podobného.
Pokud se chcete přihlásit k použití této zásady umístění ve vaší službě, povolte následující konfigurace:
<Section Name="Common">
<Parameter Name="AllowCreateUpdateMultiInstancePerNodeServices" Value="True" />
<Parameter Name="HostReuseModeForExclusiveStateless" Value="1" />
</Section>
AllowMultipleStatelessInstancesOnNode
Zadáním zásad ve službě je možné nastavit InstanceCount nad rámec počtu uzlů v clusteru.
Kód:
ServicePlacementAllowMultipleStatelessInstancesOnNodePolicyDescription allowMultipleInstances = new ServicePlacementAllowMultipleStatelessInstancesOnNodePolicyDescription();
serviceDescription.PlacementPolicies.Add(allowMultipleInstances);
PowerShell:
New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName -Stateless –PartitionSchemeSingleton –PlacementPolicy @(“AllowMultipleStatelessInstancesOnNode”) -InstanceCount 10 -ServicePackageActivationMode ExclusiveProcess
Poznámka:
V současné době se zásady podporují pouze pro bezstavové služby s režimem aktivace balíčku služby ExclusiveProcess.
Výstraha
Zásady nejsou podporovány při použití se statickými koncovými body portu. Použití obou ve spojení může vést k nezdravému clusteru, protože několik instancí na stejném uzlu se pokusí navázat vazbu na stejný port a nemohou být spuštěny.
Poznámka:
Použití vysoké hodnoty MinInstanceCount s touto politikou umístění může vést k zaseknutí upgradu aplikací. Pokud máte například cluster s pěti uzly a nastavíte InstanceCount=10, budete mít na každém uzlu dvě instance. Pokud nastavíte MinInstanceCount=9, může se pokus o upgrade aplikace zaseknout; s minInstanceCount=8 se tomu můžete vyhnout.
Další kroky
- Další informace o konfiguraci služeb najdete v tématu o konfiguraci služeb.