アマゾンウェブサービスの自動スケーリング:EC2 + CloudWatch

こんにちは

Amazon EC2に基づいた自動スケーリングの設定は非常に興味深いタスクであり、私はかつて解決し、現在は実践しています。 考えられるオプションは多数ありますが、最も単純なものを検討します。1つのバランサーの下での1つのサーバーの水平スケーリングです。

Cloud Watchはスケーリングのイニシエーターとして機能します。 メトリックは、 カスタムの負荷平均メトリックになります

それでは、始めましょう。 第一に、真のLinuxoidとして、次の理由から自動スケーリングの設定にコマンドラインツール(CLT)を使用することをお勧めします。


次のツールをダウンロードして解凍し、作業の準備と端末の構成を行います。


証明書pk-***。Pemおよびcert-***。Pem put in / opt / aws / keys。

.bash_profileに次の行を挿入して、bashプロファイルを構成します。

.bash_profile
export JAVA_HOME=/usr/java/latest export EC2_CERT=/opt/aws/cert-***.pem export EC2_PRIVATE_KEY=/opt/aws/pk-***.pem export EC2_HOME=/opt/aws/ec2 export PATH=$PATH:$EC2_HOME/bin export AWS_CLOUDWATCH_HOME=/opt/aws/mon export PATH=$PATH:$AWS_CLOUDWATCH_HOME/bin export AWS_ELB_HOME=/opt/aws/elb export PATH=$PATH:$AWS_ELB_HOME/bin export AWS_AUTO_SCALING_HOME=/opt/aws/as export PATH=$PATH:$AWS_AUTO_SCALING_HOME/bin 


そのため、その後、使用可能なコマンドのリストが目的の数に拡張されます。

1.バランサーを作成することから始めましょう:
 $ elb-create-lb testlb --headers --listener "lb-port=80,instance-port=8080,protocol=http" --listener "lb-port=443,instance-port=8443,protocol=tcp" --availability-zones us-east-1c DNS_NAME DNS_NAME DNS_NAME testlb-1678377526.us-east-1.elb.amazonaws.com 

ここに:
testlb-LBの名前
「Lbポート= 80、インスタンスポート= 8080、プロトコル= http」-LBの外部ポートとサーバーの内部ポート。 HTTPSでも同じ状況。

2. ID i-12345678のすぐに使用できるインスタンスがあると仮定します。 インスタンスをLBの下にインストールします。
 $ elb-register-instances-with-lb testlb --instances i-12345678 INSTANCE_ID i-12345678 

これで、インスタンスがLBで利用可能になりました。

3.作業インスタンスからイメージ(Amazon Machine Image-AMI)を削除します。
 $ ec2-create-image i-12345678 --no-reboot -n 'Image Name' -d 'Image Description' ami-87654321 

4.結果のamiを使用して、開始構成(構成の起動)を作成します
 $ as-create-launch-config testlc -i ami-87654321 --key=keypair --group mygroup --instance-type m1.large OK-Created launch config 

ここに:
keypair-ログインに使用するキーのペア。
mygroup-サーバーが発生するセキュリティグループ。

5.新しく作成された構成で自動スケーリンググループを作成します。
 $ as-create-auto-scaling-group testsg -l testlc --availability-zones us-east-1c --min-size 0 --max-size 2 --load-balancers testlb OK-Created AutoScalingGroup 

ここに:
testlc-作成した構成。
us-east-1c-インスタンスが発生するゾーン。
0と2は、それぞれグループの最小サイズと最大サイズです。
testlbはバランサーの名前であり、その下でグループ全体が育ちます。

これで、スケーリンググループとバランサーの準備が整いました。

次に、CloudWatchアラームを設定する必要があります。 非CloudWatchベースの自動スケーリングは、 ポリシー (設定されているポリシー )を介して機能します。 ポリシーの例は、インテントの数を1増やすことです。つまり、 最初にポリシーを設定してから、 アラームを作成します。これは、たとえば、負荷平均が1分間に5を超える場合に機能します。

6.さて、スケールアップポリシーは次のとおりです。
 $ as-put-scaling-policy ScaleUpPolicy --auto-scaling-group testsg --adjustment=1 --type ChangeInCapacity --cooldown 120 arn:aws:autoscaling:us-east-1:278634951321:scalingPolicy:2f3482d2-ca6c-4653-970c-eb68a593cf26:autoScalingGroupName/testsg:policyName/ScaleUpPolicy 

ここに:
--adjustment = 1-グループへの+1ホスト
--cooldown 120-2分間、すべてのアラームは無視され、新しいインスタンスは発生しません

7.さて、スケールアップのアラーム:
 $ mon-put-metric-alarm HighLoadAvAlarm --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --metric-name LoadAverage --namespace CustomMetric --period 60 --statistic Average --threshold 5 --alarm-actions arn:aws:autoscaling:us-east-1:278634951321:scalingPolicy:2f3482d2-ca6c-4653-970c-eb68a593cf26:autoScalingGroupName/testsg:policyName/ScaleUpPolicy OK-Created Alarm 

ここに:
--comparison-operator GreaterThanOrEqualToThreshold->> operator from trashhold。
--evaluation-periods 1-初めてトリガー
--metric-name LoadAverage --namespace CustomMetric- カスタムメトリック
-期間60-作動分
--statistic Average-平均値が計算されます
--threshold 5-負荷平均は5以下です。
--alarm-actions-どのポリシー。

8.スケールダウンポリシー:
 $ as-put-scaling-policy ScaleDownPolicy --auto-scaling-group testsg --adjustment=-1 --type ChangeInCapacity --cooldown 420 arn:aws:autoscaling:us-east-1:278634951321:scalingPolicy:2f3482d2-ca6c-4653-970c-eb68a593cf26:autoScalingGroupName/testsg:policyName/ScaleDownPolicy 

ここでは、クールダウンが大きくなります。 ダウンスケールインスタンスの後、グループは少なくとも6分間ダウンスケールしません。 さて、調整= -1。

9.スケールダウンのアラーム:

 $ mon-put-metric-alarm LoLoadAvAlarm --comparison-operator LessThanThreshold --evaluation-periods 1 --metric-name LoadAverage --namespace CustomMetric --period 120 --statistic Average --threshold 3 --alarm-actions arn:aws:autoscaling:us-east-1:278634951321:scalingPolicy:2f3482d2-ca6c-4653-970c-eb68a593cf26:autoScalingGroupName/testsg:policyName/ScaleDownPolicy OK-Created Alarm 

ここでは、2分を超える負荷平均が3未満の場合にアラームがトリガーされます。

まあ、それだけです。 そのため、負荷に応じて、スケーリンググループは3つのインスタンスに成長し、1つは常にアクティブになります。 自動スケーリングの簡単な例を次に示します。 当然、条件を変更し、あなたの裁量で数字を楽しむことができます。

Source: https://habr.com/ru/post/J138732/


All Articles