31
株株株株 gloops 株株株株株株株株株株株株株 株株株株株株株株株株株株株株株株 株株株株 株株株株 2013.7.23 glusterfs 株株株株 株株株株株株株株株株株株株株株

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

Embed Size (px)

Citation preview

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

株式会社 gloops

クロスファンクション統括部

システム基盤部インフラエンジニア リーダー

河村喬樹

2013.7.23

glusterfs を用いた

静的コンテンツ配信サーバ冗長化

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

■ 名前河村喬樹(かわむらたかき) 33 才・独身

■gloops 入社2011 年 4 月前職は携帯サイト運営のインフラエンジニア

入社当時 社員 80 名 インフラ 2 人目

■ 趣味お酒大好き ! ( facebook でも大概飲んでる写真あがってます)

自己紹介

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

アジェンダ

1. gloops のシステム概要

2 . glusterfs (+samba) +nginx+varnish を用いた静的コンテンツ配信サーバ冗長化

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

1. gloops のシステム概要

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

■ 構成Linux( 黄 ) と Windows( 青 ) のハイブリット

構成複数クラスタで運用

gloops インフラシステム概要

LB

nginx

memcachedredisDB(SQLServer)

nginx

AP(IIS) AP(IIS) AP(IIS)

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

gloops の DB と KVS

■DB前述の通り、 SQL Server を利用

■KVSredis と memcached を利用→DB の負荷を軽減するため、 cache を最大限利用→ 利用場面で SQL Server と redis と memcached 使い分け→ アクセスを捌くことが優先

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

gloops サーバ規模

■1 タイトル最大で…約 150 台

■ 合計1800 台以上のサーバ(構築中・スタンバイも含)→Windows:Linux= 約 7:3

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

2 . glusterfs (+samba) +nginx+varnish を用いた静的コンテンツ配信サーバ冗長化

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

静的コンテンツ配信の概要

ユーザー mobage CDN gloops サーバ群

①Platform CDN に静的コンテンツ(画像 etc )が cache されてい

れば、そのままユーザーへ返す

②Platform CDN に静的コンテンツ(画像 etc )が cache されていない場合は、 gloops サーバ群に取

りに来る

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

va

nx nxnx

va va

静的コンテンツ配信サーバ群 ver.1.0

LB

LB

LB

varnish

LB

nginx

file

:http

:nfs(autofs)

:Global IP

画像 etc

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

静的コンテンツ配信サーバ群 ver.1.0

■ 経緯・上位回線が逼迫されていたため、 varnish サーバ群をクラウドへ外出ししていた・なので、 varnish→nginx 間は、 GLOBAL NW でアクセスしていた

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

va va va

nx nxnx

静的コンテンツ配信サーバ群 ver.1.1

LBLB

varnish

nginx

file

:http

:nfs(autofs)

:Global IP

画像 etc

nx nxnx

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

静的コンテンツ配信サーバ群 ver.1.1

■ 改善点・上位回線が拡大され、 varnish サーバ群を外出しせず、同一 NW 上に設置することが可能になった・よって、 varnish→nginx 間は LOCAL NW を通信→ レスポンス改善→ 外的要因によるリスク軽減

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

静的コンテンツ配信サーバ群 ver.1.1

■ 問題点・ nx→file 間の nfs(autofs) が、安定しない!!・ 10 台中 1 台程度、数日に 1 回接続切れる→ 一部画像 etc NG・ timeout 等の設定変更、 version 変更しても改善せず ><

→nfs やめよう!→nginx で poxy させよう!

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

静的コンテンツ配信サーバ群 ver.1.2

va

nx

LBLB

varnish

file(nginx+ 画像 etc)

:http

:Global IP

画像 etc

va va

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

静的コンテンツ配信サーバ群 ver.1.2

■ 改善点・ nfs(autofs) が接続断になる問題解決!

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

静的コンテンツ配信サーバ群 ver.1.2

■ 問題点・ (もちろん最初から分かっていましたが、)File (静的コンテンツ配置)サーバが、 SPOFFile サーバがダウンしたら、画像 etc 全て(現時点でcache されているもの以外)閲覧不能!

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

そもそもの大前提そもそもの大前提

・ glusterfs (+samba) +nginx+varnish を用いた静的コンテンツ配信サーバ冗長化

画像 etc

Linux

File サーバ

Windows

画像 etc:samba

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

File サーバの冗長化

・ glusterfs を利用して、静的コンテンツファイルの分散を行なう

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

glusterfs とは

・スケーラブルなストレージのための汎用分散ファイルシステムの 1 つ・ TCP/IP インターコネクトなどの各種ストレージを集約し、大規模並列ネットワークファイルシステムを構築できる・ 2011 年のレッドハットによる Gluster 買収の後はレッドハットにより開発されている

( Wikipedia より)

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

va

静的コンテンツ配信サーバ群 ver.2.0

va

nx

LBLB

varnish

glusterfsreplica volume(nginx+ 画像 etc)

:http

:Global IP

画像 etc

va

nx

画像 etc

画像 etc

:glusterfs

glusterfsnative client+samba

Windows

画像 etc

:samba

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

静的コンテンツ配信サーバ群 ver.2.0

# gluster volume info

Volume Name: data01Type: ReplicateVolume ID: 12345678-1234-abcd-abcd-abcdefghijklStatus: StartedNumber of Bricks: 1 x 2 = 2Transport-type: tcpBricks:Brick1: 172.16.10.11:/www/dataBrick2: 172.16.10.12:/www/data

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

静的コンテンツ配信サーバ群 ver.2.0

■ 仕様・ glusterfs native client+samba サーバから、 replica volume サーバへ画像の同期を行なう・ replica volume サーバには各々 nginx が稼働している

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

静的コンテンツ配信サーバ群 ver.2.0

■ 改善点・ nginx が稼働している glusterfs replica サーバが、ダウンしても冗長化をとっているため、画像 etc が配信されなくなることはない

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

静的コンテンツ配信サーバ群 ver.2.0【ヘルスチェック】

■from LB・ LB→varnish→nginx 経由で特定ファイルの HTTP status 監視→200 が返って来なかったら、 LB から varnish が外れる

5s おきにチェックし、HTTP Status 200 が 3s 以内に返ってくれば OK1 回でも NG なら外す

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

■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【ヘルスチェック】

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

静的コンテンツ配信サーバ群 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; }

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

静的コンテンツ配信サーバ群 ver.2.0

【そもそも varnish→nginx 間の設定】・ varnish から Host Header で、ドメインを nginxへ渡している

【そもそも nginx の設定】・ varnish で設定した、ドメイン毎に VirtualHost を設定→ ドキュメントルート、 log の出力先を分けてる→ 前述ヘルスチェックを利用し、個別ドメイン毎に切り離すことも可能

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

静的コンテンツ配信サーバ群 ver.2.0

■varnish monitoring

■varnishstat の値をmonitoring

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

静的コンテンツ配信サーバ群 ver.2.0

■ 今後・静的コンテンツ配布先の冗長化・ glusterfs のパフォーマンス(チューニング・監視)

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

ご清聴ありがとうございました