#概要
冗長性のあるブログサービスを今回は構築していきます。
今回は第二弾で前回の続きから行っていくものとします。
前回はこちら
https://qiita.com/kohei_abe/items/456cc6c0aa91b76d56ea
前回作成していった構成がこちらです!
こちらの問題点としてはEC2, RDSともにシングル構成のため単一障害点が生まれます。
もしAZが何かしらの障害があった場合サービスが停止してしまいます。
またEC2のCPUに負荷がかかり、サービスが落ちた場合これもサービスが停止してしまいます。
またデータベースも複製されていないためこれは極めて危険な状況です。
今回はこのような構成にしていきます。
まずはデータベースですがmasterとslave構成にしていきます。
こちらでデータを複製していきます。
これによりmasterがダウンしても自動的にslaveに切り替えることがAWSは簡単にできます!
またEC2も2台配置し、それをELBで分散させています。
ELBはDNS名のアクセスポイントが付与されるといった特徴があります。
つまりアクセスポイントを一つにし負荷分散をさせるということです。
このELBがないとwebサーバーのアクセスポイントが2つになってしまうため、どちらにアクセスして良いかわからなくなってしまいます。
また一つのサーバーがダウンするともう一つが動いていたとしてもダウンしているサーバーにいくと404ページが返ってくるようになります。
これでは意味がないですよね。
つまりELBにアクセスポイントを一つに集中させて、そこから2台のEC2に負荷分散させていくのです。
さらにELBにはヘルスチェック機能が備わっています。
ヘルスチェック...以上なインスタンスを認識し通信をストップする
つまりwebサーバーに異常を感じたらそちらの通信はストップしアクセスできないようにします。
これで一つのサーバーがダウンした際にも負荷分散ができるわけです。
さらにELBに証明書を付与することでSSLの通信の終端となります。
図でみていくとわかり安いかと思います。
つまりPCからELBのアクセスポイントに通信する際はSSLで暗号かします。
ただELBからEC2にアクセスする際はHTTP通信で行います。
HTTPSは暗号化するため通信が重くなります。
これによりセキュリティの高さと処理の速さの2つを実現することができます!
これをSSLターミネーションといいます。
これは現場でよく使われる技術だそうです。
ロードバランサーは全部で3種類あります。
ALB...httpやhttpsの負荷分散に使用する
NLB...TCPなどの負荷分散に使用する
CLB...こちらは現在は使われていないので気にしなくて大丈夫です。
ではELBがわかったところで早速手を動かしていきましょう!!!
##準備
まずは前回作成したEC2にsshでログインしましょう!
ssh -i my-key.pem ec2-user@パブリックIP
sudo su -
cd /var/www/html/
vi index.php
cdコマンドでWordPressのディレクトリに移動します。
viコマンドでindex.phpを編集します。
webサーバー1がブログに入るのがわかったかと思います!
ではEC2を2台に増やすために同じEC2 を作成していきます。
まずは既存のEC2を停止しましょう!
次にアクションからイメージとテンプレート→イメージを作成をクリックします。
イメージ名とイメージの説明をWeb Serverとしイメージを作成します。
これは何をしたかというとイメージのAMIを作成しています。
つまりEC2を作成する際にこのAMIを選択することで簡単にWordPress環境の同じEC2が作成できてしまうということです!!!
ではインスタンスのページに行ってインスタンスを起動をクリックします。
こちらのマイAMIにいくと先ほど作成したWebServerのAMIがあります。
こちらを選択していきます!
my-vpcでサブネットはpublic2の方を選択します。
この辺りも構成図を確認していくととてもわかりやすいかと思います!
自動割り当てパブリックIPも有効であとはデフォルトの設定で大丈夫です。
その次ストレージはそのままで大丈夫です。
その次のタグの追加でNameタグでWeb Server2としましょう!
セキュリティグループは既存のwebサーバーのセキュリティグループを選択しましょう!
基本的にセキュリティグループは揃えましょう!
こちらで起動と作成です。
ではwebserver2が作成できたので、停止していたwebサーバー1を起動にしましょう!
ではWebServer2とわかるようにこちらも編集していきましょう。
こちらのパブリップIPをコピーします!
一応アクセスできるかも確認しておきましょう!
ssh -i my-key.pem ec2-user@13.231.190.5
sudo su -
こちらでログインします!
cd /var/www/html
ll
こちらでしっかりとWordPressのファイルがあることが確認できるかと思います!
vi index.php
こちらで先ほどと同様に今回はwebServer2の目印をつけます
:wqa!で上書き保存します!
こうするとWeb server2の目印がつきます。
では2つのEC2が目印で作成してできたところでこちらをELBで負荷分散させていきます。
ロードバランサーの作成でALBを選択します。
名前は今回はLB-1とします
スキームはインターネット向け
my-vpcのpublic-subnet1,2にアベイラビリティゾーンは設定します。
こちらでで次にセキュリティグループの作成を行っていきます。
名前はLB-SG-1としておきます。
こちらで次に進みなす。
ターゲットグループはTG-1としヘルスチェックのパスは/readme.htmlとします。
ターゲットの登録で負荷分散するターゲットを選択していきます。
2台のEC2を選択し登録済みに追加をクリックします!
こちらで確認と作成を選択です!
では次にデータベースに設定されているDNS名をロードバランサーに書き換えていきます!
mysql -h RDSのエンドポイント -u wordpress -p
こちらでまずmysqlに入ります。
USE wordpress
SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
とすると現在はWebServerのパブリックIPになっているのが確認できるかと思います!
こちらを変更しましょう
UPDATE wp_options SET option_value = 'http://LB-1-571701307.ap-northeast-1.elb.amazonaws.com' WHERE option_name IN ('siteurl', 'home');
http://の後ろはELBのDNS名を選択しましょう!
ロードバランサー→説明で確認ができます。
これで変更できました
SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
これで確認が取れたかと思います!!
ではDNS名でブログが閲覧できるか確認しましょう!
先ほど入力したDNS名を今度はブラウザに貼り付けてみましょう!!
リロードしてみるとわかるかと思いますが、1と2がランダムに切り替わると思います!
これでロードバランサーがランダムにwebServer1と2で負荷分散をしていることが確認できました!
ではこれで接続が確認できたのでwebServerのセキュリティグループをELBだけに限定しましょう!!
現在だと全てのソースから通信を受け入れることになっています。
こちらをELBのセキュリティグループに変更しましょう!!
ブログが問題なく動作しているのが確認できたら成功です
ではテストで一つのEC2がダウンした時のテストをしてみましょう!!!
EC2を1台停止させます。
停止しても1の方でブログが閲覧できることが確認できました!!
リロードしてもずっと1のはずです!
つまり本番サービスで仮にどちらかのサーバーが停止した際ももう一つのサーバーが動いているのでユーザーはサイトが観覧できる。
といったことが確認できました!!!
テストが終わったらサーバーはまた起動しておきましょう!!
##最後にRDSを冗長化する
最後にRDSを冗長化していきます。
構成図をみるとわかるかと思いますが、
master, slave構成の部分です。
ここは超簡単にできます。
データベースの設定画面がから変更を押します。
スタンバイインスタンスを作成するにチェックを入れましょう!!
これで続行です。
変更スケジュールは今すぐ変更をクリックします。
これで変更すると。
RDSがmaster, slave構成になります。
これで最後にRDSのテストをしていきましょう!!
RDSを再起動しましょう
フェイルオーバーで再起動にします!
データベースが再起動中になっているのがわかるかと思います!
実際にアクセスできることが確認できたかと思います!!
こちらで最初の構成図の冗長化構成が完了になります。
最後にRDSは起動しっぱなしだと課金されていくので削除しておきましょう!
削除する際にスナップショットをとりますか?と聞かれるのでこちらを選択しておきます!!
こうすることでいつでもデーターベースを復元できることができます!
お疲れ様でした!!