Amazon-Ec2
為什麼 Amazon EC2 狀態檢查對於無響應的實例會成功?
危險!
除非您準備好崩潰和/或強制重啟系統,否則不要執行此命令來“測試”它。
我採取的步驟:
我在執行 Ubuntu 14.01 LTS 的 EC2 上創建了一個 t1.micro 實例。
我確認兩個狀態檢查都通過了。
我通過 SSH 連接到實例。
我執行了為什麼這個命令使我的系統滯後如此糟糕,我不得不重新啟動中記錄的 fork 炸彈?.
- 我的 SSH 會話如下所示。
如您所見,實例(很快)記憶體不足,我的會話在超時後終止。
我預計實例狀態檢查會失敗。但是,兩個狀態檢查在 20 多分鐘後繼續通過。該實例對 SSH 和 ping 沒有響應,儘管 nmap 報告埠 22 已打開。
我希望使用狀態檢查來確定實例是否響應並使其自動縮放組終止並替換它,但看起來我無法做到這一點。
我有兩個問題:
- 為什麼實例通過了兩個狀態檢查?
- 是否有另一種解決方案(除了每月支付 18 美元購買不用於平衡負載的負載平衡器)來終止無響應的實例?我可以用 cloudwatch 警報做些什麼嗎?
- 理想情況下,我希望能夠讓實例定期報告其執行狀況,如果它在一定時間內未能這樣做,則終止它(並讓我的自動縮放組負責其餘的工作)。
我的 SSH 會話:
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-57-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Thu Jul 9 18:50:39 UTC 2015 System load: 0.0 Memory usage: 7% Processes: 47 Usage of /: 16.8% of 7.75GB Swap usage: 0% Users logged in: 0 Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud Last login: [[redacted]] ubuntu@ip-172-31-18-225:~$ :(){ :|: & };: [1] 1218 ubuntu@ip-172-31-18-225:~$ -bash: fork: Cannot allocate memory -bash: fork: Cannot allocate memory Connection to 52.2.62.141 closed.
編輯:所以,我的真正目標是縮小狀態檢查檢查的內容與檢查我的應用程序是否正在執行之間的差距。如果狀態檢查確實檢查核心是否正常執行,在我看來,我可以使用核心軟體看門狗(如 softdog 核心模組)來彌補這一差距。
- 狀態檢查是否真的檢查核心是否正常執行?
- 如果狀態檢查顯示核心正在執行,這是否一定意味著我載入的所有核心模組都在正常執行?
由於狀態檢查已經確保核心已啟動,因此使用softdog核心模組就足夠了。雖然這是一個軟體看門狗計時器,但它是一個核心模組這一事實意味著任何看門狗本身變得無響應的實例也會被 AWS 執行的實例狀態檢查檢測到,這反過來會終止 EC2 實例。
這是我在設置腳本中所做的(這是一個 Ubuntu AMI):
cat >>/etc/modules <<EOF softdog EOF apt-get install watchdog cat >>/etc/watchdog.conf <<EOF interval = 10 logtick = 60 max-load-1 = 24 max-load-5 = 18 max-load-15 = 12 min-memory = 65536 watchdog-device = /dev/watchdog0 ping = 8.8.8.8 interface = eth0 test-binary = /path/to/my/health/check/script.sh test-timeout = 30 realtime = yes priority = 1 EOF ...other setup stuff... reboot # If you don't want to reboot, you can instead do: modprobe softdog service watchdog restart
無反應!=沒有心跳。核心仍在執行。AWS 無法知道您已經消耗了所有記憶體。
AWS Cloudwatch 監控實際上只是您應該做的最低限度的工作。如果您需要更詳細的監控,您需要自己動手。