Elastic Computing Cloud
其實本質就是個虛拟機。
虛拟機的資源劃分就和我們普通的伺服器沒啥差別。計算,存儲,記憶體。是以AWS在提供EC2服務的時候也是這麼劃分的。當然因為業務的需求,現在細分了不少。
英語名稱為instance type:
一個compute optimized 的instance type的參數 當我們在launch一個EC2 intance的時候,需要選擇一個AMI(AWS Machine Image)。我個人了解這個類似虛拟機硬碟的一個指針,(當然同時包含了執行個體需要的作業系統,應用程式及其相關的模闆)。因為虛拟機的硬碟,記憶體等其實都是以檔案的形式存在的。是以隻要provision了一堆資源,當使用者發起一個EC2,隻要把預先弄好的指針指到相應的EBS 卷就可以了。 4種類型的AMI- Published by AMI 免費的
- AMI Marketplace (這個是第三方釋出的,例如微軟會釋出一個打完更新檔的Windows 2016)
- Generated from Existing Instance 顧名思義
- Uploaded Virtual Services (可以用VMWare 的ova,vmdk檔案生産虛拟機,因為我們知道AWS是基于KVM開發的)
AWS預設以及建議使用密鑰對(Key Pair)的形式通路EC2執行個體,AWS将儲存public key,使用者負責儲存私private key。
安全組(Security Group)檢測資料包的端口、協定、源IP位址,類似一個stateful Firewall的作用。記住Security Group隻有allow,沒有deny
彈性IP(Elastic IP address):
An elastic IP address is an address unique on the Internet that you reserve independently and associate with an Amazon EC2 instance. 其實可以把它簡單的了解為公網位址。這個Elastic IP有個備份功能,即這台虛拟機挂了,接上來的虛拟機能繼續使用這個elastic ip,進而實作備援。
Because it can be transferred to a replacement instance in the event of an instance failure, it is a public address that can be shared externally without coupling clients to a particular instance.
在開啟EC2 instance的時候,有幾個feature在實際運維中也可以有所幫助。
- Bootstraping:實際上就是在開機的時候刷一段腳本,可以是Linux bash,也可以是Windows Powershell
- VM import/export 不僅可以從AMI導入。也可以将現有的EC2導出,然後放入on-prem的環境裡
- Instance meta data: http://169.254.169.254/latest/meta-data/ 會以json格式傳回大量的關于此EC2 instance的attributes
EC2的計費類型
On-Demand Instances 用多少付多少
Reserved Instances
和AWS簽一年或者三年的合同,可以獲得折扣。同時買斷這些運算資源
Spot Instances 競價執行個體,較為便宜,但同時使用者得到的資源也不穩定
Scheduled Reserved Instances
Dedicated Instances
Dedicated Hosts
重點是前三種
開始進入console 建立一個EC2
第一個EC2, 選擇AWS 的Linux,裡面預裝了AWS CLI,Ruby,Python
step 1 Choose AMI
step 2 選擇instance type
step 3 配置參數
這裡說一下placement group
When you launch a new EC2 instance, the EC2 service attempts to place the instance in such a way that all of your instances are spread out across underlying hardware to minimize correlated failures.
cluster:同一個AZ,一般使用在延時低的環境裡面。
同時,如果開啟了CloudWatch對這台EC2進行監控會有額外費用産生。
租戶啥的不用管。一般都用最便宜的。
step 4 Add storage 其實就是建立一個EBS volume
step 5 Add Tags
Step 6 Security Group
AWS竟然還能自動檢測我家的ip位址……
當review 完launch之後,生成一對秘鑰對。
記得這個秘鑰對需要用putty的generator重新load一下 變成ppk形式才能使用。然後Amazon Linux不是root user……是ec2-user...
成功進入
檢視metadata的方法 curl http://169.254.169.254/latest/meta-data/
建立完EC2之後,也要捎帶開一下這個dashboard
個人覺得比較重要的是Tag。Tag可以在業務層面打上表示,在day2 的運維中,很多其他的AWS服務也能調用。典型例子就是IAM。
在建立EC2的時候,需要挂載一個卷。通常卷我們會使用EBS。注意EBS,其實是差別于S3的一種存儲服務,也是可以存資料的,隻不過單價較貴,我們通常隻會用來給EC2的執行個體使用。
比較有趣的是,EBS是可以脫離EC2執行個體存在的,即你terminate一個EC2的時候,你是可以選擇是否保留這個EBS卷的。這個EBS卷,隻在本AZ裡面生效。這裡我搬運一句study 貴的上的原話:Each Amazon EBS volume is automatically replicated within its Availability Zone to protect you from component failure。
EBS備份的方式是做snapshot,這個snapshot可以儲存在S3上面,并且是incremental的。
如果要将EBS卷複制到不同的AZ,那就是将這個快照複制到另外一個AZ,然後根據這個snapshot生成一個卷。
EBS根據需求一般分為三類,magenetic,general purpose SSD, provisioned-IOPS-SSD。加個麼,肯定最後那個最貴啦。
總結一下:
- 備份的快照将會儲存在亞馬遜S3 (Simple Storage System)上
- EBS快照屬于ncremental backup,即隻會在更新過的資料上做備份
- 你可以在EC2執行個體運作的狀态下進行EBS的快照操作,但會給EC2的系統帶來一定延遲(CPU,記憶體使用率會變高)
- 最佳實踐是将EC2執行個體停止,然後将EBS從EC2上解除安裝下來,進行快照操作
- 你可以基于EBS Snapshot去建立一個新的EBS volume
- 加密的EBS volume創造的snapshot, 也是自動加密的
EC2/AMI/EBS/Snapshot的關系
如果想要将EC2從一個區域遷移到另外一個區域。唯一的方法就是如下:
- 從EC2中建立一個AMI
- 将此AMI複制到另一個region中,注意,雖然AMI 内容一樣,但是AMI的ID是不同的
- 通過這個AMI建立一個EC2執行個體
- 将此EC2挂載的EBS卷,備份成snapshot
- 将snapshot遷移到另外一個區域(其實這是S3的操作),轉換成一個EBS卷
- 将這個volume挂載到我們之前建立的EC2上
同一個AZ就不用那麼麻煩了,直接建立一個你想要的用的EBS挂上去就行。
ELB/ALB/ASG
AWS的load balancer在功能性上較為簡單,隻是簡單的TCP,SSL。實際上就是F5的LTM的基礎功能。不過在一般的生産環境中也夠用了。load balancer本身也是managed service,是以不需要對太多的具體參數進行調優,也不需要考慮redundancy,打更新檔等,因為本來就是分布式架構
study guide上把load balancingf和auto scaling 單獨放在一章,配置界面裡面可以看到實際上內建在EC2 dashboard的。
一邊配置這個load balancer一邊講概念
Step 1: 基礎配置
Internet LB vs Internal LB
Internet 好了解,一般來說end user都是通過使用者名通路某些資源(通常是web server,是以這裡我選擇了ALB,listener 開啟https 443)
Internal LB 通常是放在web server通路application server之間。我放一段學習指南的原話:
An Internet-facing load balancer might receive and balance external traffic to the presentation or web tier whose Amazon EC2 instances then send its requests to a load balancer sitting in front of the application tier.
注意在基礎配置裡面,會讓你選擇AZ,可以看出AWS的load balancer就是分布式架構。
Step 2: 安全配置
這裡的證書,其實就是一個根證書,用來validate使用者通路的。取決于你是用internal 還是internet LB。
Step 3 Configuring Routing
選擇target group,實際上就是F5裡面的Pool,定義了一個業務/服務。
Step 4 Registering Targets
往Pool 裡面添加pool member。一般這時候Auto Scaling Group就派上用場了。
附上茶館的一張圖:
Auto Scaling:自動地增加/減少EC2執行個體的數量,進而讓你的應用程式一直能保持可用的狀态。
Auto Scaling Plans:(一看名字就一目了然,沒啥好說的)
- Manual Scaling
- Sceduled Scaling
- Dynamic Scaling
Auto Scling 的元件
-
Launch Configuration
其實就是一台EC2 一般需要的參數 (這個截圖就不放了,基本和建立一台EC2 沒設呢麼差別,就是少了些步驟)
AMI, keypair,Instance type, Security Group,IAM Role(這些可以複用的參數)
-
Auto Scaling Group
Name, Launch Configuration, AZ, Desired Capacity, Maximum Capacity, Load Balancer
-
Scaling policy
指的是在何種情況下我們需要添加或者删減EC2 的執行個體。Auto Scaling Group還可以根據CloudWatch的警報在調整。
放一張三個元件的關系。