2012年8月28日 星期二

使用Auto-Scale

撰寫︰2012/8/29 02:32
次數︰1
一、前言
亞馬遜因為擁有自動調整伺服器需求的功能,
因此在近年來成為灸手可熱的選擇之一。

最近在研究CloudWatch + AutoScale來自動依狀況自動增加或減少EC2開啟的機臺,
想要做到能夠自動調節+省錢,
而這件事也真的辦到了。

二、說明
CloudWatch稱為雲監控,
亞馬遜將他們大部份的服務,
提供一個還蠻完善的機臺監控服務。

我可以利用亞馬遜提供的tool工具,
寫出一套適合自己的腳本,
每5分鐘從EC2主機print出記憶體用量的log給CloudWatch,
然後再在CloudWatch裡做ALARM監聽,
只要記憶體報告跟我說現在的記憶體用量超過總量的30%(我是用m1.small型EC2),
就寄一封EMAIL給我,
並幫我自動開一臺機臺分擔流量。

因為要能分擔流量,
所以在製作自動增設機臺的腳本時,
要用到ELB(流量負載平衡)的概念。

ELB(流量負載平衡)提供了多機臺一統的概念,
只要用戶連結至ELB的End Point(對外連結點),
ELB就會馬上將其名下擁有的EC2們做偵測,
並將流量分派到任一健康的EC2機臺。

三、Auto Scale的腳本製作法
Auto Scale由於仍然需要用Terminal去執行,
因此必須先將Auto Scale tool安裝且設定好環境變數。

之後就做一堆事,
這裡將我寫好的Auto Scale腳本列出來。

欲執行以下指令時,
需先將做好Credential的設定。
如果你操作tool的環境是Window,則下︰
C:\> set AWS_CREDENTIAL_FILE=<PATH> 

[建立Launch-Config檔]
寫一個產出基本執行腳本,名稱定為MsLaunchConfig(可自訂),image-id找一個你喜歡的AMI(當然也可以用自己安裝設定後的EC2製成的AMI,這樣就能做出一臺一模一樣的主機了。)
region最好是指定一下,因為預設是在美國。
key pair也設定一下,這樣子才能夠有登入並修改主機的權限。
as-create-launch-config MsLaunchConfig --image-id ami-9c8ccdce(你要備份的AMI_ID) --instance-type m1.small --region ap-southeast-1 --group quicklaunch-1 --key jsp

[建立Auto-scale Group]
製作一個Auto scale群組。
在這邊設定一次開臺上限就是1,然後開出來的機臺要放進我創建的mslb這個負載平衡器(load balance)裡。
as-create-auto-scaling-group MsGroup --availability-zones ap-southeast-1b --launch-configuration MsLaunchConfig --min-size 1 --max-size 1 --load-balancers mslb --region ap-southeast-1

[加開1臺EC2 Policy(政策)]
告訴MsGroup一旦Auto Scale的+1臺EC2條款被啟動,
一次就是新開一臺。
as-put-scaling-policy MsScaleUpPolicy --auto-scaling-group  MsGroup --adjustment 1 --type ChangeInCapacity --cooldown 300 --region ap-southeast-1

[關閉1臺EC2 Policy(政策)]
CloudWatch一旦觸發到一個我們設定的狀態(如主要的EC2記憶體沒用那麼兇了),
就幫我關掉1臺EC2。
as-put-scaling-policy MsScaleDownPolicy --auto-scaling-group  MsGroup "--adjustment=-1" --type ChangeInCapacity --cooldown 300 --region ap-southeast-1

註︰
亞馬遜Document裡提到,
一個正常的Auto scale腳本,
應該要有2個Policy,
一個是啟動,
另一個則是關閉。

如果要換成別的AMI做Auto Scale,
目前還沒有update等相關指令,
只能用刪除的方式將設定檔刪除,
再重新建立一組設定資料︰
先刪除Group,再刪Config檔。
[刪除Auto-scale Group]
as-delete-auto-scaling-group MsGroup --force-delete --region ap-southeast-1

[刪除Launch-Config檔]
因為auto scale tool沒有提供修改的功能,
因此如果值設錯了,就得刪除再重新新增了。
as-delete-launch-config MsLaunchConfig --region ap-southeast-1

2012年8月7日 星期二

RDS的最大連線數限制

RDS的機臺分很多型,
RAM、硬碟速度都不同,
一位外國網友列出了他的測試數據

Max. Connections on RDS MySQL


Just recently I ran into some MySQL issues while load-testing our web servers. The reason were limitations in the predefined MySQL RDS settings for our RDS instance plus some swapping lags due to missing RAM on heavy operations. The CPU was always at less than 30%.
I fixed both issues in upgrading from a small RDS instance (1.7 GB RAM) to a large RDS instance (7,5 GB RAM).
The predefined AWS RDS settings for MySQL max. connections are:
  • Small Instance: 150 connections
  • Large instance: 640 connections
他測出一個samll型的RDS(1.7 GB RAM),大概可以忍受150人同時連線,
而large型的RDS(7.5 GB RAM)則能忍受640個連線數。
我自己使用的經驗,如果是提供的AWS Free Usage Tiermicro型RDS,只能提供33人同時連線。
悲劇。