Ich habe einige EC2-Instanzen in AWS laufen, die durch eine Autoscale-Richtlinie skaliert werden. Alles ist in Ordnung, die Maschinen skalieren recht gut hoch und runter. Allerdings haben wir einen Fehler: Beim Herunterskalieren gehen die Anfragen, die bei (zu beendenden) Instanzen verarbeitet werden, während die Beendigung erfolgt, mittendrin verloren.
Ich möchte das Herunterfahrsignal abfangen und Apache auffordern, ordnungsgemäß herunterzufahren und den Herunterfahrvorgang dann fortzusetzen.
Antwort1
Ich habe es gefunden. Es ist eine Art Hack, aber es scheint bei mir zu funktionieren.
Wenn das System ein Herunterfahrsignal erhält, werden die Skripte im Ordner /etc/rc0.d ausgeführt. Dazu gehören Skripte zum Herunterfahren aller Dienste, einschließlich Apache. Falls das Herunterfahren des Skripts zu lange dauert, wird AWS ausgeschaltet. Ich weiß nicht, wie lange „zu lange“ ist.
Wie auch immer, das ist, was ich getan habe, ich habe die Datei /etc/rc0.d/K09apache2 bearbeitet
Bei apache_stop Funktion apache_stop() {
if $APACHE2CTL configtest > /dev/null 2>&1; then
# if the config is ok than we just stop normaly
#$APACHE2CTL stop 2>&1 | grep -v 'not running' >&2 || true
echo "stopping the apache gracefully"
$APACHE2CTL -k graceful-stop 2>&1 | grep -v 'not running' >&2 || true
sleep 15
Ändern Sie den abrupten Stopp in einen ordnungsgemäßen Stopp und gewähren Sie eine Ruhepause von 15 Sekunden, um sicherzustellen, dass der Stopp ordnungsgemäß beendet wird.
Update – Jetzt bietet Amazon ELB die ordnungsgemäße Entfernung von Instanzen als Funktion.