AWSクラウドを活用したWordPress環境構築・運用のやり方講座

98
AWS クラウドを活用 した WordPress 環境構築・運用のやり方講座 横井 公紀 https://www.facebook.com/kiminori.yokoi

Transcript of AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Page 1: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

AWSクラウドを活用したWordPress環境構築・運用のやり方講座

横井 公紀https://www.facebook.com/kiminori.yokoi

Page 2: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

なぜ、クラウドにWordPress?

Page 3: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

規模の大きなWebサイトの運営してみませんか?

Page 4: AWSクラウドを活用したWordPress環境構築・運用のやり方講座
Page 5: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

波は読めない。突然やってくる。

Page 6: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

or

どちらを使っていますか?

Page 7: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

の場合

Page 8: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

1 User OK!

Page 9: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

200 User

×200

×200 サーバダウン

Page 10: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

サーバが落ちたなんとかしてくれ 増やしましょう

Page 11: AWSクラウドを活用したWordPress環境構築・運用のやり方講座
Page 12: AWSクラウドを活用したWordPress環境構築・運用のやり方講座
Page 13: AWSクラウドを活用したWordPress環境構築・運用のやり方講座
Page 14: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

今でしょ! いつ増やしたいの?

Page 15: AWSクラウドを活用したWordPress環境構築・運用のやり方講座
Page 16: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

物理サーバは簡単には増やせない

Page 17: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

要件の確定→発注→設定→キッティング

1〜2ヶ月はかかります

Page 18: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

繰り返しますが、波は突然やってきます

Page 19: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

なぜ、波はやってくるのか?

今、見たいから!

Page 20: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

どうしたらいいんだ…

Page 21: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

あらかじめ買っておくしかない

Page 22: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

200 User

×200

×200

OK!

Page 23: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

波は突然来ますが、やがて引いていきます

Page 24: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

200 User→ 50 User

×200→×50

×200→×50

こんなにいらない

Page 25: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

せっかく買ったのに…

Page 26: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

の場合

Page 27: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

1 User OK!

Page 28: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

波が来た!!!

Page 29: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

自動で拡張

Page 30: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

200 User

×200

×200

OK!

Page 31: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

ボタン一発で

Big Size

Page 32: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

200 User

×200

×200

OK!

Page 33: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

波が引き始めました

Page 34: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

自動で縮小

Page 35: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

200 User→ 50 User

×200→×50

×200→×50

無駄なし!

Page 36: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

突然の負荷に強くお金にも優しい!

Page 37: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

AWSにWordPressを構築してみよう!

Page 38: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

=

Page 39: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

・Amazon社が提供するクラウドサービス

・使いたいときに、使いたいだけのリソース・使いたいときに、すぐ使える・急にアクセスが増えても大丈夫

Page 40: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

どうやって使うの?

クレジットカードを準備し、アカウントを作ります。

Page 41: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

ログインしてみる

ユーザとパスワードを入れるだけです。

Page 42: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

ここにある全てのサービスを使えます。(使った分だけお金が発生します!)

メニュー画面!

Page 43: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

コストを抑えた負荷に強いサイト

Page 44: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

落ちないサイトをつくるために

・サーバを複数台にして、負荷分散します。

・WordPressとDBとの相乗りをやめます。

・Apacheをチューニングします。

・そしてAWSでAuto Scaling!

Page 45: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

基本構成

EC2

Availability Zone #1

Page 46: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

負荷分散構成 ※不完全

EC2

Availability Zone #1

EC2

Availability Zone #2

ELB(AWSのロードバランサ)

Page 47: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

EC2

Availability Zone #1

EC2

Availability Zone #2

WordPressの記事データはMySQL (データベース)に保存されます

Page 48: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

EC2

Availability Zone #1

EC2

Availability Zone #2

2台にしたら、どっちに保存される?

Page 49: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

EC2

Availability Zone #1

EC2

Availability Zone #2

RDS

DBを共通の参照先にする必要があります。

Page 50: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

EC2

Availability Zone #1

EC2

Availability Zone #2

RDS

DBも冗長化できます。(Multi-AZ機能)

RDS

データを自動でレプリケーションします。

Page 51: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

EC2

Availability Zone #1

EC2

Availability Zone #2

RDS

片方のDBが落ちると自動で切り替わります

RDS

Page 52: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

EC2

Availability Zone #1

EC2

Availability Zone #2

RDS

Page 53: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

あなたのWordPress同時に何人

接続できますか?

Page 54: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

httpd.conf

MaxClientsが256だから、256までいける!

Page 55: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

httpd.conf

MaxClients (が256だから、256までいける!

↑おそらく

かなりの確率で違います

Page 56: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

httpd = Apache

Apacheのプロセス(リクエスト処理中と待機中を含みます)

Page 57: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

消費メモリメモリ消費を

見てみましょう。

1プロセスあたり60MBほど

消費していますね。

Page 58: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

メモリの総容量

そもそも、どれだけのメモリが使えるのかを知っておく必要があります。

Page 59: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

自分のサーバ(WordPress)の限界を知ろう!

メモリ全体: 3,858,708 (KB) ※m3.medium / 3.75GB

Apache 1プロセスあたりのメモリ消費: 約60,000 (KB)

起動できるApacheのプロセスは・・・3,858,708 ÷ 60,000 = 約64

Page 60: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

設定では256プロセスまで起動するようになっているけど

実際は64プロセスまでしか起動できないようです。

Page 61: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

※今の説明には注意が必要です・物理メモリを全てApacheに割り当てた前提の

試算になります。

・実際は他のプロセスでもメモリを消費しています。よって、もっと厳しく、余裕を見て、

メモリ消費量の見積をしなければなりません。だから、メモリをApacheに最大限使わせるためにも、

WordPressとMySQLは別サーバにしたほうが良いのです。

Page 62: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

256個まで起動と書いてある

EC2

実際は64個までしか起動できない

Page 63: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

そしてサーバダウンへ・Apacheの設定ファイルには

「最大256プロセスまで起動する」と書いてあります。Apacheは設定ファイルを読み込んで、256プロセスまでは、起動しようと頑張ってしまいます。

・ところが、実際は64プロセスまでしか起動できないため、メモリに空きがなくなり、プロセスを起動できなくなります。

Page 64: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Apacheを起動すると、・まず8プロセスが起動し待機

・アクセスがない場合、待機プロセスを5まで減らす。

・アクセスが増えてくると処理プロセスが増えて、待機プロセスが減るため待機プロセスを20まで増やす。

・処理/待機合わせて256プロセスまで。(ただし、待機<=20)

Page 65: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

プロセスを増やす= メモリ消費が増える

だけではない!

Page 66: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

プロセスを増やすためにCPUを使います・Linuxではプロセスを起動するとき、CPU利用率が

跳ね上がります。

・つまり、先ほどのような設定にしていると、待機プロセスが足りなくなる → プロセスを起動

→ CPU利用率が上がる の繰り返しとなります。

Page 67: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

そしてサーバダウンへ (2回目)・「アクセスが集中したとき、動的にプロセス数を増やす」

このApacheの仕組みは便利なものですが、先ほどの理屈から、CPU消費が跳ね上がっていきます。

・プロセスの起動を繰り返すうち、

応答を返さなくなることがあるのです。これでは本末転倒になってしまいます。

Page 68: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Apacheの設定を変えてみよう!

Page 69: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Apacheを起動すると、・まず50プロセスが起動し待機

・アクセスがなくても待機プロセスは50のまま。

・アクセスが増えてくると待機プロセスが処理プロセスに変わる。

・処理/待機合わせて50プロセスまで。(処理プロセスが50のとき、待機プロセスは0)

Page 70: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Apacheを起動すると、・まず50プロセスが起動し待機

・アクセスがなくても待機プロセスは50のまま。

・アクセスが増えてくると待機プロセスが処理プロセスに変わる。

・処理/待機合わせて50プロセスまで。(処理プロセスが50のとき、待機プロセスは0)

無駄にプロセスの起動が発生せず

CPU利用率の増加を防ぐことができます

Page 71: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

1プロセスあたりのメモリ消費が膨れ上がらないように

様子を見つつ設定しておきましょう。

Page 72: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

MaxRequestsPerChildはCPUとメモリのトレードオフ・「1プロセスあたり処理できるリクエスト数」

を設定します。リクエスト数が設定値に達すると、プロセスを落とし、新しいプロセスを起動します。

・多ければ多いほど、メモリ消費が上がりますが、

プロセスが長生きしますので、CPU消費は上がりません。・小さいとメモリ消費は小さくなりますが、

プロセスの起動が頻発し、CPU消費が上がります。

Page 73: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

自分のサーバ(WordPress)の限界を知ろう!

メモリ全体: 3,858,708 (KB) ※m3.medium / 3.75GB

Apache 1プロセスあたりのメモリ消費: 約60,000 (KB)

起動できるApacheのプロセスは・・・3,858,708 ÷ 60,000 = 約64

この見積は、MaxRequestsPerChildの設定次第と言えるでしょう。

Page 74: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

ここまでのまとめ

Page 75: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

落ちないサイトをつくるために

・サーバを複数台にして、負荷分散すると落ちにくくなることが分かりました。

・自分のサーバの限界に合わせてApacheを設定できるようになりました。

Page 76: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

ここまでの前置きがあって、AWSを活用しよう!

という話ができます。

Page 77: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Auto Scaling機能で「限界」を超えよう!

Page 78: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Auto Scalingとは?・AWSの標準機能で、サーバの負荷状態に応じて、

自動でサーバを増減します。

・たとえば、「CPU利用率が5分平均80%を超えたら、1台起動」

「CPU利用率が10分平均10%を割ったら、1台停止」といったことが可能です。

Page 79: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

http://www.slideshare.net/horiyasu/20131206-­‐reduce-­‐costbyawsver2引用:  AWS堀内康弘様「AWSでコストを削減できる理由」

Page 80: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

http://www.slideshare.net/horiyasu/20131206-­‐reduce-­‐costbyawsver2引用:  AWS堀内康弘様「AWSでコストを削減できる理由」

アクセスが少ない時は、1台分の費用アクセスが増えた時だけ、N台分の費用

Page 81: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

設定例

Page 82: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

設定例

CPUの利用状況に応じてサーバを増やす!

Page 83: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

CPU利用率でサーバの増減・先ほどのチューニングができている前提だと、

アクセス数が爆発的に増加している= プロセスの起動が頻発している= CPU利用率が増加する

・CPU利用率が上がると、レスポンスが悪くなります。サーバを増やして、負荷を分散してあげましょう。

Page 84: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

ネットワーク(In)の状況に応じて、サーバを増やす!

設定例

Page 85: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

ネットワーク(In)でサーバの増減・先ほどのチューニングができている前提だと、

アクセス数が爆発的に増加している= ネットワーク(In)が増加している= 1プロセスあたりのメモリ利用率が増加する

・やはりサーバを増やして、負荷を分散してあげましょう。

Page 86: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Auto Scalingで運用してみよう・先ほどまで説明してきたように、

1台のサーバで処理できるリクエストには限界がありますがサーバの台数を2台にすれば、2倍処理できます!

・2台に増やすとその分費用が発生しますが、

高スペック1台を常時起動するよりも安価で済みます。CPUやネットワークの状況を見つつ、財布と相談して増やし方を検討します。

Page 87: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

AWSで費用が発生するポイント

・サーバの起動時間とスペックに応じて費用が発生します。

・対インターネットに通信するデータのサイズ(Out)に応じて費用が発生します。

Page 88: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

Spot Instanceを活用しましょう・AWSの余剰リソースを使ってサーバを起動する

「Spot Instance」を使うと、費用を格段に落とすことが出来ます。

・Spot Instanceでは、インスタンスの時間価格が入札価格

(= 1時間あたりいくらまでなら払う?)をを上回るとサーバが落ちてしまいます(常時起動の保証なし)が、入札価格>>>>>>>>時間価格にしておくと落ちません。

Page 89: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

1時間あたり、$0.0117 = 1時間1.4円!

Page 90: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

入札価格をこのへんにしておけば落ちない

値動きは、直近3ヶ月 ほぼ全ての日で $0.01〜$0.02/時間

※「落ちない」とはSpot  Instanceの仕組み上落ちないという意味です。

Page 91: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

AWS EC2インスタンス 月額費用比較

m3. mediumの場合オンデマンド(通常契約): $70.28 リザーブド(1年分前払い): $39.25

スポット: $8.7 !!!※リザーブドとは指定期間分の料金を前払いすると、期間中の総額がオンデマンドより安くなる特典です。   上記に記載の費用は、前払費用を12で割り、月額費用に換算したものとなります。

Page 92: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

サーバ10台同時に起動しても 月額1万円くらい!!

Page 93: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

通信量(Out)を抑えるには?

・Apacheで、コンテンツを圧縮して返すように設定しましょう。(物によりますが、大きいと1/8くらいまで抑えられます。)

・mod_deflate を有効化しましょう。

Page 94: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

mod_deflate 設定例

Page 95: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

まとめ

Page 96: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

まとめ

・AWSで負荷に強く、安価にサイトを 運用できます。 ・自分のサーバの限界を知った上で、 Apacheを設定しましょう。・「限界×サーバ台数」を意識した Auto Scalingと、Spot Instanceの 活用で、徹底的低コストに運営しましょう。

Page 97: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

まとめ

・何もかもデフォルト任せではなく、 「どうやって動いているか?」 「どうやったら早くなるのか?」 を突き詰めていくのが、構築の 面白いところです。 ・自分で仕組みをきちんと理解すれば、 トラブル対応も楽になるはずです。

Page 98: AWSクラウドを活用したWordPress環境構築・運用のやり方講座

AWSとWordPressの組み合わせで負荷に強いサーバを安価に運営しよう!