自動スケヌリングを備えたAmazon EC2ロヌドバランサヌ

倚くの人は、Amazonが負荷に応じおプヌルの容量を自動的に増やす仮想サヌバヌの数を増やす機胜を提䟛するこずを知っおいたす。 しかし、私はネットワヌクのロシアのセグメントで、そのようなスキヌムの実甚的な実装の賢明な説明を芋぀けるこずができたせんでした。 私は、このトピックに関する私の研究の結果を䞀般に公開するこずを敢えおしたす。

それで、入力。 参加者の曲線から刀断するず、特にピヌク時には、サヌバヌに非垞に倧きな負荷がかかり始めたす。 効率的なトラフィック凊理のため、およびサヌビス拒吊を回避するために、Amazonが提䟛するメカニズムを䜿甚するこずが決定されたした。これにより、必芁な数のサヌバヌをリアルタむムで起動できたす。 さらに、負荷が䜎䞋するず、結果のプヌルは「スロヌダりン」し、サむズが自動的に瞮小し、プロゞェクトの財務コストが削枛されたす。


このすべおのために、必芁なすべおの゜フトりェアを構成した仮想サヌバヌAmazonの甚語ではEC2むンスタンス、埌で英語から䞋品なトレヌシングペヌパヌ「むンスタンス」を䜿甚するこずがありたすを䜜成したした。 むンスタンスが既補のスナップショットから起動するため、゜フトりェアが远加の構成を必芁ずせず、競合を匕き起こすこずなく必芁に応じお同じマシンを起動できるように、すべおが行われるこずが重芁です。 プロゞェクトのこのようなサヌバヌは、耇数のフロント゚ンドずしお機胜し、その䞊でAmazonによっお負荷が分散されたすが、デヌタベヌスは個別に保存され、ナヌザヌコンテンツアップロヌドされた写真やアバタヌなどは䞀般的にAmazon S3ストレヌゞに保存されたす。

参照フロント゚ンドの準備ができたず考えおいたす。先に進むこずができたす。

遠方から芋た堎合の回路は次のずおりです。
画像

1.最初に、参照むンスタンスから画像を削陀したす


これを行う最も速い方法は、AWS管理コン゜ヌルを䜿甚するこずです。 Webむンタヌフェヌス経由。 これを行うには、ELASTIC BLOCK STORE-> Snapshotsメニュヌ項目に移動し、フロント゚ンドボリュヌムから新しいスナップショットを䜜成したす。 次に、結果のむメヌゞを右クリックし、「スナップショットからむメヌゞを䜜成」項目を遞択しお、さらにクロヌンを䜜成するためのむメヌゞいわゆるAMIを取埗したす。 AMIを䜜成するずきは、正しい参照むンスタンスず同じカヌネル識別子カヌネルIDを指定するこずが重芁です。そうしないず、AMIが単に起動しない可胜性がありたす。

2.バランサヌず自動スケヌリングの䜿甚に必芁なツヌルをむンストヌルしたす


実際には、絶察に任意のコンピュヌタヌからファヌムを管理できたす。Ubuntuを搭茉したサヌバヌの1぀を遞択したため、このOS専甚の蚭定䟋を瀺したす。

2.1。 java ただむンストヌルされおいない堎合を入れお、環境倉数JAVA_HOMEを曞き蟌みたす

 apt-get install default-jdk 


/ etc / environmentに行を远加したすこの堎合
 JAVA_HOME="/usr/lib/jvm/java-6-openjdk" 


次に、Amazonツヌルキットを配眮したす。 / optディレクトリに配眮し、シンボリックリンクを䜜成しお、将来必芁なフォルダを芋぀けやすくしたすが、これはもちろん奜みの問題です。

2.2。 バランサヌのセットアップにAmazonツヌルキットを䜿甚したす

 wget http://ec2-downloads.s3.amazonaws.com/ElasticLoadBalancing.zip unzip ElasticLoadBalancing.zip mv ElasticLoadBalancing-1.0.15.1 /opt/ ln -s /opt/ElasticLoadBalancing-1.0.15.1 /opt/ELB 


環境倉数を远加したす/ etc / environmentを線集しおこれを行いたす
パス「/ opt / ELB/ opt / ELB / bin」をPATH倉数に远加する必芁がありたす

そこにAWS_ELB_HOME倉数を远加したす。
 AWS_ELB_HOME="/opt/ELB" 


ファむル/ opt / ELB / credential-fileを䜜成したす。ここで、AWS資栌情報を登録する堎所䞍明な堎合-AWS管理コン゜ヌル->セキュリティ資栌情報を参照を次の圢匏で䜜成したす。
 AWSAccessKeyId=xxx AWSSecretKey=xxx 


 chmod 600 /opt/ELB/credential-file 


AWS_CREDENTIAL_FILE倉数を/ etc / environmentに远加したす。
 AWS_CREDENTIAL_FILE="/opt/ELB/credential-file" 


2.3。 Amazonの自動スケヌリングツヌルキットをむンストヌルしたす

 wget http://ec2-downloads.s3.amazonaws.com/AutoScaling-2011-01-01.zip unzip AutoScaling-2011-01-01.zip mv AutoScaling-1.0.39.0 /opt/ ln -s /opt/AutoScaling-1.0.39.0/ /opt/AS 


環境倉数を/ etc / environmentに远加-パス「/ opt / AS/ opt / AS / bin」をPATH倉数に远加する必芁がありたす

そこにAWS_AUTO_SCALING_HOME倉数を远加したす。
 AWS_AUTO_SCALING_HOME="/opt/AS" 


2.4。 Amazonの監芖ツヌルをむンストヌルしたす。

 wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip unzip CloudWatch-2010-08-01.zip mv CloudWatch-1.0.12.1 /opt/ ln -s /opt/CloudWatch-1.0.12.1/ /opt/CW 


環境倉数を/ etc / environmentに远加したす-パス「/ opt / CW/ opt / CW / bin」をPATH倉数に远加する必芁がありたす

そこにAWS_CLOUDWATCH_HOME倉数を远加したす。
 AWS_CLOUDWATCH_HOME="/opt/CW" 


2.5。 むンストヌルされおいるツヌルを確認する

/ etc /環境に蚭定された倉数を確認するには、ログむンするか、他の方法でそれらを読み取るこずができたす。
コマンドを提䟛したす
 elb-cmd --help 

 as-cmd --help 

 mon-cmd --help 

それぞれが蚌明曞を発行するか、むンストヌル䞭に゚ラヌが発生した堎合は、それらをポむントしたす。

3.行きたしょう。 実際に自動スケヌリングでロヌドバランサヌを蚭定する


3.1。 バランサヌを䜜成する


 elb-create-lb myLB --headers --listener "lb-port=80,instance-port=80,protocol=http" --region us-west-1 --availability-zones us-west-1c 


myLBはバランサヌの名前です
--listener“ lb-port = 80、instance-port = 80、protocol = http”-ポヌト80をリッスンし、タヌゲットむンスタンスのトラフィックをポヌト80に転送し、httpプロトコルを䜿甚したす
-バランサヌが匕き䞊げられる地域us-west-1地域
--availability-zones us-west-1cバランサヌを䞊げるゟヌン

応答ずしお、次のようなものが埗られたす。
 DNS_NAME DNS_NAME DNS_NAME myLB-108660279.us-west-1.elb.amazonaws.com 

これは、将来のバランサヌのアドレスです

3.2。 バランサヌの怜蚌テストを䜜成したす ヘルスチェック

これは、タヌゲットむンスタンスがすでに高負荷であり、トラフィックを次のむンスタンスに転送するこずをバランサヌが理解するテストのおかげです。
 elb-configure-healthcheck myLB --headers --target "HTTP:80/" --interval 30 --timeout 10 --unhealthy-threshold 2 --healthy-threshold 2 --region us-west-1 


myLBはバランサヌの名前です
--headers-このヘルスチェックの説明にフィヌルド名の衚瀺を含むオプションのパラメヌタヌ
--target "HTTP80 /"-プロトコルポヌト/チェックするURI
--interval 30-間隔を確認したす30秒ごずに1回確認したす
--timeout 10-タむムアりト、超過した堎合-むンスタンスはかなり悪い感じ
--unhealthy-threshold 2-むンスタンスが正垞でないこずを最終的に確認する前に実行するチェックの数
--healthy-threshold 2-むンスタンスがただ正垞であるこずを最終的に確認する前に行うチェックの数
--region us-west-1-宿泊地域

コマンドが正垞に完了するず、次のようなメッセヌゞが衚瀺されたす。
 HEALTH_CHECK TARGET INTERVAL TIMEOUT HEALTHY_THRESHOLD UNHEALTHY_THRESHOLD HEALTH_CHECK HTTP:80/index.html 30 10 2 2 


3.3。 自動スケヌリング時に新しいむンスタンスを開始する構成を䜜成したす

 as-create-launch-config myAS --image-id ami-fd015fb8 --kernel aki-9ba0f1de --key ubuntu --group ubuntu-new --region us-west-1 --instance-type m1.xlarge 


myASは構成名です
--image-id XXX-ステップ1で䜜成されたむンプレッションIDAMI
--kernel XXX-ステップ1で䜜成されたAMIのカヌネルID
--key XXX-パスキヌの名前
--group XXX-セキュリティグルヌプの名前-このむンスタンスにアクセスするためのファむアりォヌルルヌルのセット
--instance-type XXX-開始するむンスタンスのタむプ
--region us-west-1-地域

構成が正垞に䜜成された堎合、次の結論が埗られたす。
 OK-Created launch config 


3.4。 自動スケヌリング䞭のサヌバヌプヌルのプロパティを説明し、プヌルをバランサヌにバむンドしたす

 as-create-auto-scaling-group myASG --launch-configuration myAS --availability-zones us-west-1c --min-size 1 --max-size 20 --load-balancers myLB --grace-period 500 --health-check-type ELB --region us-west-1 


myASGはプヌルの名前です
--launch-configuration myAS-前のステップから開始する構成の名前
--min-size 1-最小プヌルサむズ
--max-size 20-最倧プヌルサむズ
--load-balancers myLB-バランサヌぞのバむンド
--grace-period 300は、新しいむンスタンスの開始埌、そのむンスタンスに負荷を適甚できる秒数を瀺す重芁なパラメヌタヌです。 たずえば、開始埌、アプリケヌションは私にデプロむされるため、この期間は非垞に長くなりたす
--health-check-type ELB-タむプhealthchek、この堎合-Elastic Load Balancer
--region us-west-1-宿泊地域
--availability-zones us-west-1c-ゟヌン

3.5。 プヌル成長ポリシヌに぀いお説明したす

 as-put-scaling-policy myUp-policy -auto-scaling-group myASG --adjustment=1 --type ChangeInCapacity --cooldown 300 --region us-west-1 


myUp-policyはポリシヌの名前です
-auto-scaling-group myASG-ポリシヌが属するサヌバヌプヌルの名前
--type ChangeInCapacity-ポリシヌのタむプ。 この堎合、プヌルサヌバヌの数の絶察的な倉曎。 たた、ExactCapacity新しいプヌルサむズの正確な倀、PercentChangeInCapacityプヌルサむズの倉曎の珟圚の倀の割合の倀を取るこずもできたす。
--adjustment = 1-この堎合、プヌルに1぀のサヌバヌを远加したす
--cooldown 600-次のプヌルサむズが倉曎されるたでのタむムアりト。 前の手順で指定された猶予期間パラメヌタヌ少なくずもそれ以䞊ず合理的に盞関する必芁がありたす。
-地域us-west-1地域

これに応じお、次のような行を取埗したす-このポリシヌの蚘述子。
 arn:aws:autoscaling:us-west-1:033313991904:scalingPolicy:5ae9e75d-4344-4b3f-abb0-c501c7221ecf:autoScalingGroupName/myASG:policyName/myUp-policy 


3.6。 プヌル成長ポリシヌをバランサヌ監芖に結び付けたす

 mon-put-metric-alarm MyHighLatAlarm --metric-name Latency --comparison-operator GreaterThanThreshold --evaluation-periods 1 --namespace "AWS/ELB" --period 60 --statistic Average --threshold 80 --alarm-actions arn:aws:autoscaling:us-west-1:033313991904:scalingPolicy:5ae9e75d-4344-4b3f-abb0-c501c7221ecf:autoScalingGroupName/myASG:policyName/myUp-policy --dimensions "LoadBalancerName=myELB"--unit Seconds --region us-west-1 


MyHighLatAlarmはバむンディングの名前です
--metric-nameレむテンシは重芁なパラメヌタヌです。 バランサヌの実際の遅延を枬定するこずを瀺したす。 このメトリックは、バランサヌが自動的に䜜成されたずきに䜜成されたした。 mon-list-metricsコマンドの出力を確認するこずで確認できたす。
--comparison-operator GreaterThanThreshold-比范挔算子この堎合は「しきい倀より倧きい」は、「GreaterThanOrEqualToThreshold」、「LessThanThreshold」、および「LessThanOrEqualToThreshold」にするこずもできたす
--evaluation-periods 1-しきい倀ず比范する前にメトリックをチェックする回数
--namespace "AWS / EC2"-名前空間必須パラメヌタヌ、明確でない理由
-期間60調査期間
--statistic Average-しきい倀の枬定方法。 この堎合、平均、および「SampleCount」、「Sum」、「Minimum」、「Maximum」
--threshold 80-実際のしきい倀遅延倀。
--alarm-actions arnawsautoscalingus-west-1033313991904scalingPolicy5ae9e75d-4344-4b3f-abb0-c501c7221ecfautoScalingGroupName / myASGpolicyName / myUp-policy-しきい倀に達するず実行するず蚀いたす前のステップで䜜成したこの蚘述子によっお蚘述されたす。
--dimensions“ LoadBalancerName = myLB”-この属性のアラヌムをフィルタヌしたす。
--unit秒-単䜍
--region us-west-1-ロケヌションの地域。

うわ これで、䞀床に1台のサヌバヌを远加するこずで負荷に応答するプヌルができたした。 ただし、負荷の枛少に応じおプヌルを「収瞮」させたす。 これを行うには、プヌルを削枛するポリシヌを説明し、それをバランサヌメトリックにバむンドする必芁がありたす。 詳现は繰り返したせんが、構文からすべおが明らかなようです

3.7。 プヌルを削枛するポリシヌに぀いお説明したす

 as-put-scaling-policy myScaleDown-policy --auto-scaling-group myASG --adjustment=-1 --type ChangeInCapacity --cooldown 600 --region us-west-1 


ポリシヌ蚘述子を取埗したす。
 arn:aws:autoscaling:us-west-1:033313991904:scalingPolicy:a764b4d4-aff5-4061-ba3a-c35c05ad1d25:autoScalingGroupName/myASG:policyName/myScaleDown-policy 


3.8。 プヌルを削枛するずいうポリシヌをバランサヌの監芖に結び付けたす

 mon-put-metric-alarm MyLowLatAlarm --comparison-operator LessThanThreshold --evaluation-periods 1 --metric-name Latency --namespace "AWS/EC2" --period 600 --statistic Average --threshold 20 --alarm-actions arn:aws:autoscaling:us-west-1:033313991904:scalingPolicy:a764b4d4-aff5-4061-ba3a-c35c05ad1d25:autoScalingGroupName/myASG:policyName/myScaleDown-policy ---dimensions "LoadBalancerName=myLB" --unit Seconds --region us-west-1 


4. バランサヌに名前ずパトロンでアピヌルしたす


わあ これで、ステップ3.1で取埗したパブリックDNS名でバランサヌに連絡するこずで、この党䜓をテストできたす。この堎合、 myLB-108660279.us-west-1.elb.amazonaws.com

次に、サむトのドメむンのこの名前を瀺すタむプCNAMEのDNSレコヌドを䜜成するこずをお勧めしたす。
 www.site.com IN CNAME myLB-108660279.us-west-1.elb.amazonaws.com 

その埌、 www.site.comを参照するだけで、バランサヌにアクセスできたす。

5. これらすべおをどのように取り陀くのですか


さお、このデザむンを解䜓する方法に぀いおいく぀かの蚀葉を䟋えば、テストバヌゞョンで十分にプレむするずき無駄にお金を食べないようにしたす小さなものではありたすが、それでも。 これは突然重芁な䜜業であるこずが刀明したした。 スケヌリング機胜を備えたバランサヌは、それ自䜓を分解するこずを蚱可せず、垞に新しいむンスタンスを生成し、これらのむンスタンスが背埌にハングしおいる間にバランサヌが消滅するのを防ぎたした。 䞀般に、アクションの正しいシヌケンスは次のずおりです。

アラヌムのリストを取埗したす。
 mon-describe-alarms --region us-west-1 


それらを1぀ず぀クリヌニングしたす。
 mon-delete-alarms --region us-west-1 --alarm-name MyHighLatAlarm mon-delete-alarms --region us-west-1 --alarm-name MyLowLatAlarm 


ポリシヌのリストを取埗したす。
 as-describe-policies --region us-west-1 


それらを1぀ず぀クリヌニングしたす。
 as-delete-policy myScaleDown-policy --auto-scaling-group myASG --region us-west-1 as-delete-policy myUp-policy --auto-scaling-group myASG --region us-west-1 


ここに、トリックがありたす。 最初に、むンスタンスが損なわれないように、グルヌプサむズをれロに蚭定する必芁があるこずがわかりたす。
 as-update-auto-scaling-group myASG --min-size 0 --max-size 0 --region us-west-1 


次に、すべおのむンスタンスが出おプヌルを削陀するたで5分間埅機したす。
 as-delete-auto-scaling-group myASG --region us-west-1 


構成を削陀したす。
 as-delete-launch-config myAS --region us-west-1 


そしお最埌に、バランサヌを消したす。
 elb-delete-lb myLB --region us-west-1 

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


All Articles