puppetで構成管理をする。なれると楽と言うか、安心していられる。なんせ台数が増えるとこれがないと安心できない。
一番参考になる puppet 資料
puppetで設定を適用する
とりあえず設定を反映したりテストする。
$>puppetd --server debian00.local --no-daemonize --verbose --onetime
オプションの説明はこれ
- --sever
- puppetmasterサーバー指定
- --no-daemonize --onetime
- この一回だけを実行する。
- --verbose
- 進捗表示
これでクライアントが、サーバーに設定を取りにいく。
puppet masterサーバーをフロントで起動して状況を見る
進捗状況が表示されながら、クライアントの接続状況がみえる。
sudo /usr/sbin/puppetmasterd --no-daemonize --verbose
- --no-daemonize
- デーモン化せずに、フロントで起動
- --verbose
- 進捗表示
puppet 設定ディレクトリ
debianの場合はこんな感じになっていた。
/etc/puppet/ ├── auth.conf ------------------------------- マスターに接続許可するネットマスク ├── autosign.conf --------------------------- SSL通信をするクライアント設定 ├── files -------------------------- 同期用ファイル │ ├── etc │ │ ├── apt │ │ │ ├── sources.list │ │ │ └── sources.list.d │ │ │ ├── hadoop.list │ │ │ └── virtualbox.list │ │ ├── hosts │ │ ├── ntp.conf │ │ ├── resolv.conf │ │ ├── ssh │ │ │ └── sshd_config │ │ └── sudoers │ ├── home │ │ └── takuya │ └── var │ └── cache │ └── debconf │ └── jre6.seeds ├── fileserver.conf -------------------------------------- 同期用ファイルの設置場所など ├── manifests │ └── site.pp -------------------------------------- puppetの同期設定。一番大事 ├── modules ├── puppet.conf --------------------------------------- puppet自体の設定 └── templates
puppet 設定の自動生成
Syntaxエラーなしに設定書くのがしんどい。その上、どう書いていいかわからない。サンプルもよくわからない。
そこで、Generatorを活用する。
ralsh を使う
ユーザー設定の作成
takuya@debian00:~$ ralsh user takuya user { 'takuya': ensure => 'present', shell => '/bin/bash', uid => '1000', gid => '1000', comment => 'here,i am ', home => '/home/takuya', groups => ['takuya','admin'] }
パッケージ設定の作成
takuya@debian00:~$ ralsh package openssh-server package { 'openssh-server': ensure => '1:5.5p1-6+squeeze1' }
基本設定のジェネレーター
- ralsh user
- ralsh package
これで、現在の設定をすべて取り出せる。
設定の連鎖についての設定
ある設定が書き換わったら、まとめて更新する という設定。
たとえば、ntpdサーバー設定が変わったら、ntpdを再起動するみたいな
19 class ntp { 20 package { 'ntp' : ensure => latest 21 file { '/etc/ntp.conf': 22 source => 'puppet://debian00.loc 23 require => Package['ntp'], 24 } 25 service { 'ntp': 26 ensure => running, 27 enable => true, 28 subscribe => [ File['/etc/ntp.con 29 } 30 }
こういう依存関係を記述できる所がPuppetの強みです。
- a subscribe b
- AはBが書き換わったら更新する
- b notify a
- Bが書き換わったらAを更新する
- B require A
- AのインストールにはBが必要
設定を有効にする
class A{ ##ほげほげ } #作ったクラスを有効に include A
include を書かないとClassは有効にならないので注意。
逆に、Classは残すけど、無効化するときは、include をコメントする。
ファイルが書き換わったらコマンドを実行する
ファイルが書き換わったら、◯◯コマンドを実行する。
300 } 301 exec{ "hadoop_restart": 302 command => 'for service in /etc/init.d/hadoop-0.20-*;do sudo $service restart;done;', 303 refreshonly => true, 304 path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 305 subscribe => [ 306 File['/etc/hadoop/conf.my_cluster/slaves'], 307 File['/etc/hadoop/conf.my_cluster/masters'], 308 File['/etc/hadoop/conf.my_cluster/mapred-site.xml'], 309 File['/etc/hadoop/conf.my_cluster/log4j.properties'], 310 File['/etc/hadoop/conf.my_cluster/hdfs-site.xml'], 311 File['/etc/hadoop/conf.my_cluster/hadoop-policy.xml'], 312 File['/etc/hadoop/conf.my_cluster/hadoop-metrics.properties'], 313 File['/etc/hadoop/conf.my_cluster/hadoop-env.sh'], 314 File['/etc/hadoop/conf.my_cluster/fair-scheduler.xml'], 315 File['/etc/hadoop/conf.my_cluster/core-site.xml'], 316 File['/etc/hadoop/conf.my_cluster/configuration.xsl'], 317 File['/etc/hadoop/conf.my_cluster/capacity-scheduler.xml']], 318 } 319 exec { "hadoop_enable_my_conf": 320 command => 'update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.my_cluster 50', 321 refreshonly => true, 322 path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 323 subscribe => File['/etc/hadoop/conf.my_cluster'] 324 }
証明書がおかしくなったら、クライアント側の証明書を消す
PuppetサーバーとPuppetクライアントの間は、証明書でお互いを確認しているが、それが時々壊れるので。一旦、証明書を破棄する。
sudo su cd /var/lib/puppet/ssl find -name "*.pem" | xargs -I@ rm @
そしておもむろに、再接続。
サーバー側でautosign.confに指定されているドメインなら一瞬で終わるよ
puppetでpuppetがインストールできない。
問題は、puppet がインストールされている環境を作り込むことです
どうやってもpuppetで管理できないもの
resolv.conf ---puppet はresolv.confのエラーを修正できないことがる。これが壊れると証明書関連のエラーになってファイルを受信できないのでresolv.confの破壊後はresolv.confを使うPuppetはエラーになる。
puppet設定本家ドキュメント
http://docs.puppetlabs.com/references/stable/type.html
http://docs.puppetlabs.com/references/stable/function.html
http://docs.puppetlabs.com/guides/language_guide.html