by shigemk2

当面は技術的なことしか書かない

サーバ/インフラを支える技術5 サーバ管理の効率化(Puppet)

前回
サーバ/インフラを支える技術5 サーバリソースのモニタリング - by shigemk2

運用しているサービスが成長して徐々に規模が大きくなると、
必然的にサーバ台数が増加し、それにともないサーバ管理コストも増大してい
く。
1台-数台のサーバを管理している方法をそのまま数千台のサーバを管理する場
合に当てはめたら、途方もない作業が必要になる

そのため、ある程度の規模の企業におけるサーバ管理では、
均質な環境の維持や設定変更の全体への反映を、効率的かつ
確実にすることが要求される。

この問題については、Puppetを利用してサーバ管理を実現できる。
各サーバにログインして手作業でやってきたことを、
ほぼ自動的に全てのサーバに反映出来るようになる。

これにより、

  • 新規サーバの投入
  • 既存サーバの設定変更

における各サーバの設定の反映を省力化することが出来る。

Puppetとは
Reductive Labsによって開発されているRubyで実装された
OSSのサーバ設定の自動化ツールである。

Puppetはコードをオブジェクト指向的に柔軟に記述できる
特徴がある。

各サーバで実行されるpuppetdと、管理サーバで実行される
puppetmasterdの2種類のデーモンによって動作している。
各サーバのpuppetdがpuppetmasterdに定期的に問い合わせ、
変更を反映させる。(設定ファイルはpuppetmasterdから
ダウンロードされる)

定期的な問い合わせだけではなく、
puppetdを実行することで設定を確認したり反映させたり
することも可能(puppetmasterdからpuppetdへ変更を
反映させることも出来る)
なお、puppetdとpuppetmasterdの間の通信は、
SSLによって暗号化されているので、セキュリティも安全である。

Puppetの設定には、以下の二種類がある。

  • Puppet自体の設定(/etc/puppet/puppet.conf)
  • Puppetによって設定させるサーバの設定内容を定義する設定ファイル(マニフェスト/etc/puppet/manifests)

マニフェストでは、ノード(puppetが設定対象となるサーバ)に、各サーバの設定定義の
集合であるクラスを割り当てる。

クラスはオブジェクト指向のように他のクラスを継承することも出来る。

puppetdはサーバの設定を確認し、
必要に応じて変更する(必要がなければ変更しない)
そしてこのとき変更された内容はsyslogに出力させるが、
メールやログで通知させることもできる。

  • tagmail.conf(メール送信)
  • puppetmaster.log(実行結果出力)
  • report(YAML形式)
  • 直接出力も可

ただ、大多数のサーバの設定ファイルを簡単に更新できるため、
設定ミスの影響も大きくなる。

sshd_configの設定を失敗して、ログインできなくなったら…など。
そのため、大きく修正を加えるためには、一部のサーバでテストするなどの
工夫が必要。


また、一見便利そうだが、

  • 何か本質的に新しいことが出来るようになるわけではない(自動化は空気)
  • その割に、覚えることが多く面倒(設定のための設定をする必要がある)
  • しかもツールのおかげでトラブルが発生することがよくある

でも、ちょっとした変更を数百台のサーバに反映させるのには、
自動設定ツールにやらせたいものである。

そのため、

  • 台数が多い場合
  • 手動では設定漏れが発生しがちなところ

から徐々に導入するのがよいかと。

次回
サーバ/インフラを支える技術5 デーモンの稼動管理 - by shigemk2

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)