うさがにっき

読書感想文とプログラムのこと書いてきます

ELB, RDSを使ったMulti-AZ環境の構築

概要

以前にAWSを使ってwordpress環境を構築した
webサーバ上にwordpressを設置 - うさがにっき

今回はこれを発展させて、DBにはRDS, 更にELB, Multi-AZ環境を作ってwordpress環境を構築してみる

詳細

RDB(Amazon Relation Database Service)

フルマネージドのRDB
構築が既にされており、パッチ適用やバックアップが自動的に行われるため、構築、運用のコストを削減できる
しかし、RDSインスタンスのOSにはログインできなかったりもする
使えるDBは以下

従量課金制を用いている
EC2インスタンスのように利用する時だけ起動するという運用ができず、一度起動したらずっと起動することになる
課金されないようにするにはインスタンスを削除するしかない
しばらく使用しないインスタンスはバックアップを作成し、削除するのが得策

ELB(Elastic Load Balancing)

インスタンス冗長化構成するための仕組み
インスタンスに対するアクセス分散をすることにより、負荷分散や可用性の確保を得る
ELBは常にリクエスト処理能力を監視しており、自動的にリソースの拡張、縮小をしており、ELBがボトルネックとなることは殆どない

ELBは登録されているインスタンスの状態を監視することができる、監視状態が異常となったインスタンスはELBから切り離されるためリクエストの割り当てが行われなくなる
チェックの手法としては対象のポートがListen状態になっているか監視するポート監視と、HTTP, HTTPSの場合に実際のhtmlにアクセス可能かを監視するサービス監視がある

また同じユーザからリクエストを同じインスタンスで処理させるようにする、スティッキーセッションという仕組みもある
だがこれは、途中でインスタンスがダウンした時に逆に邪魔になることもある
そのため最近ではELB配下の各インスタンス間でセッション情報を共有する仕組み(ElastiCache)などを使うことが多い

Multi-AZ

Multi-AZとは、ELBを使いAvailavirity zoneの違う複数の場所にインスタンス,DBを配置することにより可用性を高めるという手法
今回はap-northeast-1cとap-northeast-1aの二つにEC2インスタンスとDBを配置した

Multi-AZ 配置 - Amazon RDS(リレーショナルデータベースサービス Amazon Relational Database Service) | アマゾン ウェブ サービス(AWS 日本語)

Multi-AZを使ったwordpressサイトの構築

VPCを作成し、必要なsubnet, インターネットgatewayを作成する

必要になるsubnetは以下の4つ

EC2インスタンスを置くためのパブリックなサブネット

  • WP-PublicSubnet-A
  • WP-PublicSubnet-C

RDBを置くためのプライベートなサブネット

  • WP-PrivateSubnet-A
  • WP-PrivateSubnet-C

詳しいやり方は以下を参照
awsを使って仮想VPC環境を作ってみる - うさがにっき

f:id:tiro105:20150604180504p:plain
f:id:tiro105:20150604180540p:plain

publicなsubnetにはパブリックIPを割り当てる
f:id:tiro105:20150604180633p:plain
f:id:tiro105:20150604180953p:plain

ルートテーブルを作成し、インターネットgatewayに紐付ける
f:id:tiro105:20150604181045p:plain

パブリックサブネットに作成したルートテーブルを割り当てる
プライベートなものはデフォルトのまま
f:id:tiro105:20150604181229p:plain

セキュリティグループを作成

詳しいやり方はこちら
aws上に仮想サーバを立ててみる - うさがにっき
パブリック用とプライベート用のセキュリティグループを作る
f:id:tiro105:20150604181539p:plain
f:id:tiro105:20150604181645p:plain

RDBの作成

グローバルメニューからRDB選択
f:id:tiro105:20150604181819p:plain

サブネットグループがないとRDBインスタンスが作れないのでまずサブネットグループを作る
f:id:tiro105:20150604181904p:plain

名前、説明、VPCを選び、二つ以上のアベイラビリティゾーンとサブネットIDを追加する
f:id:tiro105:20150604182020p:plain

次にRDBインスタンスを作成する
f:id:tiro105:20150604182058p:plain

DBの選択
f:id:tiro105:20150604182123p:plain

本番稼動用か聞かれるので、気にせず本番ですと答える
f:id:tiro105:20150604182205p:plain

作成するDBの情報を入力する
今回は一番小さいサイズで作り、マルチAZ構成とする
あとはDBインスタンスの識別子、マスタユーザの名前、パスワードを入れる
これを覚えておかないとRDBインスタンスにはmysql(DB)でしか入れないので痛い目をみるので注意
f:id:tiro105:20150604182359p:plain

VPC、サブネット、セキュリティグループを設定
f:id:tiro105:20150604182518p:plain
バックアップ、メンテナンスの設定
f:id:tiro105:20150604182549p:plain

これでRDBインスタンスが立ち上がる
f:id:tiro105:20150604182624p:plain

EC2インスタンスの作成、設定、複製

EC2インスタンスの作成についてはこちらを参照
aws上に仮想サーバを立ててみる - うさがにっき

f:id:tiro105:20150604182908p:plain
f:id:tiro105:20150604183026p:plain
作成したセキュリティグループを割り当てる

作成したEC2へwordpressの設定をする
EC2インスタンスへログインし、以下を実行

$ sudo yum install php php-mysql php-gd php-mbstring -y
$ sudo yum install mysql -y
$ wget -O /tmp/wordpress-4.1-ja.tar.gz https://ja.wordpress.org/wordpress-4.1-ja.tar.gz
$ sudo tar zxf /tmp/wordpress-4.1-ja.tar.gz -C /opt
$ sudo ln -s /opt/wordpress /var/www/html/
$ sudo chown -R apache:apache /opt/wordpress
$ sudo chkconfig httpd on
$ sudo service httpd start

テーブル作成とかはこちら
webサーバ上にwordpressを設置 - うさがにっき

RDB設定時に設定したユーザとパスワードを使いRDBに接続し、「WordPress用データベース作成」の項目をやる

mysql -u root -p -h wp-mysql.**************************************.com

接続先はRDBインスタンスを選びエンドポイントを確認してそれを入れる
f:id:tiro105:20150604183600p:plain

wordpressの起動が確認したら別アベイラビリティゾーンに複製する
f:id:tiro105:20150604184312p:plain
f:id:tiro105:20150604184434p:plain

アベイラビリティゾーンを設定し起動
f:id:tiro105:20150604184450p:plain

ELBの作成

EC2の中にあるロードバランサを選択
f:id:tiro105:20150604184556p:plain

作成を選択、名前、vpcの設定
f:id:tiro105:20150604184620p:plain
処理を割り振るサブネットの選択
f:id:tiro105:20150604184720p:plain

セキュリティグループの割り当て
今回はここで新規作成した
f:id:tiro105:20150604184752p:plain

セキュアリスナーの設定
HTTPSの設定とかできる
今回はスルー
f:id:tiro105:20150604184826p:plain

ヘルスチェックの設定
インスタンスが正常に動いているか確認する処理の設定ができる
f:id:tiro105:20150604184922p:plain

あとは管理するEC2インスタンスの追加をして名前を設定して、確認画面へ
f:id:tiro105:20150604185015p:plain
f:id:tiro105:20150604185036p:plain

wordpress側で自分のURLを覚えていて、このままでは直接EC2にアクセスしてくるのでURLをEC2のものからELBのURLに書き換えておく
f:id:tiro105:20150604185645p:plain

スティッキーセッション

スティッキーセッションはロードバランサのインスタンスから設定できる
ポート構成の維持設定から設定できる
f:id:tiro105:20150604185308p:plain

ELBからEC2へのアクセス

ELBからだけEC2へアクセスするようになったのでEC2のセキュリティグループのHTTPをすべてから受け入れる必要がなくなり、ELBからだけ受け入れるようにするとさらに安全になる
f:id:tiro105:20150604185413p:plain

参考

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく

Amazon Web Services パターン別構築・運用ガイド  一番大切な知識と技術が身につく