2015-10-15 8 views
7

Ich stehe derzeit vor einem Problem, bei dem Eureka nie zuvor veraltete Service-Instanzen gelöscht hat, weil eine VM unerwartet ausgefallen ist. Verständlicherweise trat der Selbsterhaltungsmodus von Eureka ein, da es bei Serviceverlängerungen/Heartbeat-Anfragen einen großen Rückgang (unter dem Schwellenwert) gab. Aber 15+ Stunden später sind die toten Instanzen immer noch in Eureka registriert. Dies ist ein großes Problem, da Dienstanforderungen weiterhin nur an die toten Instanzen gerichtet sind, um Fehler zurückzugeben.Der Selbsterhaltungsmodus von Eureka wird nie wiederhergestellt

Meine Hoffnung war, dass die Schwelle kontinuierlich angepasst wird und nach einer gewissen Zeit würde Eurekas Schwelle auf einem neuen Normniveau sein und der Selbsterhaltungsmodus würde zurückgesetzt werden. Wir verwenden Eureka im gespiegelten Setup und unsere Konfigurationen sind nicht sehr komplex.

Unser Setup:

Eureka über Feder-boot-Starter-parent 1.2.5.RELEASE

eureka: 
    dashboard: 
    path: services 
    enabled: false 
    instance: 
    hostname: localhost 
    leaseRenewalIntervalInSeconds: 3 
    metadataMap: 
     managementPath: /admin 
     instanceId: discoveryPrimary 
    client: 
    registerWithEureka: false 
    fetchRegistry: false 
    serviceUrl: 
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ 
    server: 
    waitTimeInMsWhenSyncEmpty: 0 

Ist es möglich, Eureka Konfigurationen einzustellen, um die Selbsterhaltung Modus zurückgesetzt werden (wo es hört auf, Instanzen zu löschen) und erlaubt es, Dienst-Registrierungen zu löschen, wenn die Dienste für 5+ Minuten tot sind?

Antwort

4

Wenn Sie nur wenige Instanzen Ihrer Dienste haben, jedes Mal, wenn einer von ihnen fehlschlägt, tritt die Selbsterhaltung ein, da die renewalPercentThreshold standardmäßig 0.85 ist.

Wenn also nur 84% Ihrer Instanzen ihre Pacht erneuern, schaltet Eureka die Selbsterhaltung ein.

Das bedeutet, wenn Sie 3 Instanzen haben und eine fehlschlägt, haben nur 66% von ihnen ihre Lizenzen erneuert, damit keine abgemeldet werden. Sie können renewalPercentThreshold in den Servereigenschaften für Ihre Bereitstellung anpassen.

eureka: 
    server: 
    renewalPercentThreshold: 0.49 

Mit diesem, wenn Sie 2 Instanzen haben und 1 fehlschlägt, sind Sie immer noch gut.

+0

Wenn Sie 'renewationPercentThreshold' anpassen, wird das Problem dadurch gelöst, dass der Selbsterhaltungsmodus verzögert wird. Wir können dasselbe erreichen, indem wir 'eureka.server.enableSelfPreservation = false' setzen, aber das Problem wird immer noch nicht gelöst, wenn die Selbsterhaltung ausgelöst wird und diese Instanzen niemals wiederkommen. – restwzeasy

+0

Nein, es wird nicht nur den Selbsterhaltungsmodus verzögern, wenn Ihr Netzwerk gesund ist oder Ihre Instanzen nicht nur jede Minute kommen und gehen. Es ist einfach für eine kleinere Infrastruktur konfiguriert. Sie können es mit 'renewationThresholdUpdateIntervalMs' weiter optimieren, so dass das Zeitfenster für die Selbsterhaltung kleiner wird.Wenn Sie es ausschalten, verwenden Sie einfach keine der Ausfallsicherungsfunktionen von Eureka. –

+0

Unser Ziel ist es, alle Ausfallsicherheitsfunktionen von Eureka zu verwenden, einschließlich des Selbsterhaltungsmodus. Wenn Sie den Schwellenwert jedoch niedriger einstellen, wird nur der Selbsterhaltungsmodus aktiviert. Sobald er aktiviert ist, werden die toten Instanzen nach 15+ Stunden immer noch nicht gelöscht. Ich glaube nicht, dass die Schwelle aus den beschriebenen Gründen das Problem ist. Gibt es einige andere Konfigurationen, die es dem Selbsterhaltungsmodus erlauben würden, tote Instanzen zurückzusetzen und schließlich zu löschen? – restwzeasy

1

Sogar eine alte Frage, hier ist meine zwei Cent.

Meine Hoffnung war, dass die Schwelle kontinuierlich eingestellt wird und nach einiger Zeit Eureka Schwelle zu einer neuen Norm Ebene und Selbsterhaltungsmodus wäre zurückgesetzt werden würde.

Falsche Annahme. Die Selbsterhaltung von Eureka läuft niemals ab und die Schwellenwerte werden nicht dynamisch angepasst. Sie müssen die Down-VMs/-Clients zurückholen (so dass insgesamt> 85% der Clients UP sind), um diesen Zustand zu verlassen.

Ich glaube, es macht Sinn, es auszuschalten - schauen Sie sich conclusions here und die ähnliche question here.

+0

Es wird nicht empfohlen, den Selbsterhaltungsmodus in der Produktion zu deaktivieren. Ein verpasster Herzschlag und eine gesunde Instanz wird aus der Registrierung entfernt. Keine gute Idee. –

+0

Sie sind nicht korrekt @ Narendra-Choudhary. Ein verpasster Herzschlag vertreibt keine Instanz. Wenn ein Heartbeat fehlschlägt, werden die Clients bis zu einer maximalen Verzögerung um den Faktor 2 zurückgesetzt. Dann fallen auf den nächsten Server in der Server-Liste und Server replizieren die Registrierungsinformationen. –

Verwandte Themen