29
http://www.flickr.com/photos/jonathanbeard/3307862620/ ここからは サーバ・理を 化するをします 大化するピグライフをえるインフラ 〜MongoDBとChefについて〜 (後編) ()サイバーエージェント 並河 祐 (@namikawa, id:rx7)

大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

Embed Size (px)

DESCRIPTION

Developers Summit 2012 【16-C-2】

Citation preview

Page 1: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ここからはサーバ増設・管理を

効率化する話をします

大規模化するピグライフを支えるインフラ〜MongoDBとChefについて〜 (後編)

(株)サイバーエージェント並河 祐貴 (@namikawa, id:rx7)

Page 2: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

自己紹介自己紹介� 並河 祐貴 (a.k.a. id:rx7)

� (株)サイバーエージェント所属� 主にインフラエンジニア� Blog: http://d.hatena.ne.jp/rx7/� Twitter: @namikawa

� 著書・寄稿多数

New!

Page 3: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

最近、割とよくある光景

Page 4: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

○△の負荷がパないので、

Page 5: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

サーバを30台増設するしかない。

Page 6: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

来週までに。

Page 7: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

(((( ;゚Д゚)))ガクガクブルブル

Page 8: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

アメーバピグ・ピグライフの規模感アメーバピグ・ピグライフの規模感� アメーバピグ

�サーバ台数: 約220台 (⇒ 150台まで削減予定)�Web/APサーバ40台�Socketサーバ75台�DB(MySQL+FIO)サーバ6台 x 2(スタンバイ)�API, Hadoop Cluster, Mobile, Smart Phone...�etc...

� ピグライフ�サーバ台数: 約240台

�Socket(node.js)サーバ60台、�DB(MongoDB)サーバ150台�Statサーバ20台�etc...

Page 9: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

ピグのサーバ増設・運⽤管理ピグのサーバ増設・運⽤管理� サービス・システム規模、共に右肩上がり

� 急な増設を求められることもあります�ビッグイベントにあわせて30台入れちゃうとか�想定を超えるスピードでサービスが成⻑するとか

� そこで「Chef」を使ってみました

Page 10: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

それ、クラウド使ったらでk(ry

クラウドも、運⽤を効率化する1要素

ミドルウェアの設定管理や、プロセスの状態管理も含めて今回は「Chef」で自動化する話をします

Page 11: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

1. Chefの概要

Page 12: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

「「ChefChef」とは」とは� サーバの構築作業やシステム管理のツール

�システムのあるべき状態を設定する� オープンソース、Ruby製

� 利⽤実績� 37signals� Engine Yard�Rackspace hosting� etc…

Page 13: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

サーバ構築・システム管理自動化の必要性サーバ構築・システム管理自動化の必要性

� 手作業では、そもそも時間がかかる�数十台、数百台のレベルになると・・・�同じ役割のサーバごとに環境差異が発⽣したりとか

サーバ投入までのリードタイムが⻑くなることで機会損失を発⽣させることは避けたい

運⽤中のサーバでのミスは特に無くしたい設定に間違いがあっても自動化しておく事で即修正可能

� 人為的なミスを抑えたい�作業漏れ、ルーチン作業でのオペミス�作業者によって、スキルにバラつき

Page 14: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/photomequickbooth/4062072718/

それ、シェルスクリプトでよくね?それ、シェルスクリプトでよくね?� Chefでは内部DSLを採⽤

�管理タスクの品質をできるだけ揃えつつ、Rubyでの柔軟な記述ができる

� プラットフォームの差異が吸収できる�ディストリビューションによってコマンドに差異� yumとaptとか

� サーバの状態が記述できるフレームワーク

Page 15: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefのシステムアーキテクチャのシステムアーキテクチャ

� Ruby� Merb(Rack)� CouchDB� Solr� RabbitMQ� (Java)� (Erlang)� HTTP(REST)� JSON

Chef-Server

API

Chef-Server

WebUI

RabbitMQ

CouchDB Solr

Chef-Solr

Indexer

Chef-ClientChef-ClientChef-Client Knife

Client

Page 16: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefでのでの””主な主な””登場人物登場人物� Node� Role� Cookbook

�Recipe�Template�Attribute

時間の都合上、基本を簡単にご紹介します

Page 17: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

NodeNode, , RoleRole, , CookbookCookbook のの関連関連((例例))

サーバA

サーバB

サーバC

nginxのCookbook

PassengerのCookbook

RubyのCookbook

gitのCookbook

APサーバのRole

Node Role Cookbook

管理対象のサーバ

管理対象のグルーピング

システムのあるべき形を定義する設定

Page 18: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefのリポジトリ構造のリポジトリ構造 (Cookbook)(Cookbook)cookbooks/

|-- attributes|-- definitions|-- files|-- libraries|-- providers|-- recipes|-- resources`-- templates

設定したいパラメータ(各サーバ固有のものやデフォルト値など)

を記述したもの

システムのあるべき姿、つまり設定内容を実際に記載したRubyスクリプト

サーバへ配置する設定ファイルのテンプレートで、eRubyで記述する

Page 19: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

RecipeRecipe、、TemplateTemplateの⼀例の⼀例

package "apache2" doaction :install

end

template "/etc/apache2/ports.conf" dosource "ports.conf.erb"owner "root"group "root"mode 0644variables(:port => node[:port]

)end

service "apache2" doaction [ :enable, :start ]

end

Listen <%= port %>NameVirtualHost *:<%=port %>

default[:port] = “8080"

./recipe/default.rb ./templates/default/ports.conf.erb

./attributes/default.rb

node A Chef-Server

“node A”の情報を保持[Node Attribute],

[Run List] 等

chef-client実⾏

“port”:”80”

実⾏するrecipeの設定

Page 20: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefで利⽤できるで利⽤できるResourceResource� Cookbook File� Cron� Deploy� Directory� Erlang Call� Execute� File� Git� Group� HTTP Request� Ifconfig� Link� Log� Mdadm

� Mount� Ohai� Package� PowerShell Script� Remote Directory� Remote File� Route� Ruby Block� SCM� Script� Service� Subversion� Template� User

Page 21: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/photomequickbooth/4062072718/

ChefChefのちょっとイケのちょっとイケてていないところいないところ� サーバのセットアップが面倒くさい

�必要なのは最初だけなので、許容できる�クライアントは簡単

� 名前がSEO的に致命的�Chef, Cookbook, Recipe, knife...�リアルに調べ物をする時に困ります

� dry-runができない�テスト環境が必須 (クラウド・仮想化が最適)

Page 22: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

2. Chefの運⽤

Page 23: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefを活⽤したサーバ増設を活⽤したサーバ増設� PXE + kickstart + Chef

1. 事前に chef-server 側でNodeの設定が必要2. サーバに線を繋ぎ電源ON、PXEブート開始3. Label No.とNode名を入⼒し、OSインストール開始4. 同時に chef-client のインストールと設定5. kickstart の %post でchef-clientを実⾏

kickstartのcfgファイル

通常のOSインストールタスク

chef-clientのインストール

chef-clientの実⾏

chef-clientの設定

client

Chef-Server

通信PXE+ksサーバ

通信OSインストール後は直接通信

Page 24: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefを活⽤したサーバ増設を活⽤したサーバ増設� 今はオンプレミスな物理環境を想定

� クラウド環境でも応⽤可能� EC2だと、事前にAMIを作成しておいて、user-dataに

Node名を指定して...� (弊社のOpenStackクラウド基盤を活⽤したい)

Page 25: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

CookbookCookbookの使い方の使い方� Cookbookの例

�ネットワーク設定 (拠点毎)�H/Wに必要な設定

�主にH/W固有で必要なドライバやRAIDチェックスクリプト等�各サーバ共通で必要な設定

�DNS, NTP, LDAP, 監視ライブラリ, 鍵交換等�各Roleで必要な設定

{"run_list": ["recipe[common::default]","recipe[service-common::pigglife]","recipe[pigglife-mongodb::default]"

]}

{"run_list": ["recipe[network::xxxxx]","recipe[hw::dell_r310]",“role[pigglife-mongodb]"

]}

NodeへのCookbook設定例 RoleへのCookbook設定例

Page 26: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefを使う上でやっていることを使う上でやっていること� Script Resource は基本的に使わない

�何度でも実⾏される� chef-client実⾏時のチェック・運⽤が面倒�何度実⾏しても問題ないものしか使わない

script “script_name" dointerpreter "bash"user “username"creates comp_dir + “script_name.done"code <<-EOHcommand............

EOHend

こんな感じで書いていました

Page 27: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

ChefChefを使う上でやっていることを使う上でやっていること� 各nodeのChef適⽤は、chef-clientを実⾏

� tomahawk: 複数のサーバで同じコマンドを実⾏� “knife ssh”, “knife ssh_cheto” を使いたい

� NodeのAttributeの登録� JSONファイルを自動⽣成して登録

� アンインストール・削除等の処理も忘れずに

� Environment(0.10〜)の活⽤� development, staging, productionの分別

Page 28: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

http://www.flickr.com/photos/jonathanbeard/3307862620/

まとめと今後の展望まとめと今後の展望� Chefを活⽤することで多くのサーバの増設・管理

にかかる負担を軽減�あるべき状態に自動で設定・維持できる�ルールを少し覚えれば、誰でも簡単に設定が書ける�内部DSLなので、Rubyを覚えれば処理も柔軟に書ける

� クラウド等の基盤サービスと連携して、インフラ構築/運⽤の完全オートメーションができる仕組みにしたい

Page 29: 大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)

最後に宣伝です最後に宣伝です� サイバーエージェントでは、ただいまエンジニア

を大絶賛募集中です!

�大規模サービスに取り組みたい方

�新しい技術を実戦で試していきたい方

�新規事業・サービスで腕を試したい方