ラボブログではウノウのエンジニアで1日1人1エントリ(早く書くのはあり)で書いてます。おかげさまでウノウも順調にエンジニアの数が増えて、僕の順番に回ってくるのが少しずつ遅くなってきました。でもまだまだウノウではエンジニアを大募集中です!!我こそはと思う方はぜひご連絡ください。
前回のベンチャー流サーバ構築のススメ(ネットワーク編)ではネットワーク周りについて書きました。前回のエントリで言ったように、今回はソフトウェア周りのことについて書きたいと思います。
ソフトウェア周りで重要なのは、同じ構成にする、これにつきます。web サーバにだけ apache をインストールしたりとか、DB サーバにだけ MySQL をインストールしたりだとかいうことはしません。全てのサーバに同じパッケージ、同じプログラムをインストールします。それによる管理コストの軽減ははかりしれないものがあります。役割の違いによって、設定ファイルまで全く同じにはできませんが、極力同じにします。理想は全てのサーバがマスターサーバです。
・Linux はインストールしない、コピーする
Linux のインストールは最初の1台だけです。後は全てコピーします。
コピーに使用するのは dump, restore というコマンドを使います。ウノウのサーバの場合、ファイルシステムが xfs ですので、xfs 用の xfsdump, xfsrestore を使用します。
* xfs にしている理由についてはPHPで書かれたwebサービスを高速化するをご覧ください
コピー元のサーバはどれでも構いません。なぜなら全てのサーバが同じファイル構成、マスターサーバだからです。少しぐらい止めても大丈夫なサーバ、webサーバとか DB のスレーブサーバを選びましょう。
コピー元のサーバにコピー先のサーバの HDD を接続します。後は次のシェルスクリプト1発でコピー完了です。
#!/bin/sh mkfs.ext3 /dev/sdb1 -L /boot mkfs.xfs -f /dev/sdb2 -L / mount /dev/sdb1 /w cp -a /boot/* /w umount /w mount /dev/sdb2 /w xfsdump -a - /| xfsrestore -r - /w umount /w
ものの10分でコピーできます。これでファイルシステムはコピーできたのですが、重要な MBR が書き換わってないので、このままでは起動することができません。そこで、GRUB の入った CD で起動して MBR を書き換えます。
正確なコマンドは忘れましたが、GRUB が起動して次のようにタイプすると MBR が書き換えられて起動できるようになります。
root (hd0,0) setup (hd0)
実はこれをもうちょっと発展させてネットワーク越しで dump, restore できないかなと考えています。
・サーバを設置
・knoppix のように CD で Linux を起動
・ネットワーク越しで dump, restore
・GRUB で MBR 書き換え
こういう風にすると既存のサーバを止めて物理的に HDD を繋げる手間もなくなりますし、作業をほぼ半自動化できます。
・設定ファイルは極力同期する
サーバ間での設定の差異は極力なくしまします。例えば apache が動いていないサーバでも httpd.conf は更新します。サーバごとの違いを管理するコストよりも、同期をとるコストの方が圧倒的に低いからです。proxy サーバの設定は若干違いますが。
サーバの同期を取るために簡単なシェルスクリプトを使っています。シェルスクリプトについては、また次回にでも書きたいと思います。
・パッケージのアップデートもコピー
アップデートパッケージがあった場合に1台1台のマシンでアップデート作業をやるのは大変です。パッケージをアップデートする場合は、1台のサーバでアップデートを行って、残りのマシンには rsync でコピーします。
新規パッケージインストールの場合は /etc, /var とかにファイルが追加されたりするので、各マシンでインストールするのですが、パッケージアップデートの場合は /usr のファイルが更新されると相場は決まってます。
ライブラリ系のパッケージの場合は ldconfig を忘れないように注意します。これ忘れるとライブラリの情報が更新されませんので。
・ソースからインストールするパッケージは /opt へ
普通に ./configure; make; make install すると /usr/local にインストールされます。/usr/local にインストールされると別々のパッケージに所属するファイルが /usr/local に入ってしまって、どのファイルがどのパッケージに所属するか分からなくなって管理できなくなってしまいます。なのでソースコードからインストールするソフトウェアは全て /opt/package という風にパッケージごとに分けてインストールします。
このときに気をつけないといけないのが、環境変数 PATH の設定と /etc/ld.so.conf の設定です。
/opt/package/bin を PATH に追加して、 /opt/package/lib を /etc/ld.so.conf に追加(実際は /etc/ld.so.conf.d にファイルを追加するだけでよい) します。
この辺の話は以前に自分のブログで書いたのでよかったら参照してください。
tarballからインストールしたソフトウェアを簡単に管理する
もちろん /opt にインストールする場合も1台のサーバにインストールして、残りは全部コピーです。
・アプリケーションのインストールは極力パッケージに任せる
コアなソフトウェア、パッケージが用意されてないソフトウェア以外は極力パッケージで管理するようにします。ソフトウェアに脆弱性があった場合など、全てのソフトウェアの更新をウォッチすることはできませんから、パッケージで管理できるソフトウェアは全てパッケージで管理するようにします。
今回はサーバ構築のソフトウェア(OS周り)について書きました。次回は今回紹介しきれなかったサーバ管理に使ってるシェルスクリプトのことについて書きたいと思います。