11月3日、「PHPカンファレンス2016に行ってきた!」つづき
Chefとnginxで作るPHPアプリケーションの
Reliable Blue Green Deployment
をメモメモ
※ちなみに、Blue-Green Deploymentとは
1.現在動いている環境がBlue
2.あたらしい環境を構築し、それをGreenとする
3.Greenが構築し終わったら、ネットワークをBlueからGreenに向ける
とダウンタイムなしできりかえられるというもの
nginxだと、reloadを使う(restartではない)ことで実現できるらしい。
1.BaseとBaseにおけるSRE
・Baseという会社について
NASE:お母さんも使えるネットショップさーぷす
PHP+CあけPHP製
PAY.JP
PyThon
・BASEにおけるSRE(さいとりらいあびりてぃえんじにあ)
サイト信頼性エンジニア
Xインフラエンジニアかっこいい言い方
サービスの安定稼動
→デプロイフローについて、今日は話す
2.デプロイの歴史と環境の整備
・デプロイの歴史的経緯
BASEのアーキテクチャ
ロードバランサ
Web
DB
・デプロイ手順
結構やること多い・自動化
本体の設置、複数の自作Pluginを設置、作成されるファイルキャッシュの削除
→本体+プラグイン
GiTリポジトリ 50数個 同時デプロイ
・以前のBASE
以下を全サーバーに行う
ELBから切断
deploy
ELB接続してアクセスできる
一台一台手作業
SSHのターミナルを台数分開いて
・簡単・健全なデプロイとは
出来るだけ自動で
出来るだけ並列で
出来るだけ無停止で
・デプロイ手法候補1
Capstrano:Ruby
Capstrano式デプロイ
release,sharedをつくる
git clone
currentにリンク:シンボリックリンクを切り替える
Comporserなし:無理っぽい
・Rubyの設定ファイル
・デプロイ方法の管理
・共通の処理の共有
本体+と子のリポジトリ同時の設定
個人環境の設定必要
・デプロイ候補2
Chef
Chef Server
Chef Client
デプロイ形式はCapodtrano式
解決?
必須:同じ構成
→設定手順書はない
中身が同じ構成ではない
なにが動いているのか、だれも把握していない
構成管理のコードが一応手順書代わりになる
serverspecで挙動確認
同じ構成でやりたいよね
・Blue Green
Blue
Green:デプロイ済み
全サーバー同じ構成
・PHPのコードをデプロイするため
(1)Chef
(2)Deploy Webhook インテグレーションAPI
→結局Rubyにやらせている
→Chefと相性
・ロードバランサーについて
nginxでやっている
HTTP2
デプロイだけだったら、ELBだけでもよかった
→アクセスが限界を越えると、アクセス遮断してスケール
HTTP2に非対応
(3) nginx
サーバー
service nginx reoad
3.デプロイの流れ
・BlueGreen必要なもの
・自動化されていること
・クラウド
ネットワークスイッチで切り替える
サーバーを消すことは出来れば
・必要なものは残して生きたい
サーバーのログは宝の山
・デプロイメント
Step1
release publish (webhook) 管理サーバー
ssh host "chef-client"
deploy only instance
AMI
Step2
管理サーバーからrun_instances
デプロイサーバー Green
Step3
ELBでサーバーBlue Green切り替え
→ELBは、デプロイするだけ
Step4
nginxでサーバーBlue Green切り替え
ネットワークインスタンスを切り替え
Step5.6,7,8
nginxがblueを向いている
service nginx reload
nginxがgreenを向いている
デプロイ後のあとしまつ
4.Baseのデプロイの未来
全てを自動化に(SQL以外)
circleci
古い機能については、レストコードがあまりない
comporserいれたい
composer install
デプロイできる人を増やしたい
カジュアルアップデートしたい
BlueGreenはやめられない
Botさん
デプロイをslack軽油で
・CM
募集中
サービス使って!
・質疑応答
ELBの存在
Green構成のとき、インスタンスIDはとれる。それを使って、IPを振る
そのIPをnginxが使う
Chefとnginxで作るPHPアプリケーションの
Reliable Blue Green Deployment
をメモメモ
※ちなみに、Blue-Green Deploymentとは
1.現在動いている環境がBlue
2.あたらしい環境を構築し、それをGreenとする
3.Greenが構築し終わったら、ネットワークをBlueからGreenに向ける
とダウンタイムなしできりかえられるというもの
nginxだと、reloadを使う(restartではない)ことで実現できるらしい。
1.BaseとBaseにおけるSRE
・Baseという会社について
NASE:お母さんも使えるネットショップさーぷす
PHP+CあけPHP製
PAY.JP
PyThon
・BASEにおけるSRE(さいとりらいあびりてぃえんじにあ)
サイト信頼性エンジニア
Xインフラエンジニアかっこいい言い方
サービスの安定稼動
→デプロイフローについて、今日は話す
2.デプロイの歴史と環境の整備
・デプロイの歴史的経緯
BASEのアーキテクチャ
ロードバランサ
Web
DB
・デプロイ手順
結構やること多い・自動化
本体の設置、複数の自作Pluginを設置、作成されるファイルキャッシュの削除
→本体+プラグイン
GiTリポジトリ 50数個 同時デプロイ
・以前のBASE
以下を全サーバーに行う
ELBから切断
deploy
ELB接続してアクセスできる
一台一台手作業
SSHのターミナルを台数分開いて
・簡単・健全なデプロイとは
出来るだけ自動で
出来るだけ並列で
出来るだけ無停止で
・デプロイ手法候補1
Capstrano:Ruby
Capstrano式デプロイ
release,sharedをつくる
git clone
currentにリンク:シンボリックリンクを切り替える
Comporserなし:無理っぽい
・Rubyの設定ファイル
・デプロイ方法の管理
・共通の処理の共有
本体+と子のリポジトリ同時の設定
個人環境の設定必要
・デプロイ候補2
Chef
Chef Server
Chef Client
デプロイ形式はCapodtrano式
解決?
必須:同じ構成
→設定手順書はない
中身が同じ構成ではない
なにが動いているのか、だれも把握していない
構成管理のコードが一応手順書代わりになる
serverspecで挙動確認
同じ構成でやりたいよね
・Blue Green
Blue
Green:デプロイ済み
全サーバー同じ構成
・PHPのコードをデプロイするため
(1)Chef
(2)Deploy Webhook インテグレーションAPI
→結局Rubyにやらせている
→Chefと相性
・ロードバランサーについて
nginxでやっている
HTTP2
デプロイだけだったら、ELBだけでもよかった
→アクセスが限界を越えると、アクセス遮断してスケール
HTTP2に非対応
(3) nginx
サーバー
service nginx reoad
3.デプロイの流れ
・BlueGreen必要なもの
・自動化されていること
・クラウド
ネットワークスイッチで切り替える
サーバーを消すことは出来れば
・必要なものは残して生きたい
サーバーのログは宝の山
・デプロイメント
Step1
release publish (webhook) 管理サーバー
ssh host "chef-client"
deploy only instance
AMI
Step2
管理サーバーからrun_instances
デプロイサーバー Green
Step3
ELBでサーバーBlue Green切り替え
→ELBは、デプロイするだけ
Step4
nginxでサーバーBlue Green切り替え
ネットワークインスタンスを切り替え
Step5.6,7,8
nginxがblueを向いている
service nginx reload
nginxがgreenを向いている
デプロイ後のあとしまつ
4.Baseのデプロイの未来
全てを自動化に(SQL以外)
circleci
古い機能については、レストコードがあまりない
comporserいれたい
composer install
デプロイできる人を増やしたい
カジュアルアップデートしたい
BlueGreenはやめられない
Botさん
デプロイをslack軽油で
・CM
募集中
サービス使って!
・質疑応答
ELBの存在
Green構成のとき、インスタンスIDはとれる。それを使って、IPを振る
そのIPをnginxが使う