(Google+)130130件のシェア(ちょっぴり話題の記事)この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。AWSにおいて、ELBによるSorryサーバへのフェイルオーバーは、長らく待ち望まれている機能です。先日、Route53にDNSレベルでのフェイルオーバー機能が実装(下記)されました。EC2編)ただ、Route53を利用していない場合は、未だにヘルスチェック及びフェイルオーバーの機能は手組みする必要があります。無いなら作るしかないのです。わかりました、作りますよ。前提まず確認しておきたいのは、今回ご紹介するテクニックは、前述のRoute53によるフェイルオーバーと比べると、オモチャみたいなもんです。何と、Route53のSLAは100%です。フェイルオーバー先をS3にした場合、そのSLAは99.9%です。それに対し、今回ご紹介するテクニックは、フェイルオーバー先はEC2限定です。S3は選択できません。ヘルスチェック機能も、同じEC2上に構築します。Sorryサーバや、フェイルオーバー機能の可用性をどの程度確保するかによって、これらの機能の冗長化構成も検討する必要があるでしょう。仮に、Route53によるDNSフェイルオーバー機能を使える環境であるならば、迷わずそちらを使ってください。お兄さんとのお約束です。アーキテクチャ図をご覧下さい。serversが本来の機能を提供するサーバ(群)です。ELB)を受けています。serversは正常に稼働しているため、これらはELBに対して異常なしの応答をしています。serverは、障害発生時のSorryページをホストしています。script)し続けるスクリプトが動いています。*1(図中の緑色のフラグ)によって、正常運用を確認しています。次に、障害発生時について。serversは、ELBによるヘルスチェックに対し、エラー応答を返します。serversがあった場合、1つでも正常に稼働しているインスタンスがあれば、最低限サービスは稼働できます。全てがエラー応答をした場合を考えます。serverが「OutOfService」となったこと(図中の赤色のフラグ)を検知します。*2をELBに対して登録します。これにより、自分自身がELB配下で唯一healthyなインスタンスとなり、アクセストラフィックが全て自分に向くようになります。これにより、フェイルオーバーが実現します。serverが復活したら、自分自身のインスタンスをELBから外す処理を行います。この処理が行われると、障害からの復旧となります。チュートリアルでは上記の構成を試してみましょう。Linux最新版、t1.micro)を2台立ち上げてください。片方をelbfailover-prod、もう片方をelbfailover-sorryと呼ぶことにします。elbfailover-prodのセットアップApacheインストールして、サービスをシミュレートするHTMLを置き、起動するだけです。ヘルスチェックの間隔は、検証のため、一番短くしておきます。ELBの配下に、elbfailover-prodを追加します。(一番上に見えているインスタンスは今回の件とは無関係です)ELBの起動はしばらく時間が掛かるため、下記に進んでしまいましょう。なっていることを確認しましょう。elbfailover-sorryのセットアップ同様にApacheをインストールし、Sorry画面をシミュレートするHTMLを置き、起動しています。startawscliを利用するので、インストールします。~/.bash_profilejqも必須ですので、インストール。install以下を~/elbfailover.shとして作成します。$SLEEPTIMEdonechmodで実行権限を与えて実行すると、約2秒に一度のヘルスチェックが始まります。頻度はスクリプトのSLEEPTIME変数で調整できます。elbfailover...動作確認まず、ブラウザでELBにアクセスすると、helloが帰ってくることを確認します。次に、模擬障害として、elbfailover-prodにおいてhttpdをstopしてみます。すると、しばらくの間、ELBに対するアクセスは503を返すまたはタイムアウトするようになります。ELBによるヘルスチェックの周期及び障害判定閾値は最低(周期は0.1分=6秒、閾値は2)に指定してありますので、ELBが障害を認識するまでには少なくとも12秒掛かります。ELBが障害を認識すると、API経由でスクリプトにも障害の情報が伝わります。スクリプトは2秒おきにステータスをチェックしているため、ここでも最大2秒の遅れが発生するはずです。スクリプトは下記のログを出力し、自分自身をELBに登録します。elbfailover...これにより、ELBのレスポンスがsorryを返し始めます。実測の結果、模擬障害の発生からsorryを返し始めるまで、30秒弱掛かりました。続いて、模擬障害から復旧させてみます。elbfailover-prodにおいてhttpdをstartします。この場合も約12秒後にELBが復旧を認識し、スクリプトに情報が伝わります。スクリプトは下記のログを出力し、自分自身をELBから外します。elbfailover...ELBのレスポンスは、最初はsorryとhelloを等確率で返すようになりますが、間もなくsorryを返さなくなります。実測の結果、模擬障害から復旧後約20秒でhelloのみを返すようになりました。まとめ実際に運用する場合は、ELBのチェック間隔や、スクリプトの周期など、様々な検討が必要かと思います。今回紹介したスクリプトは無限ループを用いてポーリングを実現しましたが、cron等に書き直す必要はありそうです。Sorryサーバについては、あらゆるページに対するアクセスに対してsorryを返すように設定しなければなりませんし、その際のHTTPレスポンスのステータスは、200や404ではなく、503を返すように実装すべきでしょう。いうわけで、今回はELBにおけるSorryサーバへのフェイルオーバーを手組みで実装してみました。Balancingにフェイルオーバー機能を追加。」を出してくれてもよくってよ。場合によっては、この条件を変更してもいいでしょう。設定により調整しても良いでしょう。↩ELBの名前は、スクリプト内で参照しますので、異なった名前を付けた場合はスクリプトも修正してください。Roleを使えばもっと楽にできますね。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。濱田孝治391re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。泰雨73皆さん、こんにちは。コンサル部のテウです。2020年もあっという間に2ヶ月が経ちました。今年こそ機械学習に入門しようぜ!!って決心された方もいらっしゃると思います。入門できる方法をご紹介させて頂きたいと思います。本記事の手順通り、ランチタイム等の時間を活かして、手軽に入門してみてください。夏目祐樹410こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。濱田孝治391re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。臼田佳祐296ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介256SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。