2016-10-06 2 views
5

Ich habe eine Anwendung auf einem 5-Knoten-Standalone-Cluster bereitgestellt. Die Bereitstellung war erfolgreich. Aber die Anwendung wurde wegen eines Fehlers in der Anwendung nicht gestartet. Ich habe versucht, die Anwendung mithilfe des Service Fabric Explorer aus dem Cluster zu entfernen. Dies schlägt jedoch fehl.Das Entfernen der Dienst-Fabric-Anwendung schlägt fehl

Der Status der Anwendung ist "Fehler" und der Status ist "Löschen" Die Anwendung verfügt über 9 Dienste. 6 Dienste zeigen einen Gesundheitszustand "Unbekannt" mit einem Fragezeichen und einem Status "Unbekannt" an. 3 Dienste zeigen einen Gesundheitszustand "Ok" aber mit einem Status "Löschen".

Ich habe auch versucht, es zu entfernen Powershell mit:

Remove-ServiceFabricApplication -ApplicationName fabric:/appname -Force -ForceRemove 

Das Ergebnis war eine Operation timed out.

Ich habe auch das Skript unten versucht, das ich in einem anderen Post gefunden habe.

Connect-ServiceFabricCluster -ConnectionEndpoint localhost:19000 

$nodes = Get-ServiceFabricNode 

foreach($node in $nodes) 
{ 
    $replicas = Get-ServiceFabricDeployedReplica -NodeName $node.NodeName - ApplicationName "fabric:/MyApp" 

    foreach ($replica in $replicas) 
    { 
     Remove-ServiceFabricReplica -ForceRemove -NodeName $node.NodeName -PartitionId $replica.Partitionid -ReplicaOrInstanceId $replica.ReplicaOrInstanceId 
    } 
} 

auch zu entfernen, kein Ergebnis, hat das Skript keine Replik finden.

Zur gleichen Zeit begannen wir, die Anwendung zu entfernen, einer der Systemdienste änderte auch den Zustand. Der Dienst "Fabric:/System/NamingService" zeigt den Status "Warnung" an. Dies ist in der Partition 00000000-0000-0000-0000-000000001002. Das primäre Replikat zeigt:
Ungesundes Ereignis: SourceId = 'System.NamingService', Property = 'Duration_PrimaryRecovery', HealthState = 'Warnung', ConsiderWarningAsError = false. Die PrimaryRecovery, die am 2016-10-06 07: 55: 21.252 gestartet wurde, dauert länger als 30: 00.000.

Ich habe auch jeden Knoten (1 zu der Zeit) ohne Ergebnis neu gestartet.

Erzwingen, die Anwendung zu entfernen, ohne den Cluster neu zu erstellen, da dies keine Option für eine Produktionsumgebung ist.

Antwort

4

Ja, das kann passieren, wenn Sie Ihrem Code nicht erlauben, RunAsync oder Open/Close Ihres ICommunicationListener zu beenden.

Einige Hintergrundinformationen:

Ihr Service hat einen Lebenszyklus, der vom Service Fabric angetrieben wird. Eine kleine Komponente in Ihrem Dienst - Sie wissen es als FabricRuntime - treibt dies an. Für statusfreie Service-Instanzen ist dies ein einfacher Lebenszyklus zum Öffnen/Schließen. Für Stateful Services ist es ein bisschen komplexer. Eine zustandsbehaftete Service-Replik wird geöffnet und geschlossen, ändert aber auch die Rolle zwischen primär, sekundär und keiner. Änderungen am Lebenszyklus werden von Service Fabric initiiert und in Ihrem Code als Methodenaufruf oder Abbruch-Token-Trigger angezeigt. Wenn beispielsweise ein Replikat auf primary umgestellt wird, rufen wir Ihre RunAsync-Methode auf. Wenn es von primär zu etwas anderem wechselt oder herunterfahren muss, wird das Abbruch-Token ausgelöst. In jedem Fall wartet das System darauf, dass Sie Ihre Arbeit beenden.

Wenn Sie einen Dienst löschen, teilen wir Ihrem Dienst mit, die Rolle zu ändern und zu schließen. Wenn Ihr Code nicht antwortet, bleibt er in diesem Zustand hängen.

Um diesen Status zu verlassen, können Sie Remove-ServiceFabricReplica -ForceRemove ausführen. Dadurch wird das Replikat im Wesentlichen aus dem System entfernt. Soweit das Service Fabric betroffen ist, ist das Replikat nicht mehr vorhanden. Aber Ihr Prozess läuft noch. Also musst du reingehen und den Prozess auch beenden.

+0

Danke für die Wiederholung. Ich habe es gelöst. Ich hatte bereits versucht, Remove-ServiceFabricReplica mit dem Skriptbeispiel in meiner Frage zu verwenden. Aber von einem Fehler in dem Skript, das ich ID verwendet habe, hat nicht funktioniert. Ich habe mein Skript korrigiert und das Problem behoben. Und für diese Anwendung wurde auf keinem Knoten ein Prozess ausgeführt. Nachdem die Anwendung entfernt wurde, ist auch die Warnung von de NamingService verschwunden. –

Verwandte Themen