人品不好有個缺點,除了 AWS 申請不過、Snapshot 不小心死掉、EBS 掛不起來之外,這次 Amazon EC2 放大絕了!就在幾天前的某個月黑風高(?)的夜晚,正在 co-work 的同事突然傳訊息來,說測試機的 SSH 打不進去了。
就此,展開了一連串奇妙的旅程(!?)
好雲端,不用嗎?
相信我在 AWS 上面撞牆的時間,應該也不算少了(默,但是,這次遇到的事情實在有點誇張。大家都在吵雲端,好像什麼東西不丟到雲端就不夠潮一樣。我可以說,雲端好潮啊,當雲上面的東西都飄走之後,真的是潮到我眼眶快都出水了。
這次事件其實蠻弔詭的,首先是 SSH 無法認證,然後同一組 pem key 在其他的機器上面運作正常。接著是部份的網站出現 Fatal Error,這點我就覺得有鬼了,沒有人會去動 code 的地方,會莫名奇妙出現錯誤!?
然後,人品沒有點滿的我,赫然發現 EBS 似乎怪怪的,然後就先把有問題的機器給 Stop 下來,然後,
就開不了機了就開不了機了就開不了機了就開不了機了
我一定是人品大爆炸才會這樣的(欸
這件事情讓我想起之前 AWS 出狀況,讓 twitter 等服務受到影響的那個事件。後來陸續有一些檢討文,不過大部分不是檢討 AWS 怎麼搞的,而是檢討服務的備援機制之類的事情。果真,有些事情還真得是遇到了,才知道到底是怎麼一回事。
實際情況
我遇到的事情太多,所以列出這次的就好,
- SSH 登入失效,pem key 確認無錯誤
- Instance System Log 貌似有重開機的紀錄
- 機器停機(Stop)之後,再起不能
- EBS Volume 狀況看似良好
- 同樣的情況,在其他機器並無異常情況
- 同區的機器似乎有經過 AWS 機器維護的動作
通常,AWS 機器要維護的時候,他會發信給你,通知你說機器有維護。不過,這次似乎是很突然的出狀況,而且,我也沒有收到信說我的那一區(美東)的機器有要維護的訊息。就這樣死的不明不白啊(倒
解決辦法
這是有個大前提,你的 EBS Volume 還在,不管他狀況是不是良好,只要他是 available
的情況下都有機會救回來。你不要手賤把壞掉的機器特米內特(Terminate)掉之後,才來哭說怎麼 EBS Volume 不見了,我是不會理你的(推走
NO NOT TERMINATE YOUR INSTANCE EVEN IF THEY ARE FAILED, JUST STOP
-
先把舊有的機器所使用的 EBS Volume 釋放(Detach)掉
-
開一個同區(region)的新機器(重要!不同區無法跨區掛載 EBS Volume
-
將你原本那台的 EBS Volume 掛載到新機器上
-
從新的機器把磁區
mount
起來 -
開始救資料
然後默默經過了三個小時,正直與善良網站與資料庫都回來啦!資料庫?由於是測試機,所以我當然不可能放在 RDS 上面浪費錢,你說是不是!
實際上,這種作法可能不是最好,但是起碼能把資料都拉回來。不過,也因為他是測試機器,所以都不太關心異地備援的事情,現在就是想到去做一下 Snapshot,確保東西可以完整。不過,我比較擔心的是人品問題,每次 Snapshot 我都無法順利建立回來,實在是頗傷腦筋(欸
所以我順手做了一個 AMI 放在 S3 保心安就是了。
小結
遇到這種要開新機器來解決的情況其實不多,除了無法開機跟 SSH 無法登入外,幾乎不會這樣幹。欸,不要懷疑,當你的 SSH 壞掉,你是必須要用新機器去把壞機器的 authorized_keys
得改好才行。
當然,如果只有 SSH key 壞掉那倒是還好,這次我保險起見,還是重新建立一個 EBS Volume,畢竟我也不知道他到底哪裡壞掉,看得到的只有 SSH 有問題,看不到的還不知道有多少呢(抖
出來跑的,總有一天要還啊(茶