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

39,287 views
39,392 views

Published on

Developers Summit 2012 【16-C-2】

Published in: Technology

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

  1. 1. 大規模化するピグライフを支えるインフラ 〜MongoDBとChefについて〜 (後編) ここからは サーバ増設・管理を 効率化する話をします (株)サイバーエージェント 並河 祐貴 (@namikawa, id:rx7)http://www.flickr.com/photos/jonathanbeard/3307862620/
  2. 2. 自己紹介並河 祐貴 (a.k.a. id:rx7)(株)サイバーエージェント所属主にインフラエンジニアBlog: http://d.hatena.ne.jp/rx7/Twitter: @namikawa New!著書・寄稿多数
  3. 3. 最近、割とよくある光景
  4. 4. ○△の負荷がパないので、
  5. 5. サーバを30台増設するしかない。
  6. 6. 来週までに。
  7. 7. (((( ;゚Д゚)))ガクガクブルブル
  8. 8. アメーバピグ・ピグライフの規模感アメーバピグ サーバ台数: 約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...
  9. 9. ピグのサーバ増設・運⽤管理サービス・システム規模、共に右肩上がり急な増設を求められることもあります ビッグイベントにあわせて30台入れちゃうとか 想定を超えるスピードでサービスが成⻑するとかそこで「Chef」を使ってみました
  10. 10. それ、クラウド使ったらでk(ry クラウドも、運⽤を効率化する1要素ミドルウェアの設定管理や、プロセスの状態管理も 含めて今回は「Chef」で自動化する話をします
  11. 11. 1. Chefの概要http://www.flickr.com/photos/jonathanbeard/3307862620/
  12. 12. 「Chef」とは Chef」とは サーバの構築作業やシステム管理のツール システムのあるべき状態を設定する オープンソース、Ruby製 利⽤実績 37signals Engine Yard Rackspace hosting etc…http://www.flickr.com/photos/jonathanbeard/3307862620/
  13. 13. サーバ構築・システム管理自動化の必要性 手作業では、そもそも時間がかかる 数十台、数百台のレベルになると・・・ 同じ役割のサーバごとに環境差異が発⽣したりとか サーバ投入までのリードタイムが⻑くなることで 機会損失を発⽣させることは避けたい 人為的なミスを抑えたい 作業漏れ、ルーチン作業でのオペミス 作業者によって、スキルにバラつき 運⽤中のサーバでのミスは特に無くしたい 設定に間違いがあっても自動化しておく事で即修正可能http://www.flickr.com/photos/jonathanbeard/3307862620/
  14. 14. それ、シェルスクリプトでよくね? Chefでは内部DSLを採⽤ 管理タスクの品質をできるだけ揃えつつ、Rubyでの柔 軟な記述ができる プラットフォームの差異が吸収できる ディストリビューションによってコマンドに差異 yumとaptとか サーバの状態が記述できるフレームワークhttp://www.flickr.com/photos/photomequickbooth/4062072718/
  15. 15. Chefのシステムアーキテクチャ Chefのシステムアーキテクチャ Ruby CouchDB Solr Merb(Rack) CouchDB Chef-Solr Indexer Solr RabbitMQ Chef-Server RabbitMQ (Java) API (Erlang) Chef-Server HTTP(REST) WebUI JSON Chef-Client Chef-Client Knife Chef-Client Clienthttp://www.flickr.com/photos/jonathanbeard/3307862620/
  16. 16. Chefでの”主な” Chefでの”主な”登場人物 Node Role Cookbook Recipe Template Attribute 時間の都合上、基本を簡単にご紹介しますhttp://www.flickr.com/photos/jonathanbeard/3307862620/
  17. 17. Node, Role, Node, Role, Cookbook の関連(例) 関連( nginxのCookbook サーバA APサーバの Passengerの Role Cookbook サーバB RubyのCookbook サーバC gitのCookbook Node Role Cookbook 管理対象の 管理対象の システムのあるべき形を サーバ グルーピング 定義する設定http://www.flickr.com/photos/jonathanbeard/3307862620/
  18. 18. Chefのリポジトリ構造 Chefのリポジトリ構造 (Cookbook) cookbooks/ 設定したいパラメータ(各サーバ 固有のものやデフォルト値など) |-- attributes を記述したもの |-- definitions |-- files |-- libraries システムのあるべき姿、 |-- providers つまり設定内容を実際に 記載したRubyスクリプト |-- recipes |-- resources `-- templates サーバへ配置する設定ファイルの テンプレートで、eRubyで記述するhttp://www.flickr.com/photos/jonathanbeard/3307862620/
  19. 19. Recipe、Templateの⼀例 Recipe、Templateの⼀例 ./recipe/default.rb ./templates/default/ports.conf.erb package "apache2" do Listen <%= port %> action :install NameVirtualHost *:<%=port %> end template "/etc/apache2/ports.conf" do source "ports.conf.erb" ./attributes/default.rb owner "root" default[:port] = “8080" group "root" mode 0644 variables( :port => node[:port] ) end “port”:”80” “node A”の情報を保持 [Node Attribute], service "apache2" do [Run List] 等 action [ :enable, :start ] 実⾏するrecipeの設定 end chef-client node A 実⾏ Chef-Serverhttp://www.flickr.com/photos/jonathanbeard/3307862620/
  20. 20. Chefで利⽤できるResource Chefで利⽤できるResource Cookbook File Mount Cron Ohai Deploy Package Directory PowerShell Script Erlang Call Remote Directory Execute Remote File File Route Git Ruby Block Group SCM HTTP Request Script Ifconfig Service Link Subversion Log Template Mdadm Userhttp://www.flickr.com/photos/jonathanbeard/3307862620/
  21. 21. Chefのちょっとイケて Chefのちょっとイケていないところ サーバのセットアップが面倒くさい 必要なのは最初だけなので、許容できる クライアントは簡単 名前がSEO的に致命的 Chef, Cookbook, Recipe, knife... リアルに調べ物をする時に困ります dry-runができない テスト環境が必須 (クラウド・仮想化が最適)http://www.flickr.com/photos/photomequickbooth/4062072718/
  22. 22. 2. Chefの運⽤http://www.flickr.com/photos/jonathanbeard/3307862620/
  23. 23. Chefを活⽤したサーバ増設 Chefを活⽤したサーバ増設 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 インストールタスク 通信 client PXE+ksサーバ chef-clientのインストール OSインストール後 通信 chef-clientの設定 は直接通信 chef-clientの実⾏ Chef-Serverhttp://www.flickr.com/photos/jonathanbeard/3307862620/
  24. 24. Chefを活⽤したサーバ増設 Chefを活⽤したサーバ増設 今はオンプレミスな物理環境を想定 クラウド環境でも応⽤可能 EC2だと、事前にAMIを作成しておいて、user-dataに Node名を指定して... (弊社のOpenStackクラウド基盤を活⽤したい)http://www.flickr.com/photos/jonathanbeard/3307862620/
  25. 25. Cookbookの使い方 Cookbookの使い方 Cookbookの例 ネットワーク設定 (拠点毎) H/Wに必要な設定 主にH/W固有で必要なドライバやRAIDチェックスクリプト等 各サーバ共通で必要な設定 DNS, NTP, LDAP, 監視ライブラリ, 鍵交換等 各Roleで必要な設定 NodeへのCookbook設定例 RoleへのCookbook設定例 { { "run_list": [ "run_list": [ "recipe[network::xxxxx]", "recipe[common::default]", "recipe[hw::dell_r310]", "recipe[service-common::pigglife]", “role[pigglife-mongodb]" "recipe[pigglife-mongodb::default]" ] ] } }http://www.flickr.com/photos/jonathanbeard/3307862620/
  26. 26. Chefを使う上でやっていること Chefを使う上でやっていること Script Resource は基本的に使わない 何度でも実⾏される chef-client実⾏時のチェック・運⽤が面倒 何度実⾏しても問題ないものしか使わない こんな感じで書いていました script “script_name" do interpreter "bash" user “username" creates comp_dir + “script_name.done" code <<-EOH command ...... ...... EOH endhttp://www.flickr.com/photos/jonathanbeard/3307862620/
  27. 27. Chefを使う上でやっていること Chefを使う上でやっていること 各nodeのChef適⽤は、chef-clientを実⾏ tomahawk: 複数のサーバで同じコマンドを実⾏ “knife ssh”, “knife ssh_cheto” を使いたい NodeのAttributeの登録 JSONファイルを自動⽣成して登録 アンインストール・削除等の処理も忘れずに Environment(0.10〜)の活⽤ development, staging, productionの分別http://www.flickr.com/photos/jonathanbeard/3307862620/
  28. 28. まとめと今後の展望 Chefを活⽤することで多くのサーバの増設・管理 にかかる負担を軽減 あるべき状態に自動で設定・維持できる ルールを少し覚えれば、誰でも簡単に設定が書ける 内部DSLなので、Rubyを覚えれば処理も柔軟に書ける クラウド等の基盤サービスと連携して、インフラ 構築/運⽤の完全オートメーションができる仕組 みにしたいhttp://www.flickr.com/photos/jonathanbeard/3307862620/
  29. 29. 最後に宣伝ですサイバーエージェントでは、ただいまエンジニアを大絶賛募集中です! 大規模サービスに取り組みたい方 新しい技術を実戦で試していきたい方 新規事業・サービスで腕を試したい方

×