AWS如何配置AutoScaling來(lái)實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)AWS如何配置AutoScaling來(lái)實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司專注于企業(yè)營(yíng)銷型網(wǎng)站、網(wǎng)站重做改版、陽(yáng)谷網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為陽(yáng)谷等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

先驗(yàn)知識(shí)

AWS 是亞馬遜云計(jì)算平臺(tái)。

EC2 是 AWS 提供的云主機(jī),一般采用基于 CentOS 的 Amazon Linux 系統(tǒng),像大多數(shù)云主機(jī)一樣使用。

ELB 是 AWS 提供的負(fù)載均衡服務(wù),可以將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)組中的某個(gè) EC2 實(shí)例,也會(huì)對(duì)目標(biāo)組實(shí)例進(jìn)行健康檢查,只將請(qǐng)求轉(zhuǎn)發(fā)到健康的實(shí)例。

目標(biāo)

AWS AutoScaling 服務(wù)允許我們?cè)O(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)如圖所示:

AWS如何配置AutoScaling來(lái)實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù)

看上去夢(mèng)寐以求,但用起來(lái)卻沒(méi)有這么舒服。

給 ASG 創(chuàng)建 EC2 的啟動(dòng)配置

我們需要給 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)腳本來(lái)運(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 訪問(wèn)權(quán)限。

創(chuàng)建 ASG

我們根據(jù)啟動(dòng)配置創(chuàng)建 ASG,設(shè)定最低、最高、所需的實(shí)例數(shù)量,將實(shí)例連接到特定的 ELB 目標(biāo)組,以 ELB 的健康檢查作為 ASG 中實(shí)例的健康依據(jù)等等。

不健康的實(shí)例在健康檢查失敗且等待超時(shí)后將被終止。具體請(qǐng)參考 ASG 中實(shí)例的運(yùn)行狀況檢查。

ASG 中實(shí)例的生命周期

ASG 中實(shí)例有生命周期的概念,也就是實(shí)例有一個(gè)狀態(tài),并在不同的狀態(tài)間轉(zhuǎn)移。

ASG 中實(shí)例的生命周期如圖所示:

AWS如何配置AutoScaling來(lái)實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù)

生命周期鉤子

在啟動(dòng)的 Pending 和終止的 Terminating 狀態(tài)均可以添加鉤子,鉤子會(huì)觸發(fā)事件,并等待事件完成再進(jìn)入下一狀態(tài)(當(dāng)沒(méi)有鉤子時(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ì)跳過(guò)其他鉤子,直接開(kāi)始終止過(guò)程,這也會(huì)觸發(fā)終止階段的鉤子;在終止階段出現(xiàn)“放棄”的結(jié)果后,實(shí)例會(huì)跳過(guò)其他鉤子,直接終止。

添加鉤子

使用 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-arnnotification-target-arn。AWS 提供了比較完整的文檔 添加生命周期鉤子 來(lái)講述這一過(guò)程。

報(bào)告事件完成或延期

使用 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 之上的腳本來(lái)執(zhí)行上述操作,需要給 EC2 的 IAM 角色允許 autoscaling:CompleteLifecycleActionautoscaling: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')

具體請(qǐng)參考 檢索實(shí)例元數(shù)據(jù) 和 控制 aws-cli 的命令輸出。

鉤子事件的傳播

AWS 允許鉤子觸發(fā)后向外傳播這一事件,有三種方式——通過(guò) CloudWatch Events、SNS 或者 SQS。他們會(huì)攜帶足夠的信息,具體的攜帶數(shù)據(jù)請(qǐng)參考 AutoScaling 事件。

具體配置如果有疑問(wèn),請(qǐng)參考 添加生命周期鉤子 中《向 Auto Scaling 組添加生命周期掛鉤》節(jié)的前兩步。

事件被傳播后,一般使用 Amazon Lambda 或者額外的服務(wù)器來(lái)處理。同樣注意,如果希望 Lambda 報(bào)告事件完成或延期,請(qǐng)給 Lambda 的 IAM 角色允許相應(yīng)權(quán)限。

很多時(shí)候我們需要在 EC2 實(shí)例上執(zhí)行腳本,這方面的內(nèi)容請(qǐng)參見(jiàn)這篇博客 AWS 使用 Simple System Manager 向 EC2 發(fā)送命令遠(yuǎn)程執(zhí)行腳本。

事件處理的個(gè)人經(jīng)驗(yàn)

在實(shí)例啟動(dòng)時(shí),我們一般不把事件傳播出去交由 Lambda 處理,而是由用戶數(shù)據(jù)里的啟動(dòng)腳本在執(zhí)行結(jié)束后自行報(bào)告事件完成(繼續(xù)),或者通知 SQS、SNS、Lambda 等來(lái)做。

因?yàn)樵趯?shí)例啟動(dòng)時(shí)我們需要手動(dòng)安裝 SSM Agent,此時(shí)該服務(wù)對(duì)外界而言不可用。所以我們不能用這種方式來(lái)與 EC2 通信。

在實(shí)例終止時(shí),我們一般用 Lambda 處理,并用 SSM 通知 EC2 執(zhí)行回收腳本,回收腳本自行報(bào)告事件完成(繼續(xù)),如果 SSM 失敗,再由 Lambda 報(bào)告事件完成(放棄)。

擴(kuò)展 ASG 的大小

AWS 提供了多種 擴(kuò)展 ASG 的大小 的策略。

這里我們提供兩個(gè)簡(jiǎn)單的手工策略來(lái)擴(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ù),配置過(guò)程很復(fù)雜,最好能夠采用 CloudFormation 來(lái)配置,或者使用 aws-cli 編寫腳本來(lái)完成。

上述就是小編為大家分享的AWS如何配置AutoScaling來(lái)實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)題目:AWS如何配置AutoScaling來(lái)實(shí)現(xiàn)高可用的彈性計(jì)算服務(wù)
標(biāo)題鏈接:http://muchs.cn/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)