infrastructure of pathtraq

46
パパパパパパパパパパパパパパパ パパ パパパパパ パパパパパパ

Upload: kazuho-oku

Post on 31-May-2015

4.024 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Infrastructure of Pathtraq

パストラックのインフラストラクチャ

サイボウズ・ラボ株式会社奥 一穂

Page 2: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 22010 年 2 月 23 日

自己紹介

Page 3: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 32010 年 2 月 23 日

自己紹介 – 主な仕事 (1)

Palmscape (Xiino)Palm OS 用ウェブブラウザ ( 実質世界初 )IBM, NTT ドコモ , Sony 等が採用M.I.T. TR100/2002 受賞

Web アプリケーション統合開発環境の開発IPA 未踏 2004 – スーパークリエータ

Japanize外国のウェブサービス UI を日本語化するサービ

ス ( ブラウザプラグイン )

Page 4: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 4

自己紹介 – 主な仕事 (2)

パストラックブラウザプラグインを利用して、「今」注目さ

れている情報を抽出するウェブサービスQ4M

高速なメッセージキュー (MySQL のプラグイン )

Mixi, livedoor, Ficia, DeNA 等が使用

2010 年 2 月 23 日

Page 5: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 5

自己紹介 – 最近の仕事

Incline / PacificRDBMS シャーディングの自動化や動的分割

CosmicFail-safe Network RAID

PlackPerl の Web Application Middleware宮川さんが主開発者自分はプロトコル実装やホットデプロイといっ

た分野にコミット

2010 年 2 月 23 日

Page 6: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 6

自己紹介 – まとめ

基盤プログラムの研究開発が仕事ブラウザとかストレージミドルウェアとか「インフラプログラマ」 ?

今日は、インフラプログラマがインフラを作るとどうなるか、という話「こういうツールを作りました」ではなく「こ

う考えて、楽をしています」という話として聞いていただければ。

2010 年 2 月 23 日

Page 7: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 7

パストラックとは ?

2010 年 2 月 23 日

Page 8: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 8

パストラックの概要 (1)

ブラウザプラグインを利用したウェブアクセス統計サービスサービス開始 : 2007 年 8 月

ページ単位のリアルタイム統計と検索注目情報を自動抽出

2010 年 2 月 23 日

Page 9: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 9

パストラックの概要 (2)

2010 年 2 月 23 日

Page 10: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 10

パストラックのデータセット

2008/4 2010/2

サンプルユーザー ( アクティブ )

6,300 12,500

アクセスの収集数 ( 日毎 ) 約 100 万 160 万

アクセスの収集数 ( 累計 ) 1 億 8 億

統計データサイズ 16GB 100GB

総データサイズ 100GB 230GB

2010 年 2 月 23 日

※ 圧縮手法等の改善は随時行っています

Page 11: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 11

パストラックの問題

データセットのサイズ増大統計データ (100GB) はランダムアクセスなの

で RAM に載ってないと危険従来のサーバ構成では限界

MySQL / ウェブサーバ兼用メモリ : 64GBHDD: 500GB x2

サーバ構成を見直すことにサービス開始から予測していたことではあった

2010 年 2 月 23 日

Page 12: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 12

ムーアの法則とサーバ投資

メモリ要求が時間に比例増加するサービスでは、3年目のシステム投資が最大YAPC::Asia 2008 発表資料より

2010 年 2 月 23 日

1 2 3 4 5 6 7 8 9 10

Year

Data SizeMoore's LawSystem Cost

Page 13: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 13

新しいサーバ構成の方針 (1)

MySQL 専用のサーバその他は VM を利用

単機能化した仮想サーバを複数従来 : 1台のサーバが複数の機能を提供

バックアップ手法の統一LVM ( 含む VM イメージ ) による増分バック

アップ

2010 年 2 月 23 日

Page 14: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 14

新しいサーバ構成の方針 (2)

SSD の積極利用統計データを SSD 上に配置

メインメモリ超の統計データをハンドリング可能にInnoDB の読み込みだと、 7200 回転な HDD

の 40 倍速 (10,000 IOPS @ 16KB read)ただし NCQ に対応した SATA ドライバが必要並列度が高いので、1プロセスが全力で I/O しても

他のプロセスへの影響が少ないので、運用が楽全文検索データは従来から SSDeSATAp で接続して、故障時の対応を簡単に

2010 年 2 月 23 日

Page 15: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 15

新しいサーバ構成

2010 年 2 月 23 日

2台 (+1) 構成DB 専用サーバ一般用 VM サーバ他に、予備機兼開発機

マスター DB を SSD 化SSD によって、当初予測よりも設備投資コストが大幅減

DB サーバMem: 64GB, SSD 160GB*2

VM サーバMem: 12GB, SSD 80GB

Page 16: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 16

新しい DB サーバ

旧サーバに SSD を追加して使い回しCPU: Opteron 2218 (Dual [email protected]) x2Mem: 64GBHDD: 500GB x2 ( 本文データ等を配置 )SSD: X25-M 160GB x2 ( 統計データ専用 )

eSATA で接続

MySQL 5.1, Q4M

2010 年 2 月 23 日

DB サーバ

Page 17: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 17

仮想サーバ群

リバースプロキシApache + mod_proxy

アプリケーションサーバPSSPSS (PSGI の実装 ) + CGI::Application

ホットデプロイ可能

全文検索サーバTritonn ベース

eSATA で接続された X25-M に格納

2010 年 2 月 23 日

VM サーバ

Page 18: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 18

仮想サーバのホストには XenServer

ハードウェアCPU: Opteron 2218 (Dual [email protected]) x2Mem: 12GBHDD: 500GB x2SSD: X25-M 80GB x1 (全文検索サーバ用 )

eSATA で接続

XenServer + XenCenter を評価してみたかったVMware ESXi + vCenter は既に別用途で運用中

2010 年 2 月 23 日

Page 19: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 19

XenServer 画面写真

2010 年 2 月 23 日

Page 20: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 20

パストラックの運用

2010 年 2 月 23 日

Page 21: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 21

デーモンは全て daemontools で管理

理由 : デーモン化処理とプログラムの分離多数のワーカープロセスに、いちいちデーモン

化処理を実装するのは面倒 ⇒ daemontools 使えばいいよね ⇒ だったら Apache や MySQL も

daemontools で管理すべきだよね

2010 年 2 月 23 日

Page 22: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 22

Server::Starter によるホットデプロイ

TCP サーバをホットデプロイするためのラッパーサービス瞬停なしで、アプリケーションをデプ

ロイ可能新バージョンが起動できない場合は旧バージョ

ンがサービス継続YAPC::Asia 2009 の LT ネタとして開

発Plack 系の httpd 実装を中心に利用可能

2010 年 2 月 23 日

Page 23: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 23

タスクは cron で管理

普通そうですよね 統計系のタスク間の排他処理は

setlock でI/O 競合を避けるためバックアップ処理との競合回避も同様

タスクが失敗したら、どうする ?

2010 年 2 月 23 日

Page 24: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 24

Cronlog

2010 年 2 月 23 日

Page 25: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 25

Cronlog – 動機

Cron タスクに失敗した時「だけ」エラーメールを送りたいCron のメール送信機能は使えるか ?⇒ Cron のメール送信有無は、タスクの終了ス

テータスではなく、タスクからの出力の有無⇒ task || echo “error!” じゃダメなの ?⇒ task の出力がないと障害解析は難しい⇒ 結論 : タスクが異常終了したら、タスクの出力

を Cron 経由でメールするラッパーを書けばいい

2010 年 2 月 23 日

Page 26: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 26

Cronlog – 例

task を実行して非ゼロで終了したら task の出力をメール5 0 * * * exec cronlog -- task 2>&1

task を実行して、その出力を保存しつつ、非ゼロで終了したら、 task の出力をメール5 0 * * * exec cronlog -t -l logfile -- task

2>&1-t オプション : 出力の各行にタイムスタンプをつける

2010 年 2 月 23 日

Page 27: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 27

監視とは継続的なテストである

2010 年 2 月 23 日

Page 28: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 28

監視とは継続的なテストである

監視=定期的な polling による、条件成立の確認Heartbeat の受信等も polling に変換可能

Unix のツールは、正否を終了コードで返す⇒ だったら、 cronlog と既存ツールを組み合わせて監視系を書けるよね ?

2010 年 2 月 23 日

Page 29: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 29

Cronlog を用いた単純な監視例 (1)

Ping でサーバの死活監視5 * * * * cronlog -- ping -n 5 server 2>&1

Ping が通らなかったらアラートメールメールを見れば、 packet loss なのか、 no

route なのか、 DNS lookup error なのか分かる⇒ 迅速な対応が可能

2010 年 2 月 23 日

Page 30: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 30

Cronlog を用いた単純な監視例 (2)

HTTP の監視5 * * * * cronlog -- wget -O - http://server/

2>&1

httpd が 200 を返さない場合はアラートメール接続失敗等でもメール送信メールの中身は wget のエラー出力 (or httpd

のエラーレスポンス ) なので障害解析が簡単

2010 年 2 月 23 日

Page 31: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 31

Cronlog による統合監視

Q. 多数の項目を監視することはできる ?A. プログラミング言語のテストフレームワーク

を使うことで可能メリット : プログラマが、使い慣れた

テストフレームワークを使って監視系を構築できる出力もプログラマが見慣れた形式つまり、プログラマがアプリケーションレベル

の監視を行うのに最適例 : メッセージキューのサイズやキャッシュのヒッ

ト率

2010 年 2 月 23 日

Page 32: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 32

Cronlog による統合監視の例

Perl の場合は prove多数の監視テストを critical/*.t として作成5 * * * * cronlog -t -l /var/log/critical_log --

prove -R critical 2>&1テストが1つでも失敗すると、アラートメール 警告レベルの監視を動かしたけれ

ば、 warning/*.t とか作って prove -R warning すればいい

2010 年 2 月 23 日

Page 33: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 33

Cronlog まとめ

タスク監視とサービス監視の両方が可能

学習コストが低い既存の Unix コマンドと組み合わせて監視

プログラマにやさしい使い慣れたテストフレームワークで監視が書け

るプログラマが書くテストの一部に「監視テス

ト」を加えるべきプログラマが障害対応する運用に好適

2010 年 2 月 23 日

Page 34: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 34

Cronlog 関連の、その他もろもろ

その他、小物touch_if

httpd の応答時間やエラー応答の監視ssh_run

手元のスクリプトをリモートサーバに送り込んで実行

参照 :http://developer.cybozu.co.jp/kazuho/2010/

01/crontab-f131.htmlhttp://developer.cybozu.co.jp/kazuho/

2010/01/cronlog-52f2.html

2010 年 2 月 23 日

Page 35: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 35

パストラックのバックアップ

2010 年 2 月 23 日

Page 36: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 36

バックアップソフトウェアの要件

実質無停止のホットバックアップボリュームレベルのバックアップ

MySQL とか VM イメージとか、対象によってバックアップ手法を変えたくない

インクリメンタルバックアップ毎日 300GB ずつデータ増加とか勘弁

エージェントのインストールが不要XenServer の Dom0 にソフトインストールと

かやりたくない2010 年 2 月 23 日

Page 37: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 37

結論:ググるの面倒になったので自作

以前自作した、データベースファイル用の diff ツールをベースに。ブロックデバイスの diff は、バイナリファイル

の diff より要件が簡単over-ssh でのバックアップ

バックアップ元に空き領域が不要Disk Read < Network Speed なので問題なし

2010 年 2 月 23 日

Page 38: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 38

Blockdiff の特徴

設定ファイル不要コマンドラインの引数で操作

エージェントのインストール不要フルバックアップと増分バックアップ

が可能LVM Snapshot によるホットバック

アップ外部のロックプログラムと組み合わせて

MyISAM, Tritonn 等のバックアップも可能2010 年 2 月 23 日

Page 39: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 39

Blockdiff のアルゴリズム

ボリュームバックアップの場合 :1. エージェントを送り込む

差分バックアップならば、ブロック毎の MD5 ファイルも

2. 必要なロックを獲得して LVM スナップショット作成

3. ロックを解除4. LVM スナップショットを開き、ブロック毎に

MD5 を比較して、異なっていたら圧縮転送5. 新しい MD5 ファイルを転送6. LVM スナップショットを削除

※全て SSH で制御・転送

2010 年 2 月 23 日

Page 40: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 40

Blockdiff の使い方

http://developer.cybozu.co.jp/kazuho/2010/01/blockdiff-linux.html

2010 年 2 月 23 日

Page 41: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 41

パストラックにおける Blockdiff の運用

日毎で増分バックアップ毎月1日はフルバックアップ

バックアップ単位DB データのある論理ボリュームXenServer の LVM ベースの仮想ディスク

Blockdiff と XenServer のスナップショットは併用不可

バックアップの監視は cronlog統計タスクとの排他処理は setlock

2010 年 2 月 23 日

Page 42: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 42

Blockdiff の限界

≒LVM の限界スナップショットの差分だけを取ることができ

ないブロックデバイスのサイズに比例してバックアップに

時間がかかる (I/O コストが増大 )⇒ 10 分ごとのバックアップとかできない

zfs iscsi なら可能なのに

バックアップイメージから論理バックアップを取り出すのが面倒rollback がないので

いずれも zfs iscsi なら可能2010 年 2 月 23 日

Page 43: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 43

Blockdiff 余談

メインのロジックは Perl元は C だったけど Perl に変更C はコンパイラが必要だし 64bit only は、ま

だ無理XenServer の Dom0 は 32bit

ボトルネックは MD5 の計算だけど、ネイティブライブラリだから問題ない

Perl / Python は Linux Standards Base に入った今後は shell script を書く機会が減りそうLL で書いた方が生産性が高いし、速いし

2010 年 2 月 23 日

Page 44: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 44

まとめ

2010 年 2 月 23 日

Page 45: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 45

まとめ (1)

パストラックではコマンドラインツールを組み合わせて監視・運用を実現

ツールの種類を減らすことで TCO 削減デーモン管理は daemontools (svc)タスク処理は Cron + setlock

VM イメージと DB データのバックアップは Blockdiff

サービス監視は perl のテストロギングと障害通知は Cronlog

2010 年 2 月 23 日

Page 46: Infrastructure of Pathtraq

パストラックのインフラストラクチャ 46

まとめ (2)

どのツールを選ぶかは、目的次第汎用的 ( だけど複雑 ) なツールの TCO が優れ

ているとは限らない「奥が深い」症候群に罹患していませんか ?

細かなツールの組み合わせで書くのがいいケースも

2010 年 2 月 23 日