2.2.3 スケールイン開始前にスナップショットログ出力処理時間分の猶予を設ける
Tomcatをオートスケーリング構成のマシン上で使用している場合,本製品がスナップショットログの収集処理をしている間は,できる限りマシンがスケールインされないようにする必要があります。
- ユーザスクリプトによる閉塞をすることで自動的にスケールインされないように構築している場合
-
このケースに該当する場合は,Tomcatの停止後にスケールインを実行するスクリプトが実行されるように設定してください。これによって,スナップショットログ出力処理が終わるまでスケールインされないようにできます。
systemdを用いてOS起動と同時にTomcatをサービス起動させ,Tomcatの停止後にスケールインを実行する場合のユニットファイル定義例を次に示します。
[Unit] Description=Apache Tomcat After=network.target [Service] Type=forking ExecStart=<Tomcatインストール先>/bin/startup.sh ExecStop=<Tomcatインストール先>/bin/shutdown.sh ExecStopPost=<スケールインを実行するスクリプトのパス> TimeoutStopSec=700 SuccessExitStatus=143 User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
AWSでAmazon EC2 Auto Scalingを使用している場合のスケールインを実行するスクリプトの実装例を次に示します。
#!/bin/bash # Get InstanceID TOKEN=$(curl -X PUT http://169.254.169.254/latest/api/token \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") INSTANCEID=$(curl http://169.254.169.254/latest/meta-data/instance-id/)\ -H "X-aws-ec2-metadata-token: ${TOKEN}") echo InstanceID=${INSTANCEID} # Polling Instance status MAX_POLLING_COUNT=10 RETRY_INTERVAL=60 for ((i=1;i<=${MAX_POLLING_COUNT};i++)); do INSTSTATUS=$(aws autoscaling describe-auto-scaling-instances --instance-ids ${INSTANCEID} \ | jq -r '.AutoScalingInstances[].LifecycleState') echo InstanceStatus=${INSTSTATUS} if [ "${INSTSTATUS}" == "Standby" ]; then # Terminate instance aws autoscaling terminate-instance-in-auto-scaling-group --instance-id ${INSTANCEID} \ --no-should-decrement-desired-capacity echo "Instance will be terminated." exit 0 fi if [ ${i} -eq ${MAX_POLLING_COUNT} ]; then echo "Max polling count reached (count = ${i})." exit 1 fi echo "InstanceStatus is not STANDBY. Retry after ${RETRY_INTERVAL} seconds (count = ${i})." sleep ${RETRY_INTERVAL}s done
注
このスクリプトは実装例であり,これをそのまま使用した場合の動作は保証しません。必ずクラウドベンダが提供する最新のドキュメントを参照してユーザ側で適切なスクリプトを記述してください。また,次の点にも注意してください。
-
実行するコマンドがインストール済みか
-
コマンドの実行に必要な権限があるか
-
- オートスケーリンググループからの切り離しと同時にスケールインに遷移するように設定している場合(マネージドサービス側で管理)
-
スナップショットログの出力に掛かる時間を確保できる,十分な猶予時間を設定してください。猶予時間とは,障害を検知されたマシンがオートスケーリンググループから切り離されてから,OSのシャットダウンが開始されるまでの時間を指します。