Wir haben ständig Probleme mit dem Austausch unserer ElastiCache Redis-Instanz. Amazon scheint über eine grobe interne Überwachung zu verfügen, bei der Auslagerungsspitzen festgestellt werden und die ElastiCache-Instanz einfach neu gestartet wird (wodurch alle zwischengespeicherten Elemente verloren gehen). Hier ist das Diagramm von BytesUsedForCache (blaue Linie) und SwapUsage (orange Linie) auf unserer ElastiCache-Instanz für die letzten 14 Tage:
Sie können sehen, dass das Muster der zunehmenden Auslagerungsnutzung einen Neustart unserer ElastiCache-Instanz auslöst, wobei alle zwischengespeicherten Elemente verloren gehen (BytesUsedForCache fällt auf 0).
Die Registerkarte "Cache-Ereignisse" in unserem ElastiCache-Dashboard enthält entsprechende Einträge:
Quell-ID | Typ | Datum | Veranstaltung
Cache-Instanz-ID | Cache-Cluster | Dienstag, 22. September, 07:34:47 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Di 22.09. 07:34:42 GMT-400 2015 | Fehler beim Neustarten der Cache-Engine auf Knoten 0001
Cache-Instanz-ID | Cache-Cluster | So 20.09. 11:13:05 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Do 17.09. 22:59:50 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Wed Sep 16 10:36:52 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Di 15.09. 05.02.35 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
(frühere Einträge ausschneiden)
SwapUsage - Im normalen Gebrauch sollten weder Memcached noch Redis Swaps durchführen
Unsere relevanten (nicht standardmäßigen) Einstellungen:
- Instanztyp:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (wir hatten vorher die voreingestellte volatile-lru ohne großen Unterschied verwendet)maxmemory-samples
: 10reserved-memory
: 2500000000- Wenn ich den INFO-Befehl auf der Instanz überprüfe, sehe ich
mem_fragmentation_ratio
zwischen 1.00 und 1.05
Wir haben den AWS-Support kontaktiert und nicht viele nützliche Ratschläge erhalten: Sie haben vorgeschlagen, den reservierten Speicher noch weiter zu erhöhen (der Standardwert ist 0 und wir haben 2,5 GB reserviert). Für diese Cache-Instanz sind keine Replikationen oder Snapshots eingerichtet, daher sollten meines Erachtens keine BGSAVEs auftreten, die eine zusätzliche Speichernutzung verursachen.
Die maxmemory
Obergrenze einer cache.r3.2xlarge-Datei beträgt 62495129600 Byte, und obwohl wir unsere Obergrenze (minus unserer reserved-memory
) schnell erreicht haben, erscheint es mir merkwürdig, dass das Host-Betriebssystem unter Druck geraten würde, hier so viel Swap zu verwenden, und zwar so schnell, es sei denn Amazon hat aus irgendeinem Grund die Einstellungen für den Austausch von Betriebssystemen erhöht. Irgendwelche Ideen, warum wir ElastiCache / Redis so häufig austauschen, oder eine mögliche Problemumgehung?
quelle
SCAN
Job in der Antwort noch Aufräumen provozieren. AWS bietet jetzt Redis Cluster- Funktionen, die meiner Meinung nach bei starker Nutzung hilfreich sind.Ich weiß, dass dies vielleicht alt ist, aber ich bin in der aws-Dokumentation darauf gestoßen.
https://aws.amazon.com/elasticache/pricing/ Sie geben an, dass das r3.2xlarge 58.2gb Speicher hat.
https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html Sie geben an, dass der maximale Speicher des Systems 62 GB beträgt (dies ist der Zeitpunkt, an dem die maxmemory-Richtlinie aktiviert wird) und dass sie nicht geändert werden kann . Es scheint, dass wir mit Redis in AWS, egal was passiert, tauschen werden.
quelle
62495129600
Bytes, was genau 58,2 GiB ist. Der Preis Seite Sie verknüpft hat Speicher in Einheiten von GiB, nicht GB. Dermaxmemory
Parameter ist vermutlich nicht änderbar, weil es von Redis bessere Drehregler gibt, die änderbar sindreserved-memory
(obwohl mir das nicht geholfen hat ...), und AWS möchte nicht, dass Sie den Knoten falsch konfigurieren, indem Sie z. B. Redis mitteilen Verwenden Sie mehr Speicher als die Elasticache-VM tatsächlich hat.