Blogナビプラスより主に技術者向けの情報をお送りします。2014年2月13日1件のコメントTweetどもです。インフラ池田(@mikeda)です。今日は『NaviPlusではどういうふうにサーバ構築作業をしているのか』について話します。※編集長注:以下は記事執筆時点のものです。将来的に弊社がこの手順を使用することを保証するものではありません。NaviPlusでは今のところクラウドは利用していないので、サーバ構築は基本的に以下のどっちかになります。物理サーバKVMのゲストOSはCentOSの6系です。作業は以下の技術を使って自動化しています。kickstartchef-soloそれではさっそく、ザックリとした実際の構築手順から。物理サーバとVMに分けて説明します。事前にローカルDNSの登録と、chefのnode定義の作成だけやっておきます。物理サーバまずは物理サーバの構築手順です。iLO/iDRAC等を使ってリモートでコンソールが取得できればオフィスからでも実行可能です。kickstartでOSインストールサーバをPXEブートさせます。HPサーバ、DELLサーバであれば起動中にF12を押せばOKです。Installerboot:数字を入力してほおっておくとOSのインストールと初期設定が完了します。1が通常サーバ、2がKVMホスト(パーティションの切り方を変えてます)、9は手動インストール(kickstartなしでインストーラが起動)です。初回起動時はネットワーク設定がDHCPになってるので、設定スクリプトを使って設定します。rebootbonding設定もこのスクリプトでやっちゃってます。※VMのホストサーバの場合は、さらにブリッジ設定とLVM設定を実施します。管理ユーザでログインし、chef-soloを実行します。~/chef/nodes/`hostname`.jsonで完了です。kickstartでOSインストールVM構築スクリプトを使ってVMを作成します。1/2これだけでOSのインストールと初期設定、NW設定が完了します。chef-solo実行ここからは物理サーバと同じです。~/chef/nodes/`hostname`.jsonで完了。以上で手順の説明は終わりです。サーバ構築環境について以降はサーバ構築環境の細かい設定などを説明していきます。基本的に管理サーバが1台あって、そこに一通りの機能を突っ込んでいます。boot、kickstartの細かい説明は割愛します。bootの設定はこんな感じです。/tmp/os_setup.shDVDからインストールしたサーバの/root/anaconda-ks.cfgをちょっといじっただけですね。※DVDから手動インストールしても同じ状態にできるように、kickstartでは特殊なことはやらないようにしてますOSの初期設定スクリプトではこんなことをやっています。不要サービスの停止ネットワーク設定スクリプトのダウンロード。VMの場合は実行までやっちゃう。要するに『管理ユーザでログインしてchef-soloが実行できる状態』にします。chef-solo特に言うことがないwgithubで管理、各サーバに展開してます。パッケージ管理ミドルウェア系のパッケージ管理について話しておきます。installします。ローカルレポジトリにはCentOS標準レポジトリのミラー、EPELのミラー、オリジナルのyumレポジトリ(外部から入手したもの、自分で作ったものを追加)があります。外部から直接アクセスのあるReverseProxy用のApacheやAPP用のRubyなど、セキュリティや機能の面でバージョンを細かく更新したいものはソースインストールしています。RPMの自作は管理が面倒なのであまりやっていません。サーバ構築に必要なRPMやソースコードは全て管理サーバ上に配置されていて、外部からのファイル取得はありません(gemやpearのようなものは除いて)。外部yumレポジトリなどを使っていると以下の問題が発生するためです。依存パッケージも含めた完全なバージョンの固定化が難しいファイルが消えちゃうことがあるローカルyumレポジトリの構築にはmrepoを使っています。構築手順はとっても簡単です。-ugvvこれだけで(あとはapacheのgracefulくらい)ここまでやってくれます。centos6-x86_64オリジナルのyumレポジトリにパッケージを追加したい場合は、rpmをコンフィグで指定したディレクトリ以下に配置、更新コマンドを実行するだけでOKです。centos6-x86_64作成したレポジトリは、yum設定をこんな感じにすれば使えます。Naviplusbaseurl=http://192.168.1.100/mrepo/centos$releasever-$basearch/RPMS.naviplus/gpgcheck=0enabled=1mrepoは便利なツールですが、情報が少ないしメンテされてなさそうなので、あんまオススメできないかもwVMのインストールスクリプトこれもちょっとだけ話をしておきます。ちなみにKVMのホストは、物理運用サーバを流用したそこそこスペックの1Uサーバがけっこう多いです。その場合のサーバスペックはこのくらいです。各リソースを1/2、1/4、1/8した固定サイズのVMを使うようにしています。※開発サーバや管理系のサーバは、それ用のホストに必要なだけリソースを確保してVMを作成してます。最初の手順にあった1/2っていうのは、1/2サイズってことでした。1/2このスクリプトの中身はこんな感じです。console=ttyS0,115200n8"VMのイメージはファイルじゃなくてLVMボリュームを使っています。「安定性とパフォーマンスの面でLVMのほうがオススメ」と言われたのでそうしてます。(自分じゃ細かい検証してません!サーセンw)kickstartファイルは動的に生成しています。test01...といっても今のところ元kickstartファイルの、networkやデバイスを書き換えてるだけです。Bootやkickstart、ローカルyumレポジトリはcobblerを使ってかっこ良くテンプレート管理する手もあります。サーバベンダやOS構成の種類が限られる場合、cobblerはちょっと大げさ過ぎる気がして使ってません。構築時間はどのくらいですかね。OSインストール中、chef-solo実行中は他の作業してるので、特にVMだと実際の作業時間はほとんどないです。ここはもう、クラウドだろうがオンプレミスだろうがこのぐらいは当たり前になってきてる気はします。1桁台の構築台数で『サーバ構築は丸1日以上かかります』とかって状態であれば、何か非効率的なことをしていると思います。サーバ構築の速度と精度は高いに越したことはないです(もちろんどこまでやるかは状況によりけりです)。工数削減はもちろんそうですが、加えて『作業』のコストとリスクを下げることは『改善』のコストとリスクを下げることになるからです。Blogコメントは停止中です。