プログラムの例外、インスタンスの再起動、または停電により、サービスまたはスクリプトの実行が停止する場合があります。 サービスまたはスクリプトができるだけ早い機会に再開できない場合、オンラインビジネスは損失を被る可能性があります。 Cloud Assistantプラグインecs-tool-servicekeepalive
を使用して、中断されたサービスまたはスクリプトをすばやく再開できます。 これにより、サービスの信頼性と継続性が保証されます。
ソリューションの概要
このソリューションは、Linuxオペレーティングシステムが提供するsystemdサービスを使用して実装されます。 ecs-tool-servicekeepalive
プラグインを使用する場合は、サービスまたはプログラムを起動できるコマンドを入力するだけで済みます。 たとえば、python /home/root/main.py
コマンドを入力します。 systemdサービスが有効化されると、プラグインは、入力した起動コマンドに基づいてsystemdサービス構成を自動的に生成します。 これにより、systemdサービスを設定することなく、サービスまたはスクリプトを自動的に起動できます。
systemdサービスはLinuxコンポーネントであり、サービスを自動的に管理するために使用できます。 たとえば、systemdサービスは、インスタンスの起動時にサービスやスクリプトを開始したり、予期しない停止後にサービスを再起動したりできます。 詳細については、「systemdドキュメント」をご参照ください。
手順
サービスまたはプログラムがデプロイされたら、Cloud Assistantの
ecs-tool-servicekeepalive
プラグインをrootユーザーとして起動します。rootユーザーとしてサービスまたはスクリプトを実行する
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'cmd'"
cmd: パラメーターを、サービスまたはスクリプトを起動するコマンドに置き換えます。 たとえば、スクリプトの実行に使用する
/bin/bash /home/work/debug/debug.sh
コマンド、またはプログラムの実行に使用するpython /home/root/main.py
コマンドを入力できます。重要スクリプトまたはプログラムファイルのパスはルートパスである必要があります。
ユーザー名を指定してサービスまたはスクリプトを実行する
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,execstart='cmd',user=user_name,group=group_name"
cmd: パラメーターをサービス起動コマンドに置き換えます。 たとえば、
/bin/bash /home/work/debug/debug.sh
コマンドを使用してスクリプトを実行したり、python /home/root/main.py
コマンドを使用してプログラムを実行したりします。重要スクリプトまたはプログラムファイルのパスはルートパスである必要があります。
user_name: パラメーターを、サービスの実行に使用するユーザー名に置き換えます。 作成したユーザーを表示するには、
cut -d: -f1 /etc/passwd
コマンドを実行します。group_name: パラメーターを、サービスが実行されているユーザーグループの名前に置き換えます。 作成したユーザーグループを表示するには、
cut -d: -f1 /etc/group
コマンドを実行します。
次のコマンドを実行して、サービスの自動復元が有効になっているかどうかを確認します。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"
設定が成功すると、次の図に示すレスポンスが返されます。
(オプション) サービスまたはスクリプトの自動復元を無効にするには、次のコマンドを実行します。
sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop service_name"
service_name: パラメーターをサービスの名前に置き換えます。 手順2で出力されたコマンドのservice_name列に表示されているサービス名を取得できます。
例
環境を準備します。
/home/work/debug
フォルダーを作成し、そのフォルダーにdebug.sh
スクリプトを作成します。 スクリプトは、指定されたログファイルに1秒間に1行のログデータを出力します。sudo mkdir -p /home/work/debug && \ sudo tee /home/work/debug/debug.sh > /dev/null << 'EOF' #!/bin/bash while true do sudo echo "$(date '+%Y-%m-%d %H:%M:%S') progress is alive" >> $1 sleep 1 done EOF
ps aux | grep debug.sh
コマンドを実行します。 コマンド出力は、スクリプトが実行されていないことを示します。Cloud Assistantプラグインを起動します。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'/bin/bash /home/work/debug/debug.sh /home/work/debug/debug.log'"
ps aux | grep debug.sh
コマンドを実行します。 コマンド出力は、スクリプトが実行中であることを示します。 プロセス番号は2572です。スクリプトが自動的に再開できるかどうかを確認します。
ECSインスタンスを再起動し、スクリプトが期待どおりに再開されるかどうかを確認します
ECSコンソールでElastic Compute Service (ECS) インスタンスを再起動します。 ECSインスタンスが復元された後、インスタンスにログインし、次のコマンドを実行します。
ps aux |grep debug.sh
サービスの
debug.sh
プロセスが期待どおりに実行され、プロセス番号が764に更新されます。これは、スクリプトが再起動されたことを示します。プロセスを終了し、スクリプトが期待どおりに再開するかどうかを確認します
次のコマンドを実行して、
debug.sh
プロセスの番号を確認します。ps aux |grep debug.sh
次の出力が表示されます。
debug.sh
のプロセス番号が2572です。次のコマンドを実行して、
debug.sh
プロセスを終了します。sudo date && kill -9 <Process number>
次のコマンドを実行します。 コマンド出力は、
debug.sh
プロセスがまだ実行中であり、プロセス番号が4220に更新されていることを示しています。ps aux |grep debug.sh
参考資料
ビジネスが成長するにつれて、データ要求と同時実行ページビューの数は増加します。 複数のECSインスタンスをデプロイして、ゾーンレベルのディザスタリカバリを実装し、データの可用性と継続性を確保できます。 詳細については、「高可用性アーキテクチャのデプロイ」をご参照ください。