我有一些在 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 提供了優雅刪除執行個體的功能。