這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)AWS如何配置AutoScaling來實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、陽谷網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為陽谷等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
AWS 是亞馬遜云計(jì)算平臺(tái)。
EC2 是 AWS 提供的云主機(jī),一般采用基于 CentOS 的 Amazon Linux 系統(tǒng),像大多數(shù)云主機(jī)一樣使用。
ELB 是 AWS 提供的負(fù)載均衡服務(wù),可以將請求轉(zhuǎn)發(fā)到目標(biāo)組中的某個(gè) EC2 實(shí)例,也會(huì)對目標(biāo)組實(shí)例進(jìn)行健康檢查,只將請求轉(zhuǎn)發(fā)到健康的實(shí)例。
AWS AutoScaling 服務(wù)允許我們設(shè)定 AutoScaling 組(ASG)。ASG 維護(hù)了一組 EC2 實(shí)例,EC2 實(shí)例可以分布在不同的可用區(qū)里以保證可用性。AutoScaling 能檢查實(shí)例健康狀況,自動(dòng)替換不健康的實(shí)例,能根據(jù)特定規(guī)則增減需要的實(shí)例數(shù)量,并能在啟動(dòng)、銷毀 EC2 實(shí)例時(shí)觸發(fā)事件調(diào)用其他服務(wù)。AutoScaling 服務(wù)能夠與 ELB 彈性負(fù)載均衡服務(wù)結(jié)合使用,實(shí)例不需要公網(wǎng) IP,而且實(shí)例在啟動(dòng)后會(huì)自動(dòng)加入 ELB 的目標(biāo)組,在終止實(shí)例前會(huì)先等待 ELB 連接耗盡。
我們要實(shí)現(xiàn)的結(jié)構(gòu)如圖所示:
看上去夢寐以求,但用起來卻沒有這么舒服。
我們需要給 ASG 提供啟動(dòng)配置(Launch Configuration),啟動(dòng)配置里指定了 EC2 的實(shí)例類型、AMI 鏡像、存儲(chǔ)設(shè)備、IAM 角色、SSH Key、用戶數(shù)據(jù)(User Data)等一系列信息,用于啟動(dòng)新實(shí)例。
我們主要關(guān)心 IAM 角色和啟動(dòng)腳本,其他的按需配置。
用戶數(shù)據(jù)實(shí)際上是啟動(dòng)腳本,當(dāng) EC2 實(shí)例啟動(dòng)時(shí),在初始化的最后以 root 身份將用戶數(shù)據(jù)作為腳本執(zhí)行。你可以登錄實(shí)例,在 /var/log/cloud-init-output.log
日志尾查看其輸出。
因?yàn)槊看涡薷膯?dòng)配置都需要重新創(chuàng)建 ASG,而這就需要清空實(shí)例等十分繁瑣,所以最好將用戶數(shù)據(jù)設(shè)置為從外部獲取真正的啟動(dòng)腳本來運(yùn)行,以便修改調(diào)試:
#!/usr/bin/env bash aws s3 cp s3://bucket/key /tmp/myscript.sh && chmod +x /tmp/myscript.sh && /tmp/myscript.sh
這需要給 EC2 的 IAM 角色允許 S3 訪問權(quán)限。
我們根據(jù)啟動(dòng)配置創(chuàng)建 ASG,設(shè)定最低、最高、所需的實(shí)例數(shù)量,將實(shí)例連接到特定的 ELB 目標(biāo)組,以 ELB 的健康檢查作為 ASG 中實(shí)例的健康依據(jù)等等。
不健康的實(shí)例在健康檢查失敗且等待超時(shí)后將被終止。具體請參考 ASG 中實(shí)例的運(yùn)行狀況檢查。
ASG 中實(shí)例有生命周期的概念,也就是實(shí)例有一個(gè)狀態(tài),并在不同的狀態(tài)間轉(zhuǎn)移。
ASG 中實(shí)例的生命周期如圖所示:
在啟動(dòng)的 Pending 和終止的 Terminating 狀態(tài)均可以添加鉤子,鉤子會(huì)觸發(fā)事件,并等待事件完成再進(jìn)入下一狀態(tài)(當(dāng)沒有鉤子時(shí)實(shí)例會(huì)自動(dòng)跳到下一狀態(tài))。鉤子能設(shè)置超時(shí)時(shí)限、超時(shí)結(jié)果。
可以使用 aws-cli 或 AWS SDK 等主動(dòng)完成生命周期事件,或延期它。事件完成需要提供結(jié)果,主動(dòng)完成和超時(shí)均有“繼續(xù)”和“放棄”兩種結(jié)果可選。
可以給啟動(dòng)或終止階段添加多個(gè)鉤子,他們會(huì)在上一個(gè)鉤子完成且結(jié)果為“繼續(xù)”后依次執(zhí)行。在啟動(dòng)階段一旦出現(xiàn)“放棄”的結(jié)果后,實(shí)例會(huì)跳過其他鉤子,直接開始終止過程,這也會(huì)觸發(fā)終止階段的鉤子;在終止階段出現(xiàn)“放棄”的結(jié)果后,實(shí)例會(huì)跳過其他鉤子,直接終止。
使用 aws autoscaling put-lifecycle-hook
命令添加溝子,有兩種可選的 transition 值:
autoscaling:EC2_INSTANCE_LAUNCHING
實(shí)例啟動(dòng)時(shí)
autoscaling:EC2_INSTANCE_TERMINATING
實(shí)例終止時(shí)
下面這個(gè)命令的例子演示了添加“啟動(dòng)時(shí)鉤子,超時(shí)時(shí)限 600s,超時(shí)后放棄該實(shí)例”:
aws autoscaling put-lifecycle-hook \ --auto-scaling-group-name ${ASG} \ --lifecycle-hook-name ${HOOK} \ --lifecycle-transition "autoscaling:EC2_INSTANCE_LAUNCHING" \ --heartbeat-timeout 600 \ --default-result "ABANDON"
如果使用了下文的 SNS 或 SQS 接收事件,還需要提供 role-arn
和 notification-target-arn
。AWS 提供了比較完整的文檔 添加生命周期鉤子 來講述這一過程。
使用 aws autoscaling complete-lifecycle-action
命令可以主動(dòng)完成事件,使生命周期繼續(xù)(CONTINUE
)或放棄(ABANDON
),根據(jù)你獲得的信息,提供 instance-id
、lifecycle-action-token
任一即可:
下面這個(gè)命令的例子演示了“完成 ${ASG}
組的實(shí)例 ${INSTANCE_ID}
上的 ${HOOK}
事件,結(jié)果為繼續(xù)”:
aws autoscaling complete-lifecycle-action \ --auto-scaling-group-name ${ASG} \ --lifecycle-hook-name ${HOOK} \ --instance-id ${INSTANCE_ID} \ --lifecycle-action-result CONTINUE
命令 aws autoscaling record-lifecycle-action-heartbeat
可以重置超時(shí)時(shí)間,使用方法類似于上文所述的 complete-lifecycle-action
。
注意,如果希望 EC2 之上的腳本來執(zhí)行上述操作,需要給 EC2 的 IAM 角色允許 autoscaling:CompleteLifecycleAction
或 autoscaling:RecordLifecycleActionHeartbeat
權(quán)限。
EC2 實(shí)例如何獲取自身的 instance-id 呢?
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) ASG=$(aws autoscaling describe-auto-scaling-instances --output text --query 'AutoScalingInstances[?InstanceId==`'${INSTANCE_ID}'`].AutoScalingGroupName')
具體請參考 檢索實(shí)例元數(shù)據(jù) 和 控制 aws-cli 的命令輸出。
AWS 允許鉤子觸發(fā)后向外傳播這一事件,有三種方式——通過 CloudWatch Events、SNS 或者 SQS。他們會(huì)攜帶足夠的信息,具體的攜帶數(shù)據(jù)請參考 AutoScaling 事件。
具體配置如果有疑問,請參考 添加生命周期鉤子 中《向 Auto Scaling 組添加生命周期掛鉤》節(jié)的前兩步。
事件被傳播后,一般使用 Amazon Lambda 或者額外的服務(wù)器來處理。同樣注意,如果希望 Lambda 報(bào)告事件完成或延期,請給 Lambda 的 IAM 角色允許相應(yīng)權(quán)限。
很多時(shí)候我們需要在 EC2 實(shí)例上執(zhí)行腳本,這方面的內(nèi)容請參見這篇博客 AWS 使用 Simple System Manager 向 EC2 發(fā)送命令遠(yuǎn)程執(zhí)行腳本。
在實(shí)例啟動(dòng)時(shí),我們一般不把事件傳播出去交由 Lambda 處理,而是由用戶數(shù)據(jù)里的啟動(dòng)腳本在執(zhí)行結(jié)束后自行報(bào)告事件完成(繼續(xù)),或者通知 SQS、SNS、Lambda 等來做。
因?yàn)樵趯?shí)例啟動(dòng)時(shí)我們需要手動(dòng)安裝 SSM Agent,此時(shí)該服務(wù)對外界而言不可用。所以我們不能用這種方式來與 EC2 通信。
在實(shí)例終止時(shí),我們一般用 Lambda 處理,并用 SSM 通知 EC2 執(zhí)行回收腳本,回收腳本自行報(bào)告事件完成(繼續(xù)),如果 SSM 失敗,再由 Lambda 報(bào)告事件完成(放棄)。
AWS 提供了多種 擴(kuò)展 ASG 的大小 的策略。
這里我們提供兩個(gè)簡單的手工策略來擴(kuò)展 ASG 的大?。?/p>
aws autoscaling put-scaling-policy \ --auto-scaling-group-name ${ASG} \ --policy-name "inc" \ --policy-type "SimpleScaling" \ --adjustment-type "ChangeInCapacity" \ --scaling-adjustment 1 aws autoscaling put-scaling-policy \ --auto-scaling-group-name ${ASG} \ --policy-name "dec" \ --policy-type "SimpleScaling" \ --adjustment-type "ChangeInCapacity" \ --scaling-adjustment -1
現(xiàn)在我們獲得了高可用的彈性計(jì)算服務(wù),配置過程很復(fù)雜,最好能夠采用 CloudFormation 來配置,或者使用 aws-cli 編寫腳本來完成。
上述就是小編為大家分享的AWS如何配置AutoScaling來實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁題目:AWS如何配置AutoScaling來實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù)
標(biāo)題鏈接:http://aaarwkj.com/article28/iidccp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、外貿(mào)建站、動(dòng)態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、服務(wù)器托管、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)