2017年9月18日 星期一

AWS EC2 - cloud watch , load balance , auto scaling

AWS EC2 的 ELB ( load balance )  設定前,  要先設定好其他一些相關的項目.
因為是大約一年前設定的記憶, 自己之前筆記的也不是很完整, 只能列出設定的大略流程.


假設目前有個 instance , 需求是能在 CPU loading 80% 時, 自動再開一個一模一樣的 instance 做 load balance , 然後在原本 instance  CPU loading 30% 時, 自動把新開的 instance 清掉. 那需要相關的設定如下:

1.  將目標 instance 製作 image  (在 instance 介面的  Action 選 create image )

2. Launch Configurations (在 EC2  menu 的 Auto Scaling 裡)
    create launch configuration 時, 選擇 "My AMIs" 然後選擇前一步所產生的 image
    後續的設定和設定 instance 差不多.

3. 新增一個 Auto Scaling 設定, 選擇前一步設定好的 Launch Configure Name

4. 設定 Cloud Watch:  這設定不在 EC2 選單內, 而是 AWS 的服務之一. 
   設定兩個  policy,  對目標 instance 的 CPU loading, 超過 80% 或低於 30% 時發出 Alarm .

   Alarm 要設定 "AutoScaling Action" , 然後設定為前一步設定好的 Auto Scaling Name.
   然後 Action 分別設定為 "Add 1 instance"  或 "Remove 1 instance"

   到目前為止, 已經可以透過 Auto Scaling 和 Cloud Watch 在目標 instance CPU loading 變化時, 來自動增減 instance .  但是要做到分流, 也就是 load balance , 還要設定下一步. 如果在這階段就測試的話, 因為沒有分流, 所以目標 instance CPU loading 不會因為增加 instance 而降低, 不小心可能就會帶起很多 instance 了.

5. 設定 Load Balance (ELB),  在設定前要先瞭解一下 AWS 的 load balance 的運作方式.
    在做 load balance 時, AWS 會提供一個 ip (AWS 也有提供 FQDN) 做為實際流量的入口, 因此服務的入口要透過 AWS 的 ip/FQDN , 才會有 load balance 的效果.

    每個 load balance policy 大約會設定以下項目
  • instance :  那些 instance 會加入 load balance , 選目標 instance 即可. 之後透過 AutoScaling 增加的 instance 會自動加入 load balance 裡.
  • Security Group :  這邊值得注意一下. 因為這邊會套用這個 firewall policy 的是 AWS 的 ip/FQDN , 所以可以只要開 service 需要的 port 就好, 不需要開 ssh 之類的 (也連不上).
  • Listeners : 要讓 ELB 做 load balance 的 port  (即實際上需要 load balance 的 port )
  • Tag :   這個 ELB policy 取名, 會影響之後產生的 FQDN 


到目前為止, 大致上算設定完成, 只要將流量導入的點設定到 AWS ELB 所提供的 FQDN 即可.
如果自己有 DNS 要設定的話, 只要將原本設定的 FQDN 設定一筆 CNAME 到  ELB 的 FQDN 就好.


接下來是一些測試的方式或工具

ELB 的 Log 


aws 的 elb ( ec2 load balance)  預設是沒有 log 的, 可以在設定中打開, 它會丟到指定的 s3  Buckets

而 s3 那邊要設定 permission 才能收 elb 丟來的 log,  可是那個設定的方式很機車, 可以參考這個網頁  , 其中欄位設定上比較讓人困擾的可能是 s3 Bucket 要如何填.

假設我的 buckets 名稱是 duan, 裡面有個目錄叫 elb , 於是應該要填 arn:aws:s3:::duan/elb/*
比較機車的是, 都填寫好後, 它只是把你填寫的資料變成設定檔, 還要自己把設定檔加到 policy 中 (現在不知道介面改的友善了點沒).

至於 elb 那邊就比較簡單了,  s3 Butkets 的路徑就填寫 duan/elb 就好
elb 設定完成時會檢查 s3 的permission, 檢查過的話應該就沒問題, 會建立好相關的路徑並丟一份 test log , 可以馬上檢查設定正確與否

壓力測試

對 instance 做壓力測試, 可以很容易確認 Auto Scaling 和 Load Balance 有沒有生效
我在 Cloud Watch 設定是監控  memory 使用量,  所以我用 這個網頁 介紹的工具來做測試.

這個網頁有對 這個工具 stress  做更完整的介紹, 可以測試相當多種類的壓力測試.


關於 CloudWatch  monitor 的項目

CloudWatch 內建對 EC2 的系統資源只包含 cpu  network-inbound/outbound 及 disk-read/wrtie 的統計, 如果要自己監控其他資源如 memory 的話, 就要自己送資料給 CloudWatch.

而最快的方法就是用 AWS 提供的 script , 這個 script 可以取得 memory 和 storage 使用量送給 CloudWatch , 不用自己寫 script 就簡單多了.

可以參考 這個網頁 ,  不過有地方沒寫很清楚, 就是如果要使用 awscreds.template 設定 key, 就要指定這個檔案的路徑, 而不是放在同個目錄下就好. 至於如何使用這個 script ( argument 等等) , 如何設定 cron 以及安裝方式等等, 這個網頁算寫的很清楚了.

如果還要取得其它資訊送到 cloudwatch 監測 (例如資料庫的資訊) , 可能就要自己寫 script 或找別人寫好的來用了.

沒有留言: