LoginSignup
1
0

More than 3 years have passed since last update.

冗長性のあるブログサービス(冗長構成)を構築してみる

Last updated at Posted at 2021-04-13

実装デモ

障害を想定した試験として
 ①メインのEC2を手動で停止してブログが見れるか確認
 ②メインのRDSを停止してもブログが見れるか確認

注意
RDSのDBインスタンスを削除しないと
実装デモ終了時は9~10円/時間かかります。
RDS<アクション<削除でOK
最終スナップショットを作成すると、いつでも復旧可能になる

準備

・同じリージョンの別AZにメインとサブそれぞれにEC2とRDSを作成。
・ELBを配置して2台のEC2にhttp通信が振り分けられる様に設定しておく。
・どちらのEC2が起動しているか見分けがつきやすいように、htmlファイルに見分けがつきやすい様に変化をつけておく

ロードバランサー作成

EC2のダッシュボードページ<ロードバランシング<ロードバランサーを選択

ロードバランサーの作成をクリック<ALB作成をクリック

1,
ロードバランサーの設定
名前(任意),スキームはインターネット向け,IPアドレスタイプはipv4,リスナーはHTTPの80番ポートのまま,AZはVPCとAZを選択、パブリックサブネットを選択

2,セキュリティ設定の追加を選択

(※注意※)HTTPSプロトコルを使用する様警告がでますが、デモだとHTTP接続で進める

3,新しいセキュリティグループを作成するを選択、セキュリティグループ名(任意)を入力

4,ルーティングの設定<ターゲットグループ
名前(任意),ターゲットの種類をインスタンス,プロトコルをHTTPの80番ポート,プロトコルバージョンはHTTP1を選択

ヘルスチェック
HTTPの/でも良いが/readme.htmlを指定
詳細設定でEC2インスタンスのヘルスチェック間隔を設定できる
正常のしきい値を2、間隔を10秒に変更(10秒毎にヘルスチェック通信を飛ばして2回OKならそのインスタンスは正常とみなす設定になる)

5,ターゲットの登録
どのインスタンスをターゲットグループに追加するか選択できる
準備した2つのインスタンスを選択、登録済みに追加をクリック
これで2つのインスタンスに通信が振り分けられる設定になる

確認、作成をクリックし完了

↑の確認でEC2のダッシュボードページ<ロードバランシング<ターゲットグループを選択
今回作成したロードバランサーを選択、targetsを選択すると、どのWebサーバーに対してヘルスチェックの状態を確認できます。

RDSの中に設定されているサイトアドレスをロードバランサーのDNS名に書き換える

どちらかのウェブサーバーにログインして下のコマンドでRDSに接続します

mysql -h database-1.xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u wordpress -p

解説
mysql -h RDSのエンドポイント) -u wordpress -p
-uでwordpressインストール時に設定したユーザー名に-pオプションをつける

実行してパスワードを入力

(※)wordpressのテーブルを使用する宣言)
USE wordpress

(※)↓テーブルの名前やオプションを表示
SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');

(※)option_value欄がサーバーのパブリックIPアドレスと同じという点を確認しておく

UPDATE wp_options SET option_value = 'ロードバランサーのDNS名' WHERE option_name IN ('siteurl', 'home');

(※)上のSELECT文を実行後、書き変わっているか確認

<確認>
・このDNS名をブラウザに打ち込んで正常にブログが開くか
・更新を何度か繰り返してみて、区別できるように準備編でhtmlファイルの違いがみられるか

セキュリティグループの設定変更

今の状態だと全て接続元からの80番ポートからの通信が許可されている
→ ロードバランサーからのセキュリティグループからのアクセスのみに許可するよう設定を変更する


EC2<セキュリティグループ<適切なセキュリティグループを選択<インバウンドルール<インバウンドルールを編集

80番ポートの0.0.0.0/0を削除

同じく80番ポートにロードバランサーで作成したセキュリティグループを選択<ルールを保存

表示に問題ないか確認

障害テスト(EC2)

障害を想定したテストを実施するため、EC2インスタンス片方だけシャットダウンする

EC2のページ<インスタンスの状態<インスタンスを停止

<確認>
振り分けが行われず、更新しても停止していないサイトのみが表示し続けられる

RDSも冗長化構成

Amazon RDS<データベースを選択<該当するDBを選択して変更をクリック

DBインスタンスの設定<可用性と耐久性<マルチAZ配置<スタンバイインスタンスを作成するにチェックをつける
続行→ 変更スケジューリング(デモなので今すぐ変更を選択)

障害テスト(RDS)

先程冗長構成を選択肢たDBを選択<アクション<再起動
DBインスタンスをフェイルオーバーで再起動

<確認>
・Webサイトが正常に動作するか
・DB<ログとイベントの最近のイベントに〇〇 instance failover startedや
〇〇 instance failover completedログが残っているか

参考

この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました
https://aws-cloud-tech.com

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0