アマゾンウェブサービスの自動スケーリング: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つは常にアクティブになります。 自動スケーリングの簡単な例を次に示します。 当然、条件を変更し、あなたの裁量で数字を楽しむことができます。



All Articles