SlideShare a Scribd company logo
関西オープンソース 2008 (株) paperboy&co. 宮下 剛輔 2008/11/7
アジェンダ 自己紹介 30days Album 紹介 サーバソフトウェアまわりの話 運用まわりの話
自己紹介 宮下 剛輔と申します (株) paperboy&co.  で技術責任者というのをやってます ナウでヤングなレンタルサーバ ロリポップ!の会社です 個人的には mizzy.org の中の人 Perl プログラマの人 Puppet の人 ドクターペッパーの人
 
 
30days Album http://30d.jp/ オンラインアルバムサービス 30 日間限定 30 日経過すると閲覧できなくなる その後 10 日間アーカイブダウンロードができる 40 日経過後、完全に削除 合い言葉制 合い言葉を知ってる人だけ閲覧できる 合い言葉を知ってる人なら誰でも投稿できる シンプルなインターフェース あまりコンピュータ詳しくない人がターゲット
30days Album  誕生の経緯 社内プレゼン大会で優勝したアイデア プロジェクトキックオフ飲み会でホルモン喰いながらドメイン名( 30d.jp )を決定して即取得(もちろんムームードメインで) 開発合宿(お産合宿)で実装開始
30days Album の開発体制 デザイナ  1 人 開発  3 人 フロント Web アプリ ストレージ API ジョブサーバ API +ジョブワーカー サーバ周り 2人
 
30days Album  全体構成 リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
 
リバースプロキシ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
リバースプロキシ サービスの入り口 Perlbal Perl 製のリバースプロキシ / ロードバランサー Perl でプラグイン書いて機能拡張できる 2 台で DNS ラウンドロビン ウェブアプリと画像ストレージへの振り分け / 負荷分散 3 つの独自プラグイン SSL 接続か否かをウェブアプリへ通知 画像アクセスに対する認証 URL マッピング
リバースプロキシ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース http://30d.jp/img  へのアクセス http://30d.jp/img  以外へのアクセス
 
Web アプリ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
Web アプリ サービスの中心部分 アルバム作成 / 閲覧 / 投稿 認証(メールアドレス / パスワード、合言葉) Ruby on Rails + lighttpd + FastCGI SWFUpload BackgrounDRb 表示用サムネイル生成 ジョブサーバへの画像処理ディスパッチ リサイズ ローテート アーカイブ
なぜ Ruby on Rails なのか? うちは  PHP  がメイン 初の Ruby を使ったサービス なぜ Ruby なのか? それメインプログラマが Ruby 好きなので それだけです 開発者が一番好きな言語で開発するのがモチベーション向上には一番
 
画像ストレージ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
画像ストレージ MogileFS +  独自のストレージ API MogileFS Perl 製の分散ストレージシステム 複数ノードへの自動振り分け 自動レプリケーション ストレージ API MogileFS は専用クライアントライブラリが必要 HTTP GET/PUT で画像の出し入れ Catalyst + lighttpd + FastCGI Conten-Type  や  Content-Length の管理
ストレージ API  +  MogileFS ストレージ API tracker (mogilefsd) トラッカー  DB (MySQL) storage node (mogstored) storage node (mogstored) ストレージ ノード (mogstored) トラッカー (mogilefsd) ファイルの実体 ファイルのメタデータ
Perlbal 経由の画像取得(通常) ストレージ ノード ストレージ ノード Perlbal ストレージ API ストレージ ノード ファイルリクエスト ファイル取得 ファイルの内容を返す
X-REPROXY-URL ヘッダ 画像の取得をストレージ API 経由でやるのは効率が悪い FastCGI プロセスを画像転送だけで占有してしまう そこで画像取得時に、画像データではなく、 X-REPROXY-URL ヘッダを Perlbal に返す ヘッダの値は MogileFS のストレージノード上にある、ファイルの実体を示す URL
X-REPROXY-URL ヘッダを使う場合 ストレージ ノード ストレージ ノード Perlbal ストレージ API ストレージ ノード ファイルリクエスト X-REPROXY-URL: http://storage_node/dev1/0/000/... X-REPROXY-URL ヘッダをもとにファイル取得
画像ストレージのディスク構成 500GBx2 本 /boot は RAID1 swap, / は RAID1+LVM /data は LVM で 1 パーティションに見せ、大きく使う /boot swap / /data RAID1 /boot swap / /data RAID1+LVM LVM
画像ストレージのサーバ構成 リリース時はサーバ 2 台 API 、トラッカー( mogilefsd )、ストレージノード( mostored )が共存 MogileFS の機能により、 2 台のサーバは同じデータをストア ストレージ API mogilefsd mogstored ストレージ API mogilefsd mogstored
画像ストレージのサーバ構成 現在は 4 台 追加した 2 台はストレージノードとしての役割のみ アプリケーションの修正やサービスの再起動を全くせずに拡張できた ストレージ API mogilefsd mogstored ストレージ API mogilefsd mogstored mogstored mogstored
画像のアクセスコントロール Web アプリ 最初の認証は必ずここ メールアドレス / パスワード 合い言葉 認証後、セッションキーとアクセス可能なアルバムの相対 URL を memcached にセット リバースプロキシ Web アプリが memcached にセットした情報を元に、画像へのアクセスコントロールを実施
画像のアクセスコントロール Perlbal Web アプリ 画像ストレージ memcached 認証時に、セッションキーとアクセス可能なアルバム名をセット セッションキーを元に、アクセス可能なアルバム名を取得して、リクエストを許可 / 拒否 認証 画像取得
 
ジョブサーバ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
ジョブサーバ Gearman + TheSchwartz +独自のジョブ API Gearman Perl でできたジョブキュー リアルタイム性が高い ステータス管理しない TheSchwartz Perl でできたジョブキュー MySQL でキューを管理 リアルタイム性が低い ステータス管理、リトライ ジョブ API Catalyst + lighttpd +FastCGI XMLRPC でジョブ処理を受け付け 後ろの Gearman, TheSchwartz へジョブ依頼
ジョブサーバの構成 ジョブ API gearmand gearman worker TheSchwartz worker MySQL
ジョブの種類 Gearman リアルタイム性の高い処理 アルバムを表すサムネイル 画像の回転 TheSchwartz リアルタイム性の低い処理 画像リサイズ アーカイブ作成
 
Ruby + memcached Ruby Memcache Client が、 memcached にデータをセットする際に、デフォルトで marshal する Perlbal で memcached からデータを取得すると、なんかゴミが入ってる オプションで marshal しないように設定して回避
mogstored + lighttpd mogstored  は WebDAV サーバ デフォルトは Perlbal がバックエンド 設定で Apache や lighttpd をバックエンドにすることができる Perlbal だと不安定で lighttpd に変更 mogstored で保存されるファイルは、ディレクトリが階層化されている /data/dev1/0/005/090/0000000012.fid
mogstored + lighttpd (つづき) Perlbal がバックエンドの時は、存在しないディレクトリにファイルを PUT しても、勝手につくってくれる Apache や lighttpd の場合はエラーになる MogileFS::Client に手を入れて修正 PUT しようとするディレクトリの存在を確認し、存在しなければ MKCOL
Perlbal の Out of memory リバースプロキシの Perlbal が頻繁に落ちる ログには Out of memory!  のみ DEBUGGING オプションつけて Perl をコンパイル Danga::Socket の以下の行で発生してると判明 my $res = sysread($sock, $buf, $req_bytes, 0); $req_bytes  を小さくして対応
 
 
Puppet Ruby 製のシステム管理ツール クライアント / サーバ型 サーバの状態を独自言語で定義 マニフェストと呼ばれる マニフェストは Puppet サーバで一元管理 各サーバで Puppet クライアントを動かし、マニフェストを適用してサーバ構築や設定変更を行う
Puppet マニフェスト package  { ‘ MogileFS-Server’: ensure  =>  present ; ‘ MogileFS-Server-mogilefsd’: ensure  =>  present ; ‘ MogileFS-Server-mogstored’: ensure  =>  present ; }
Puppet の構成 Puppet サーバ (puppetmasterd) Puppet クライアント (puppetd) Puppet クライアント (puppetd) Puppet クライアント (puppetd) マニフェストの取得と適用 実行結果のレポート プロトコルは XMLRPC over HTTPS
Puppet によるサーバ構築 OS インストール ネットワーク設定 Puppet インストール Puppet 実行 完了
Puppet マニフェスト 独自の宣言型言語でサーバの状態を記述 プログラミング言語ほどの自由度はない 自由度がないぶん、人による差異が出にくい サーバの状態をテキスト形式で記述 Subversion 等で管理できる 誰がどういう変更を行ったのか、追跡しやすい
 
Archer Perl 製のデプロイツール Capistrano みたいなやつ モバイルファクトリの松野徳大さん (id:tokuhirom) が開発 プラグインで拡張が簡単 YAML で動作を定義
Archer 設定ファイル tasks : init: -  module: SVN::Update process: -  module: Rsync -  module: Exec::Remote config: command: /etc/init.d/lighttpd restart projects : days: storage_api: -  storage1.30d.jp -  storage2.30d.jp
Archer の動作イメージ 対象サーバ 対象サーバ Subversion デプロイサーバ 対象サーバ ①  archer.pl –c days.conf ②  svn up ③ 前処理 ④  rsync ⑤  対象サーバ上で後処理 ( SSH でコマンド実行)
Days での Archer の使い方 プログラムのアップデート プログラム修正して svn co archer.pl –c program.conf Puppet マニフェストのアップデート マニフェストを修正して svn co archer.pl –c manifest.conf puppetmasterd の再起動も archer コマンド一発 独自 yum サーバ上の RPM パッケージアップデート パッケージをアップデートして svn co archer.pl –c yum.conf createrepo の実行も archer コマンド一発
 
OpenLDAP 社内で利用 SSH ログイン Subversion 認証 Trac 認証 30days Album でも利用 SSH ログイン Puppet ノード管理 社内の LDAP データと同期 独自の同期スクリプト
 
OpenSSH + LPK patch LDAP Public Key patch $HOME/.ssh/authorized_keys  の代わりに、 LDAP  内の sshPublicKey 属性を参照 各サーバに authorized_keys を配布しなくても、 SSH の公開鍵認証ができる
LPK patch 用 LDIF dn: uid=mizzy, ou=people, o=paperboy objectclass :  ldapPublicKey sshPublicKey :  ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIB3dsrwq XqD7E4zYYrxwdDKBUQxKMioXy9pxFVai64k APxjU9KSqIo7QfkjslfsjflksjfldfkjsldfjLX/5zkzR mT28I5piGzunPv17S89z8XwSsuAoR1t86t+5 dlI7eZE/gVbn2UQkQq7+kdDTS2yXV6VnC52 N/kKLG3ciBkBAw==
 

More Related Content

PPT
YAPC Asia 2010 30days Albumの裏側 後日談
PDF
GPD WINでStretchを動かす
PPT
FreeBSDで行こう for small server
PDF
RancherでMesosクラスタをデプロイしてみる的ななにか
ODP
PPTX
Hello, systemd
PDF
Lisp Tutorial for Pythonista Day 6
PDF
systemdを始めよう
YAPC Asia 2010 30days Albumの裏側 後日談
GPD WINでStretchを動かす
FreeBSDで行こう for small server
RancherでMesosクラスタをデプロイしてみる的ななにか
Hello, systemd
Lisp Tutorial for Pythonista Day 6
systemdを始めよう

What's hot (20)

PDF
クリップボード監視と外部コマンド実行 #chibapm
POTX
LinuxをインストールしてWebサーバーを立ち上げてみよう
PPT
PDF
Cent osにpyhtonをインストールしてみよう
PPTX
04 これが(多分)最後! ベンチマークs
ODP
Sourcecode Reading Workshop2010
PDF
super_unkoをスーパーキレイにした
PDF
RでGPU使ってみた
PDF
あるコンテキストスイッチの話
PDF
R以外の研究ツール
PDF
20100717tobesetu
PDF
initramfsについて
PDF
Osc201703 tokyo-clonezilla-v1.2 j
PDF
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
PDF
systemdでよく使うサブコマンド
PDF
第66回関西Debian勉強会@KOF2012
PDF
2日間Fabricを触った俺が
 色々解説してみる
PDF
Rubyのエンコーディング
PDF
RでつくるWebアプリ~rApache編~
PDF
Openstack calendar20141222
クリップボード監視と外部コマンド実行 #chibapm
LinuxをインストールしてWebサーバーを立ち上げてみよう
Cent osにpyhtonをインストールしてみよう
04 これが(多分)最後! ベンチマークs
Sourcecode Reading Workshop2010
super_unkoをスーパーキレイにした
RでGPU使ってみた
あるコンテキストスイッチの話
R以外の研究ツール
20100717tobesetu
initramfsについて
Osc201703 tokyo-clonezilla-v1.2 j
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
systemdでよく使うサブコマンド
第66回関西Debian勉強会@KOF2012
2日間Fabricを触った俺が
 色々解説してみる
Rubyのエンコーディング
RでつくるWebアプリ~rApache編~
Openstack calendar20141222
Ad

Similar to 関西オープンソース 2008 30days Albumの裏側 (20)

PPTX
Cloudstack user group meeting in osaka
PPTX
できる!サーバレスアーキテクチャ
PPT
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
PDF
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PPTX
PHP on Cloud
PDF
SDLoader SeasarCon 2009 Whire
PPTX
HTML5&API総まくり
PDF
TripleOの光と闇
PDF
20190314 PGStrom Arrow_Fdw
PDF
ゲームのインフラをAwsで実戦tips全て見せます
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PDF
いまさら聞けないPostgreSQL運用管理
PPTX
HTML5最新動向
PDF
Djangoフレームワークの紹介
PDF
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
PDF
社内向けTech Talk資料~Fluentdの基本紹介~
PDF
コミュニティ運営とレンタルサーバ
PDF
Programming camp 2008, Codereading
PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Cloudstack user group meeting in osaka
できる!サーバレスアーキテクチャ
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PHP on Cloud
SDLoader SeasarCon 2009 Whire
HTML5&API総まくり
TripleOの光と闇
20190314 PGStrom Arrow_Fdw
ゲームのインフラをAwsで実戦tips全て見せます
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
いまさら聞けないPostgreSQL運用管理
HTML5最新動向
Djangoフレームワークの紹介
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
社内向けTech Talk資料~Fluentdの基本紹介~
コミュニティ運営とレンタルサーバ
Programming camp 2008, Codereading
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ad

More from Gosuke Miyashita (20)

PDF
Walter ファミリーの紹介 at Shibuya.go#1
PDF
Serverspec at Testing Framework Meeting
PPTX
Serverspec at July Tech Festa 2013
PPTX
Serverspec at hbstudy #45
PPTX
NoSQLに関するまとめ
PPTX
イベント駆動プログラミングとI/O多重化
PPTX
Maglica - A Simple Internal Cloud Tool at #techkayac
PPTX
DevOps とは何か 何であるべきか
PPTX
Inside Sqale's Backend at RubyConf Taiwan 2012
PPTX
Ia型超新星とチャンドラセカール限界
PPTX
How Perl Changed My Life
PPTX
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
PPTX
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
PPT
Assurer - a pluggable server testing/monitoring framework
PPTX
Open Source System Administration Framework - Func
PPTX
10分でわかるDevOps
PPTX
DevOpsって何?
PPTX
Puppetのススメ
PPT
Puppet Best Practices? at COOKPAD
PPT
How Danga::Socket handles asynchronous processing and how to write asynchrono...
Walter ファミリーの紹介 at Shibuya.go#1
Serverspec at Testing Framework Meeting
Serverspec at July Tech Festa 2013
Serverspec at hbstudy #45
NoSQLに関するまとめ
イベント駆動プログラミングとI/O多重化
Maglica - A Simple Internal Cloud Tool at #techkayac
DevOps とは何か 何であるべきか
Inside Sqale's Backend at RubyConf Taiwan 2012
Ia型超新星とチャンドラセカール限界
How Perl Changed My Life
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Assurer - a pluggable server testing/monitoring framework
Open Source System Administration Framework - Func
10分でわかるDevOps
DevOpsって何?
Puppetのススメ
Puppet Best Practices? at COOKPAD
How Danga::Socket handles asynchronous processing and how to write asynchrono...

関西オープンソース 2008 30days Albumの裏側

  • 1. 関西オープンソース 2008 (株) paperboy&co. 宮下 剛輔 2008/11/7
  • 2. アジェンダ 自己紹介 30days Album 紹介 サーバソフトウェアまわりの話 運用まわりの話
  • 3. 自己紹介 宮下 剛輔と申します (株) paperboy&co. で技術責任者というのをやってます ナウでヤングなレンタルサーバ ロリポップ!の会社です 個人的には mizzy.org の中の人 Perl プログラマの人 Puppet の人 ドクターペッパーの人
  • 4.  
  • 5.  
  • 6. 30days Album http://30d.jp/ オンラインアルバムサービス 30 日間限定 30 日経過すると閲覧できなくなる その後 10 日間アーカイブダウンロードができる 40 日経過後、完全に削除 合い言葉制 合い言葉を知ってる人だけ閲覧できる 合い言葉を知ってる人なら誰でも投稿できる シンプルなインターフェース あまりコンピュータ詳しくない人がターゲット
  • 7. 30days Album 誕生の経緯 社内プレゼン大会で優勝したアイデア プロジェクトキックオフ飲み会でホルモン喰いながらドメイン名( 30d.jp )を決定して即取得(もちろんムームードメインで) 開発合宿(お産合宿)で実装開始
  • 8. 30days Album の開発体制 デザイナ 1 人 開発 3 人 フロント Web アプリ ストレージ API ジョブサーバ API +ジョブワーカー サーバ周り 2人
  • 9.  
  • 10. 30days Album 全体構成 リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
  • 11.  
  • 12. リバースプロキシ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
  • 13. リバースプロキシ サービスの入り口 Perlbal Perl 製のリバースプロキシ / ロードバランサー Perl でプラグイン書いて機能拡張できる 2 台で DNS ラウンドロビン ウェブアプリと画像ストレージへの振り分け / 負荷分散 3 つの独自プラグイン SSL 接続か否かをウェブアプリへ通知 画像アクセスに対する認証 URL マッピング
  • 14. リバースプロキシ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース http://30d.jp/img へのアクセス http://30d.jp/img 以外へのアクセス
  • 15.  
  • 16. Web アプリ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
  • 17. Web アプリ サービスの中心部分 アルバム作成 / 閲覧 / 投稿 認証(メールアドレス / パスワード、合言葉) Ruby on Rails + lighttpd + FastCGI SWFUpload BackgrounDRb 表示用サムネイル生成 ジョブサーバへの画像処理ディスパッチ リサイズ ローテート アーカイブ
  • 18. なぜ Ruby on Rails なのか? うちは PHP がメイン 初の Ruby を使ったサービス なぜ Ruby なのか? それメインプログラマが Ruby 好きなので それだけです 開発者が一番好きな言語で開発するのがモチベーション向上には一番
  • 19.  
  • 20. 画像ストレージ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
  • 21. 画像ストレージ MogileFS + 独自のストレージ API MogileFS Perl 製の分散ストレージシステム 複数ノードへの自動振り分け 自動レプリケーション ストレージ API MogileFS は専用クライアントライブラリが必要 HTTP GET/PUT で画像の出し入れ Catalyst + lighttpd + FastCGI Conten-Type や Content-Length の管理
  • 22. ストレージ API + MogileFS ストレージ API tracker (mogilefsd) トラッカー DB (MySQL) storage node (mogstored) storage node (mogstored) ストレージ ノード (mogstored) トラッカー (mogilefsd) ファイルの実体 ファイルのメタデータ
  • 23. Perlbal 経由の画像取得(通常) ストレージ ノード ストレージ ノード Perlbal ストレージ API ストレージ ノード ファイルリクエスト ファイル取得 ファイルの内容を返す
  • 24. X-REPROXY-URL ヘッダ 画像の取得をストレージ API 経由でやるのは効率が悪い FastCGI プロセスを画像転送だけで占有してしまう そこで画像取得時に、画像データではなく、 X-REPROXY-URL ヘッダを Perlbal に返す ヘッダの値は MogileFS のストレージノード上にある、ファイルの実体を示す URL
  • 25. X-REPROXY-URL ヘッダを使う場合 ストレージ ノード ストレージ ノード Perlbal ストレージ API ストレージ ノード ファイルリクエスト X-REPROXY-URL: http://storage_node/dev1/0/000/... X-REPROXY-URL ヘッダをもとにファイル取得
  • 26. 画像ストレージのディスク構成 500GBx2 本 /boot は RAID1 swap, / は RAID1+LVM /data は LVM で 1 パーティションに見せ、大きく使う /boot swap / /data RAID1 /boot swap / /data RAID1+LVM LVM
  • 27. 画像ストレージのサーバ構成 リリース時はサーバ 2 台 API 、トラッカー( mogilefsd )、ストレージノード( mostored )が共存 MogileFS の機能により、 2 台のサーバは同じデータをストア ストレージ API mogilefsd mogstored ストレージ API mogilefsd mogstored
  • 28. 画像ストレージのサーバ構成 現在は 4 台 追加した 2 台はストレージノードとしての役割のみ アプリケーションの修正やサービスの再起動を全くせずに拡張できた ストレージ API mogilefsd mogstored ストレージ API mogilefsd mogstored mogstored mogstored
  • 29. 画像のアクセスコントロール Web アプリ 最初の認証は必ずここ メールアドレス / パスワード 合い言葉 認証後、セッションキーとアクセス可能なアルバムの相対 URL を memcached にセット リバースプロキシ Web アプリが memcached にセットした情報を元に、画像へのアクセスコントロールを実施
  • 30. 画像のアクセスコントロール Perlbal Web アプリ 画像ストレージ memcached 認証時に、セッションキーとアクセス可能なアルバム名をセット セッションキーを元に、アクセス可能なアルバム名を取得して、リクエストを許可 / 拒否 認証 画像取得
  • 31.  
  • 32. ジョブサーバ リバースプロキシ Web アプリ 画像ストレージ ジョブサーバ データベース
  • 33. ジョブサーバ Gearman + TheSchwartz +独自のジョブ API Gearman Perl でできたジョブキュー リアルタイム性が高い ステータス管理しない TheSchwartz Perl でできたジョブキュー MySQL でキューを管理 リアルタイム性が低い ステータス管理、リトライ ジョブ API Catalyst + lighttpd +FastCGI XMLRPC でジョブ処理を受け付け 後ろの Gearman, TheSchwartz へジョブ依頼
  • 34. ジョブサーバの構成 ジョブ API gearmand gearman worker TheSchwartz worker MySQL
  • 35. ジョブの種類 Gearman リアルタイム性の高い処理 アルバムを表すサムネイル 画像の回転 TheSchwartz リアルタイム性の低い処理 画像リサイズ アーカイブ作成
  • 36.  
  • 37. Ruby + memcached Ruby Memcache Client が、 memcached にデータをセットする際に、デフォルトで marshal する Perlbal で memcached からデータを取得すると、なんかゴミが入ってる オプションで marshal しないように設定して回避
  • 38. mogstored + lighttpd mogstored は WebDAV サーバ デフォルトは Perlbal がバックエンド 設定で Apache や lighttpd をバックエンドにすることができる Perlbal だと不安定で lighttpd に変更 mogstored で保存されるファイルは、ディレクトリが階層化されている /data/dev1/0/005/090/0000000012.fid
  • 39. mogstored + lighttpd (つづき) Perlbal がバックエンドの時は、存在しないディレクトリにファイルを PUT しても、勝手につくってくれる Apache や lighttpd の場合はエラーになる MogileFS::Client に手を入れて修正 PUT しようとするディレクトリの存在を確認し、存在しなければ MKCOL
  • 40. Perlbal の Out of memory リバースプロキシの Perlbal が頻繁に落ちる ログには Out of memory! のみ DEBUGGING オプションつけて Perl をコンパイル Danga::Socket の以下の行で発生してると判明 my $res = sysread($sock, $buf, $req_bytes, 0); $req_bytes を小さくして対応
  • 41.  
  • 42.  
  • 43. Puppet Ruby 製のシステム管理ツール クライアント / サーバ型 サーバの状態を独自言語で定義 マニフェストと呼ばれる マニフェストは Puppet サーバで一元管理 各サーバで Puppet クライアントを動かし、マニフェストを適用してサーバ構築や設定変更を行う
  • 44. Puppet マニフェスト package { ‘ MogileFS-Server’: ensure => present ; ‘ MogileFS-Server-mogilefsd’: ensure => present ; ‘ MogileFS-Server-mogstored’: ensure => present ; }
  • 45. Puppet の構成 Puppet サーバ (puppetmasterd) Puppet クライアント (puppetd) Puppet クライアント (puppetd) Puppet クライアント (puppetd) マニフェストの取得と適用 実行結果のレポート プロトコルは XMLRPC over HTTPS
  • 46. Puppet によるサーバ構築 OS インストール ネットワーク設定 Puppet インストール Puppet 実行 完了
  • 47. Puppet マニフェスト 独自の宣言型言語でサーバの状態を記述 プログラミング言語ほどの自由度はない 自由度がないぶん、人による差異が出にくい サーバの状態をテキスト形式で記述 Subversion 等で管理できる 誰がどういう変更を行ったのか、追跡しやすい
  • 48.  
  • 49. Archer Perl 製のデプロイツール Capistrano みたいなやつ モバイルファクトリの松野徳大さん (id:tokuhirom) が開発 プラグインで拡張が簡単 YAML で動作を定義
  • 50. Archer 設定ファイル tasks : init: - module: SVN::Update process: - module: Rsync - module: Exec::Remote config: command: /etc/init.d/lighttpd restart projects : days: storage_api: - storage1.30d.jp - storage2.30d.jp
  • 51. Archer の動作イメージ 対象サーバ 対象サーバ Subversion デプロイサーバ 対象サーバ ① archer.pl –c days.conf ② svn up ③ 前処理 ④ rsync ⑤ 対象サーバ上で後処理 ( SSH でコマンド実行)
  • 52. Days での Archer の使い方 プログラムのアップデート プログラム修正して svn co archer.pl –c program.conf Puppet マニフェストのアップデート マニフェストを修正して svn co archer.pl –c manifest.conf puppetmasterd の再起動も archer コマンド一発 独自 yum サーバ上の RPM パッケージアップデート パッケージをアップデートして svn co archer.pl –c yum.conf createrepo の実行も archer コマンド一発
  • 53.  
  • 54. OpenLDAP 社内で利用 SSH ログイン Subversion 認証 Trac 認証 30days Album でも利用 SSH ログイン Puppet ノード管理 社内の LDAP データと同期 独自の同期スクリプト
  • 55.  
  • 56. OpenSSH + LPK patch LDAP Public Key patch $HOME/.ssh/authorized_keys の代わりに、 LDAP 内の sshPublicKey 属性を参照 各サーバに authorized_keys を配布しなくても、 SSH の公開鍵認証ができる
  • 57. LPK patch 用 LDIF dn: uid=mizzy, ou=people, o=paperboy objectclass : ldapPublicKey sshPublicKey : ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIB3dsrwq XqD7E4zYYrxwdDKBUQxKMioXy9pxFVai64k APxjU9KSqIo7QfkjslfsjflksjfldfkjsldfjLX/5zkzR mT28I5piGzunPv17S89z8XwSsuAoR1t86t+5 dlI7eZE/gVbn2UQkQq7+kdDTS2yXV6VnC52 N/kKLG3ciBkBAw==
  • 58.