AWS で実行されている ec2 インスタンスがいくつかあり、これらは自動スケール ポリシーによってスケールアップおよびスケールダウンされています。マシンのスケールアップとスケールダウンは問題なく行われています。ただし、スケールダウンすると、終了するインスタンスで処理されているリクエストが、終了中に途中で失われるという問題があります。
私がやりたいのは、シャットダウン信号をキャッチし、Apache に正常なシャットダウンを要求し、その後シャットダウンを続行することです。
答え1
私はそれを見つけました。それは一種のハックですが、私の場合はうまく機能しているようです。
システムがシャットダウン信号を受信すると、/etc/rc0.d フォルダー内のスクリプトが実行されます。これには、Apache を含むすべてのサービスをシャットダウンするスクリプトが含まれます。スクリプトのシャットダウンに時間がかかりすぎる場合は、AWS の電源がオフになりますが、どれくらいの時間が長すぎるのかはわかりません。
とにかく、私がやったことは、/etc/rc0.d/K09apache2ファイルを編集したことです
apache_stop関数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
突然の停止を正常な停止に変更し、正常に終了するように 15 秒間スリープさせます。
更新 - 現在、Amazon ELB はインスタンスの正常な削除を機能として提供しています。