株式会社gloops
クロスファンクション統括部
システム基盤部インフラエンジニア リーダー
河村喬樹
2013.7.23
glusterfsを用いた
静的コンテンツ配信サーバ冗長化
■名前
河村喬樹(かわむらたかき)33才・独身
■gloops入社
2011年4月
前職は携帯サイト運営のインフラエンジニア
入社当時 社員80名 インフラ2人目
■趣味
お酒大好き!(facebookでも大概飲んでる写真あがってます)
自己紹介
アジェンダ
1.gloopsのシステム概要
2.glusterfs (+samba) +nginx+varnishを用いた
静的コンテンツ配信サーバ冗長化
1.gloopsのシステム概要
■構成
Linux(黄)とWindows(青)のハイブリット構成
複数クラスタで運用
gloopsインフラシステム概要
LB
nginx
memcachedredisDB(SQLServer)
nginx
AP(IIS) AP(IIS) AP(IIS)
gloopsのDBとKVS
■DB
前述の通り、SQL Serverを利用
■KVS
redis と memcached を利用
→DBの負荷を軽減するため、cacheを最大限利用
→利用場面でSQL Serverとredisとmemcached使い分け
→アクセスを捌くことが優先
gloopsサーバ規模
■1タイトル
最大で…約150台
■合計
1800台以上のサーバ(構築中・スタンバイも含)
→Windows:Linux=約7:3
2.glusterfs (+samba) +nginx+varnishを用いた
静的コンテンツ配信サーバ冗長化
静的コンテンツ配信の概要
ユーザー mobage CDN gloops サーバ群
①Platform CDNに静的コンテンツ
(画像etc)がcacheされていれば、
そのままユーザーへ返す
②Platform CDNに静的コンテンツ
(画像etc)がcacheされていない場
合は、gloopsサーバ群に取りに来る
va
nx nxnx
va va
静的コンテンツ配信サーバ群 ver.1.0
LB
LB
LB
varnish
LB
nginx
file
:http
:nfs(autofs)
:Global IP
画像etc
静的コンテンツ配信サーバ群 ver.1.0
■経緯
・上位回線が逼迫されていたため、varnishサーバ群をク
ラウドへ外出ししていた
・なので、varnish→nginx間は、GLOBAL NWでアクセ
スしていた
va va va
nx nxnx
静的コンテンツ配信サーバ群 ver.1.1
LBLB
varnish
nginx
file
:http
:nfs(autofs)
:Global IP
画像etc
nx nxnx
静的コンテンツ配信サーバ群 ver.1.1
■改善点
・上位回線が拡大され、varnishサーバ群を外出しせず、
同一NW上に設置することが可能になった
・よって、varnish→nginx間はLOCAL NWを通信
→レスポンス改善
→外的要因によるリスク軽減
静的コンテンツ配信サーバ群 ver.1.1
■問題点
・ nx→file間のnfs(autofs)が、安定しない!!
・10台中1台程度、数日に1回接続切れる
→一部画像etc NG
・timeout等の設定変更、version変更しても改善せず><
→nfsやめよう!
→nginxでpoxyさせよう!
静的コンテンツ配信サーバ群 ver.1.2
va
nx
LBLB
varnish
file(nginx+画像etc)
:http
:Global IP
画像etc
va va
静的コンテンツ配信サーバ群 ver.1.2
■改善点
・ nfs(autofs)が接続断になる問題解決!
静的コンテンツ配信サーバ群 ver.1.2
■問題点
・ (もちろん最初から分かっていましたが、)
File(静的コンテンツ配置)サーバが、SPOF
Fileサーバがダウンしたら、画像etc全て(現時点で
cacheされているもの以外)閲覧不能!
そもそもの大前提そもそもの大前提
・glusterfs (+samba) +nginx+varnishを用いた
静的コンテンツ配信サーバ冗長化
画像etc
Linux
Fileサーバ
Windows
画像etc
:samba
Fileサーバの冗長化
・glusterfsを利用して、静的コンテンツファイルの分散
を行なう
glusterfsとは
・スケーラブルなストレージのための汎用分散ファイル
システムの1つ
・TCP/IPインターコネクトなどの各種ストレージを集約
し、大規模並列ネットワークファイルシステムを構築で
きる
・2011年のレッドハットによるGluster買収の後はレッド
ハットにより開発されている
(Wikipediaより)
va
静的コンテンツ配信サーバ群 ver.2.0
va
nx
LBLB
varnish
glusterfs
replica volume
(nginx+画像etc)
:http
:Global IP
画像etc
va
nx
画像etc
画像etc
:glusterfs
glusterfs
native client+samba
Windows
画像etc
:samba
静的コンテンツ配信サーバ群 ver.2.0
# gluster volume info
Volume Name: data01
Type: Replicate
Volume ID: 12345678-1234-abcd-abcd-abcdefghijkl
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 172.16.10.11:/www/data
Brick2: 172.16.10.12:/www/data
静的コンテンツ配信サーバ群 ver.2.0
■仕様
・glusterfs native client+sambaサーバから、replica
volumeサーバへ画像の同期を行なう
・replica volumeサーバには各々nginxが稼働している
静的コンテンツ配信サーバ群 ver.2.0
■改善点
・nginxが稼働しているglusterfs replicaサーバが、ダウ
ンしても冗長化をとっているため、画像etcが配信されな
くなることはない
静的コンテンツ配信サーバ群 ver.2.0
【ヘルスチェック】
■from LB
・LB→varnish→nginx経由で特定ファイルのHTTP
status監視
→200が返って来なかったら、LBからvarnishが外れる
5sおきにチェックし、
HTTP Status 200が3s以内に返ってく
ればOK
1回でもNGなら外す
■from varnish
・varnish→nginx経由で特定ファイルのHTTP status監
視
→200が返って来なかったら、varnishからnginxが外れ
る
.expected_response = 200;
.interval = 5s;
.timeout = 1s;
.initial = 6;
.window = 5;
.threshold = 4;
5sおきにチェックし、
レスポンスが1s以内に返ってきて、
5回中4回HTTP Status 200が
返ってくればOK
起動時は6回成功しないと、healthとみ
なさないよ
静的コンテンツ配信サーバ群 ver.2.0
【ヘルスチェック】
静的コンテンツ配信サーバ群 ver.2.0
【そもそもvarnishの設定】
・vclで複数ドメインに対応
→ドメイン毎に、振り先のnginx(replica volume)サー
バ群を変更可能 ■nginx(replica volume)への振り分け
director image01 round-robin {
{
.backend = replica11;
}
{
.backend = replica12;
}
}
director image02 round-robin {
{
.backend = replica21;
}
{
.backend = replica22;
}
}
■ドメインの振り分け
set req.http.host = regsub(req.http.host, ":8080$", "");
if ( req.http.host == "image01.hogehoge.jp" ) {
set req.backend = image01;
}
if ( req.http.host == "image02.hogehoge.jp" ) {
set req.backend = image02;
}
静的コンテンツ配信サーバ群 ver.2.0
【そもそもvarnish→nginx間の設定】
・varnishからHost Headerで、ドメインをnginxへ渡し
ている
【そもそもnginxの設定】
・varnishで設定した、ドメイン毎にVirtualHostを設定
→ドキュメントルート、logの出力先を分けてる
→前述ヘルスチェックを利用し、個別ドメイン毎に切り
離すことも可能
静的コンテンツ配信サーバ群 ver.2.0
■varnish monitoring
■varnishstatの値をmonitoring
静的コンテンツ配信サーバ群 ver.2.0
■今後
・静的コンテンツ配布先の冗長化
・glusterfsのパフォーマンス(チューニング・監視)
ご清聴ありがとうございました

Glusterfsを用いた静的コンテンツ配信サーバ冗長化 20130723