- DevLove Conference 2012 -Chefを利⽤した運⽤省⼒化とDevOpsの取り組みについて                       並河 祐貴 (Yuuki NAMIKAWA)                    ...
自己紹介並河 祐貴 (a.k.a. id:rx7)(株)サイバーエージェント所属エンジニアBlog: http://d.hatena.ne.jp/rx7/Twitter: @namikawa著書・寄稿多数                    ...
これまでのキャリア海岸沿いのSIer (2004〜2008) 先端技術調査・導入(R&D)、現場PJ支援(SI) 社内システム企画・運用、社内教育SonicGarden (2008〜2010) B2B/B2C向けWebサービス、クラウド導入支援...
今日の話は・・・弊社のサービスとそれらの運用について 最近のアメーバピグのシステム構成とか DevOpsの話はあまりしません ごめんなさいChefを利用したプログラマブルなシステム基盤 実際に使ってどうだったか    つまり主に「Chef」の話...
アメーバピグ (Ameba Pigg)                      5
アメーバピグ (Ameba Pigg) アバター仮想空間サービス  きせかえ、おでかけ、ゲーム  – カジノ、つり、ライフ(庭)、アイランド(島)、カフェ(店)、    ワールド(街) ユーザ数  1300万人 (2012/09, Amebaユ...
アメーバピグのアーキテクチャ                                                    Other...       HTTP                       WebUser   TCP ...
これまでの(主にシステムの)変遷本体(アバターサービス)だけでも・・・ 自作サーバ導入 DBにFusion-ioのハードウェアを採用 Chefの導入 ネットワーク回線・LBの統合 データセンター移設 2系統化によるメンテナンス時間短縮     ...
ピグでのシステム運用スタイル職種は一応存在する アプリエンジニア(Dev?) インフラエンジニア(Ops?)...チーム・体制 各施策ごとに機能開発を担当するチーム 非機能部分(性能・安定・効率化)を担当するチーム基本的にシステム運用は全員プレ...
システム運用する上で運用改善の過程でツールによる作業効率化 アプリケーションのデプロイ サーバを増設する 設定変更を反映する ...etcアプリ/インフラ双⽅の協⼒が必要 セットアップ、パフォーマンスチューニング、トラブ ルシューティング......
少し昔の話        11
僕が今の会社に入って一番最初にやった仕事             12
ピグのWeb/APサーバを3台増設その時に渡された手順書(1台分)                    13
14
アメーバピグの規模感アメーバピグ サーバ台数: 約270台 –   Web/APサーバ40台、Socketサーバ70台 –   DB(MySQL+FIO)サーバ6台 x 2(スタンバイ) –   API, Storage, Hadoop Clu...
1000台規模のサーバ群DCは3箇所に分散 ⇒ 1箇所へ集約中ほぼ物理サーバ + 一部社内クラウド + CDN 次は、パブリッククラウドも監視はmon + munin monにはかなり限界を感じているのでリプレースを検 討中...全サーバを「C...
ピグのサーバ増設・運用管理サービス・システム規模、共に右肩上がり急な増設を求められることもあります ビッグイベントにあわせて30台入れちゃうとか 想定を超えるスピードでサービスが成⻑するとか数十台のサーバに同じ設定を入れたりもそこで「Chef」...
それ、クラウド使ったらでk(ry   クラウドも、運用を効率化する1要素ミドルウェアの設定管理や、プロセスの状態管理も 含めて今回は「Chef」で自動化する話をします                           18
Chefの概要http://www.flickr.com/photos/jonathanbeard/3307862620/   19
「Chef」とは            サーバの構築作業やシステム管理のツール                  システムのあるべき状態を設定する            オープンソース、Ruby製            利用実績        ...
サーバ構築・システム管理自動化の必要性             手作業では、そもそも時間がかかる                   数十台、数百台のレベルになると・・・                   同じ役割のサーバごとに環境差異が発⽣...
それ、シェルスクリプトでよくね?           サーバの状態が記述できるフレームワーク                  基本的なタスクが備わっている                  管理タスクの品質をできるだけ揃える         ...
Chefのシステムアーキテクチャ                                                                                 Ruby                     ...
Chefでの”主な”登場人物            Node            Role            Cookbook                  Recipe                  Template      ...
Node, Role, Cookbook の関連(例)                                                                  nginxのCookbook             サー...
Chefのリポジトリ構造 (Cookbook)      cookbooks/                                         設定したいパラメータ(各サーバ                           ...
Recipe、Templateの一例      ./recipe/default.rb                                ./templates/default/ports.conf.erb       packag...
Chefで利用できるResource              Cookbook File                              Mount              Cron                        ...
Chefのちょっとイケていないところ           サーバのセットアップが面倒くさい                  サーバセットアップは最初だけなので許容できる                  Ubuntuだと割と楽かも。クライアン...
Chefの運用http://www.flickr.com/photos/jonathanbeard/3307862620/   30
Chefを活用したサーバ増設            PXE + kickstart + Chef             1.      事前に chef-server 側でNodeの設定が必要             2.      サーバに...
Kickstartでの %post スクリプト      1.      Chef Clientのインストール      2.      /etc/chef/client.rb の配置      3.      “node_name”を取得・上...
Chefを活用したサーバ増設            今はオンプレミスな物理環境を想定            クラウド環境でも応用可能                  EC2だと、事前にAMIを作成しておいて、user-dataに       ...
Cookbookの使い⽅            Cookbookの例                  ネットワーク設定                  H/Wに必要な設定                     – 主にH/W固有で必要なド...
Chefを使う上でやっていること            Script Resource は基本的に使わない                  何度でも実⾏される                  chef-client実⾏時のチェック・運用が面...
Chefを使う上でやっていること            各nodeのChef適用は、chef-clientを実⾏                  tomahawk: 複数のサーバで同じコマンドを実⾏                  “kni...
Chefを使う上でやっていること            verbose_logging false                  デフォルトではInfoログが出過ぎる                  影響のあった変更処理のみロギング   ...
Chefを運用する上での課題            Recipeが正しいことを保障するには?                  仮想マシン等を活用してテスト                     – VirtualBoxの制御ができるVagr...
Cookbookでのコミュニケーション            セットアップ手順のチェックをRecipe            (Cookbook)という名のコードベースで                  DevとOpsのクロスチェック    ...
これからChefを勉強する⽅へ            chef-solo が便利                  chef-server を必要とせず、ローカルにCookbookを                  適用できる        ...
まとめと今後の展望            Chefを活用することで多くのサーバの増設・管理            にかかる負担を軽減                  あるべき状態に自動で設定・維持できる                  ルー...
Chefでサーバ管理の省⼒化            をはじめてみませんか?http://www.flickr.com/photos/jonathanbeard/3307862620/   42
Upcoming SlideShare
Loading in …5
×

Chefを利用した運用省力化とDevOpsの取り組みについて

14,158 views

Published on

DevLOVE Conference 2012

Published in: Technology
0 Comments
45 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,158
On SlideShare
0
From Embeds
0
Number of Embeds
6,868
Actions
Shares
0
Downloads
151
Comments
0
Likes
45
Embeds 0
No embeds

No notes for slide

Chefを利用した運用省力化とDevOpsの取り組みについて

  1. 1. - DevLove Conference 2012 -Chefを利⽤した運⽤省⼒化とDevOpsの取り組みについて 並河 祐貴 (Yuuki NAMIKAWA) id:rx7 / @namikawa 1
  2. 2. 自己紹介並河 祐貴 (a.k.a. id:rx7)(株)サイバーエージェント所属エンジニアBlog: http://d.hatena.ne.jp/rx7/Twitter: @namikawa著書・寄稿多数 2
  3. 3. これまでのキャリア海岸沿いのSIer (2004〜2008) 先端技術調査・導入(R&D)、現場PJ支援(SI) 社内システム企画・運用、社内教育SonicGarden (2008〜2010) B2B/B2C向けWebサービス、クラウド導入支援 企画/営業/PR/サービス構築/運用/顧客サポートCyberAgent (2010〜) Webサービス構築/運用/いわゆるマネジメント 3
  4. 4. 今日の話は・・・弊社のサービスとそれらの運用について 最近のアメーバピグのシステム構成とか DevOpsの話はあまりしません ごめんなさいChefを利用したプログラマブルなシステム基盤 実際に使ってどうだったか つまり主に「Chef」の話をしに来ました! 4
  5. 5. アメーバピグ (Ameba Pigg) 5
  6. 6. アメーバピグ (Ameba Pigg) アバター仮想空間サービス きせかえ、おでかけ、ゲーム – カジノ、つり、ライフ(庭)、アイランド(島)、カフェ(店)、 ワールド(街) ユーザ数 1300万人 (2012/09, Amebaユーザの約半数) トラフィック (アバター/ゲーム) 約7〜8Gbps / ピーク帯 同時接続ユーザ数 (アバター/ゲーム) 約40万ユーザ / ピーク帯 6
  7. 7. アメーバピグのアーキテクチャ Other... HTTP WebUser TCP memcached Socket (or none) Socket (Java or node.js...) アバターサービスとゲームで DB 実装言語やミドルウェアは (MySQL or MongoDB...) 異なりますが、基本的な構成は 同一となります。 7
  8. 8. これまでの(主にシステムの)変遷本体(アバターサービス)だけでも・・・ 自作サーバ導入 DBにFusion-ioのハードウェアを採用 Chefの導入 ネットワーク回線・LBの統合 データセンター移設 2系統化によるメンテナンス時間短縮 8
  9. 9. ピグでのシステム運用スタイル職種は一応存在する アプリエンジニア(Dev?) インフラエンジニア(Ops?)...チーム・体制 各施策ごとに機能開発を担当するチーム 非機能部分(性能・安定・効率化)を担当するチーム基本的にシステム運用は全員プレイ モニタリングも 障害対応も リリースやサーバ設定も 当番はありますが、基本的にエンジニア全員で担当します 9
  10. 10. システム運用する上で運用改善の過程でツールによる作業効率化 アプリケーションのデプロイ サーバを増設する 設定変更を反映する ...etcアプリ/インフラ双⽅の協⼒が必要 セットアップ、パフォーマンスチューニング、トラブ ルシューティング... DevとOpsで作業の境界は一切設けていないです タッグを組まないと解決できない課題が多数 10
  11. 11. 少し昔の話 11
  12. 12. 僕が今の会社に入って一番最初にやった仕事 12
  13. 13. ピグのWeb/APサーバを3台増設その時に渡された手順書(1台分) 13
  14. 14. 14
  15. 15. アメーバピグの規模感アメーバピグ サーバ台数: 約270台 – Web/APサーバ40台、Socketサーバ70台 – DB(MySQL+FIO)サーバ6台 x 2(スタンバイ) – API, Storage, Hadoop Cluster, Mobile, Smart Phone – Auth, Ranking, Backup etcピグライフ サーバ台数: 約280台 – Socket(node.js)サーバ80台、DB(MongoDB)サーバ150台 – Statサーバ20台、Log管理・解析、Smart Phone…etcピグアイランド・ピグカフェ・ピグワールド ライフとほぼ同等のシステム構成 サーバ台数は、3サービスで約440台 (テスト環境もあわせると) サーバ台数は、ざっと1000台超の規模 15
  16. 16. 1000台規模のサーバ群DCは3箇所に分散 ⇒ 1箇所へ集約中ほぼ物理サーバ + 一部社内クラウド + CDN 次は、パブリッククラウドも監視はmon + munin monにはかなり限界を感じているのでリプレースを検 討中...全サーバを「Chef」で管理 16
  17. 17. ピグのサーバ増設・運用管理サービス・システム規模、共に右肩上がり急な増設を求められることもあります ビッグイベントにあわせて30台入れちゃうとか 想定を超えるスピードでサービスが成⻑するとか数十台のサーバに同じ設定を入れたりもそこで「Chef」を使ってみました 17
  18. 18. それ、クラウド使ったらでk(ry クラウドも、運用を効率化する1要素ミドルウェアの設定管理や、プロセスの状態管理も 含めて今回は「Chef」で自動化する話をします 18
  19. 19. Chefの概要http://www.flickr.com/photos/jonathanbeard/3307862620/ 19
  20. 20. 「Chef」とは サーバの構築作業やシステム管理のツール システムのあるべき状態を設定する オープンソース、Ruby製 利用実績 37signals Engine Yard Rackspace hosting etc…http://www.flickr.com/photos/jonathanbeard/3307862620/ 20
  21. 21. サーバ構築・システム管理自動化の必要性 手作業では、そもそも時間がかかる 数十台、数百台のレベルになると・・・ 同じ役割のサーバごとに環境差異が発⽣したりとか サーバ投入までのリードタイムが⻑くなることで 機会損失を発⽣させることは避けたい 人為的なミスを抑えたい 作業漏れ、ルーチン作業でのオペミス 作業者によって、スキルにバラつき 運用中のサーバでのミスは特に無くしたい 設定に間違いがあっても自動化しておく事で即修正可能http://www.flickr.com/photos/jonathanbeard/3307862620/ 21
  22. 22. それ、シェルスクリプトでよくね? サーバの状態が記述できるフレームワーク 基本的なタスクが備わっている 管理タスクの品質をできるだけ揃える Chefでは内部DSLを採用 Rubyでの柔軟な記述ができる プラットフォームの差異が吸収できる ディストリビューションによってコマンドに差異 yumとaptとかhttp://www.flickr.com/photos/photomequickbooth/4062072718/ 22
  23. 23. 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/ 23
  24. 24. Chefでの”主な”登場人物 Node Role Cookbook Recipe Template Attribute 時間の都合上、基本を簡単にご紹介しますhttp://www.flickr.com/photos/jonathanbeard/3307862620/ 24
  25. 25. 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/ 25
  26. 26. Chefのリポジトリ構造 (Cookbook) cookbooks/ 設定したいパラメータ(各サーバ 固有のものやデフォルト値など) |-- attributes を記述したもの |-- definitions |-- files |-- libraries システムのあるべき姿、 |-- providers つまり設定内容を実際に 記載したRubyスクリプト |-- recipes |-- resources `-- templates サーバへ配置する設定ファイルの テンプレートで、eRubyで記述するhttp://www.flickr.com/photos/jonathanbeard/3307862620/ 26
  27. 27. 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/ 27
  28. 28. 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/ 28
  29. 29. Chefのちょっとイケていないところ サーバのセットアップが面倒くさい サーバセットアップは最初だけなので許容できる Ubuntuだと割と楽かも。クライアントは簡単 名前がSEO的に致命的 Chef, Cookbook, Recipe, knife... リアルに調べ物をする時に困ります (dry-runができない) テスト環境が必須 (クラウド・仮想化が最適) 10.14系から利用可能に!http://www.flickr.com/photos/photomequickbooth/4062072718/ 29
  30. 30. Chefの運用http://www.flickr.com/photos/jonathanbeard/3307862620/ 30
  31. 31. 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/ 31
  32. 32. Kickstartでの %post スクリプト 1. Chef Clientのインストール 2. /etc/chef/client.rb の配置 3. “node_name”を取得・上記ファイルに設定 4. /etc/chef/validation.pemを配置 5. chef-clientコマンドを実⾏ 実際のOSインストール時にPXE Boot時に⼊⼒するラベル例 boot: 1 node=chef-test01http://www.flickr.com/photos/jonathanbeard/3307862620/ 32
  33. 33. Chefを活用したサーバ増設 今はオンプレミスな物理環境を想定 クラウド環境でも応用可能 EC2だと、事前にAMIを作成しておいて、user-dataに Node名を指定して... (弊社のOpenStackクラウド基盤を活用)http://www.flickr.com/photos/jonathanbeard/3307862620/ 33
  34. 34. Cookbookの使い⽅ Cookbookの例 ネットワーク設定 H/Wに必要な設定 – 主にH/W固有で必要なドライバやRAIDチェックスクリプト等 各サーバ共通で必要な設定 – DNS, NTP, LDAP, 監視ライブラリ, 鍵交換等 各Roleで必要な設定 NodeへのCookbook設定例 RoleへのCookbook設定例 { { "run_list": [ "run_list": [ "recipe[network::xxxxx]", "recipe[ameba-common::pigglife]", "recipe[hw::dell_r310]", "recipe[pigglife-mongodb::mongod]" “role[pigglife-mongodb]" ] ] } }http://www.flickr.com/photos/jonathanbeard/3307862620/ 34
  35. 35. 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/ 35
  36. 36. Chefを使う上でやっていること 各nodeのChef適用は、chef-clientを実⾏ tomahawk: 複数のサーバで同じコマンドを実⾏ “knife ssh”, “knife ssh_cheto” 等も NodeのAttributeの登録 JSONファイルを自動⽣成して登録・バージョン管理 RoleもJSONファイル形式でバージョン管理 アンインストール・削除等の処理も忘れずに Environment(0.10〜)の活用 development, staging, productionの分別http://www.flickr.com/photos/jonathanbeard/3307862620/ 36
  37. 37. Chefを使う上でやっていること verbose_logging false デフォルトではInfoログが出過ぎる 影響のあった変更処理のみロギング why-run (0.10.14〜) Chefでの処理をnodeに反映しないテストモード CouchDBのバックアップ Chefサーバのバックアップ、/etc/chef 以下も – (Chefリポジトリをバージョン管理していて、そちらのバック アップがあれば特に必要ないかも)http://www.flickr.com/photos/jonathanbeard/3307862620/ 37
  38. 38. Chefを運用する上での課題 Recipeが正しいことを保障するには? 仮想マシン等を活用してテスト – VirtualBoxの制御ができるVagrantが便利 – 本当に正しい処理が⾏われているかは人手での確認が必要 why-run – これも人手での判断が必要 Recipeのユニットテスト – 場合によっては十分、nodeが正しい状態を保障しきれない nodeでの自作チェックスクリプト・F/Whttp://www.flickr.com/photos/jonathanbeard/3307862620/ 38
  39. 39. Cookbookでのコミュニケーション セットアップ手順のチェックをRecipe (Cookbook)という名のコードベースで DevとOpsのクロスチェック Cookbook/Node/Role等、バージョン管理して いるので、過去との差分も確認しやすい 誰でもRead/Writeできる場所にあるので、みん なでメンテナンスできる DevとOpsの新しいコミュニケーションツールhttp://www.flickr.com/photos/jonathanbeard/3307862620/ 39
  40. 40. これからChefを勉強する⽅へ chef-solo が便利 chef-server を必要とせず、ローカルにCookbookを 適用できる 小環境ならこれで十分 他にも、VMとかでテストとか練習とか Chefのインタラクティブシェル “shef” Opscode Platform (Hosted Chef) Chefのホスティング環境 (サーバ) 5 nodes までなら、無料で試せるhttp://www.flickr.com/photos/jonathanbeard/3307862620/ 40
  41. 41. まとめと今後の展望 Chefを活用することで多くのサーバの増設・管理 にかかる負担を軽減 あるべき状態に自動で設定・維持できる ルールを少し覚えれば、誰でも簡単に設定が書ける 内部DSLなので、Rubyを覚えれば処理も柔軟に書ける クラウド等の基盤サービスと連携して、インフラ 構築/運用の完全オートメーションができる仕組 みにしたいhttp://www.flickr.com/photos/jonathanbeard/3307862620/ 41
  42. 42. Chefでサーバ管理の省⼒化 をはじめてみませんか?http://www.flickr.com/photos/jonathanbeard/3307862620/ 42

×