자동화와 관련된 Open Source 몇가지를 알아보던중, 괜찮아 보인게 Chef다. Puppet이라고 비슷한 기능을 가진것 같은데, 아직 자세히 보진 못했다. Chef에 어느정도 적응하고 나면 Puppet도 해볼 생각이다. 어차피 둘다 해보긴 해봐야 할것 같기에...
Chef 관련 정보를 찾다가 아줄 정리가 잘되어 있는 PDF문서도 발견했다. 아래 첨부파일은 한번쯤 보시길...
개략적인 운영방식은 아래와 같다.
Chef는 기본적으로 Server/Client 구조다. (필요에 따라 Solo로 작동 시킬수도 있다.)
Chef-Server에서 원하는 Package와 그에 적절한 Configuraton를 사전에 Recipe로 만들어 Cookbook에 등록해두고, Chef-Client에 적절한 수행을 가해주면, 원하는 패키지 설치/제거는 물론이고, 설정까지 자동으로 적용된다. Chef-Clinet는 동일한 기능을 가질수도 있고, 개별적인 기능들을 가지게하여, 하나의 '서버군'을 형성하게 할 수도 있다.(사실 난 아직 해보질 못했음...ㅡㅡ;;).
또 Chef-Server 설정에 따라, 특정 Chef-Client가 관리자 실수나, 기타 장애로 설정값이 변경되거나, Chef로 관리되는 서비스에 문제가 발생됬다고 판단될 경우, Package와 Configuration을 자동 복원하고, 서비스를 다시 시작해준다. 매역적인 기능이다.
서로 다른 여러 기능의 Chef-Clinet를 조합하여, 한의 부하 분산 서버군을 구성할 수도 있을 것 같다. 그것도 각각의 VM에 접속할 필요 없이. Chef-Server에서 몇번의 명령만으로... 관리 포인트도 하나로 집중시킬수도 있을 것 같고... 무식한 영어 실력으로 더듬더듬한 내용이지만, 대충 그런것 같다.
그리고, Chef에서는 Cookbook/Recipe가 굉장히 중요한 요소 같다. 아니 Chef의 전부인듯........
각자가 원하는 Recipe를 만들수도 있지만, 아마도 내가 만들고자 하는 Recipe와 90%이상은 유사한 Recipe가 이미 오픈되어 공유되고 있다. 실제로 Cookbook을 한번 다운로드 받아 봤더니 아래와 같이...........엄청..........ㅜㅡ;; 보시다 시피 어지간한 세트는 다 이미 마련되있다. 세부 설정은 해당 recipe의 Configuration을 아주 약간 변형함으로서 내가 원하는 형태로 배포/설정 할수 있다. (그리고 OPSCode라는 곳에서는 더 많은 레시피를 제공받을 수 있는 것 같다. 이부분은 좀더 확인해 봐야 함....)
Chef Cookbook에 포함되어 있는 Recipe (git clone git://github.com/opscode/cookbooks.git)
[root@localhost chef-repo]# ll
total 44
drwxr-xr-x 8 root root 4096 Mar 25 13:10 .
drwxr-xr-x 3 root root 4096 Mar 25 13:14 ..
drwxr-xr-x 2 root root 4096 Mar 25 13:10 certificates
drwxr-xr-x 2 root root 4096 Mar 25 13:10 config
drwxr-xr-x 129 root root 4096 Mar 25 13:11 cookbooks
drwxr-xr-x 2 root root 4096 Mar 25 13:10 data_bags
drwxr-xr-x 8 root root 4096 Mar 25 13:10 .git
-rw-r--r-- 1 root root 18 Mar 25 13:10 .gitignore
-rw-r--r-- 1 root root 2171 Mar 25 13:10 Rakefile
-rw-r--r-- 1 root root 3521 Mar 25 13:10 README.md
drwxr-xr-x 2 root root 4096 Mar 25 13:10 roles
[root@localhost chef-repo]#
[root@localhost chef-repo]#
[root@localhost chef-repo]# ll cookbooks/
total 548
drwxr-xr-x 129 root root 4096 Mar 25 13:11 .
drwxr-xr-x 8 root root 4096 Mar 25 13:10 ..
drwxr-xr-x 5 root root 4096 Mar 25 13:11 activemq
drwxr-xr-x 3 root root 4096 Mar 25 13:11 ant
drwxr-xr-x 7 root root 4096 Mar 25 13:11 apache2
drwxr-xr-x 4 root root 4096 Mar 25 13:11 apparmor
drwxr-xr-x 5 root root 4096 Mar 25 13:11 application
drwxr-xr-x 6 root root 4096 Mar 25 13:11 apt
drwxr-xr-x 6 root root 4096 Mar 25 13:11 aws
drwxr-xr-x 6 root root 4096 Mar 25 13:11 bluepill
drwxr-xr-x 3 root root 4096 Mar 25 13:11 boost
drwxr-xr-x 3 root root 4096 Mar 25 13:11 build-essential
drwxr-xr-x 4 root root 4096 Mar 25 13:11 capistrano
drwxr-xr-x 5 root root 4096 Mar 25 13:11 chef
drwxr-xr-x 5 root root 4096 Mar 25 13:11 chef-client
drwxr-xr-x 7 root root 4096 Mar 25 13:11 cloudkick
-rw-r--r-- 1 root root 408 Mar 25 13:11 CONTRIBUTING
drwxr-xr-x 6 root root 4096 Mar 25 13:11 couchdb
drwxr-xr-x 3 root root 4096 Mar 25 13:11 cron
drwxr-xr-x 7 root root 4096 Mar 25 13:11 daemontools
drwxr-xr-x 4 root root 4096 Mar 25 13:11 database
drwxr-xr-x 4 root root 4096 Mar 25 13:11 django
drwxr-xr-x 7 root root 4096 Mar 25 13:11 djbdns
drwxr-xr-x 6 root root 4096 Mar 25 13:11 dmg
drwxr-xr-x 3 root root 4096 Mar 25 13:11 drbd
drwxr-xr-x 6 root root 4096 Mar 25 13:11 dynect
drwxr-xr-x 5 root root 4096 Mar 25 13:11 dynomite
drwxr-xr-x 4 root root 4096 Mar 25 13:11 ec2
drwxr-xr-x 3 root root 4096 Mar 25 13:11 emacs
drwxr-xr-x 4 root root 4096 Mar 25 13:11 erlang
drwxr-xr-x 4 root root 4096 Mar 25 13:11 fail2ban
drwxr-xr-x 6 root root 4096 Mar 25 13:11 gems
drwxr-xr-x 4 root root 4096 Mar 25 13:11 git
drwxr-xr-x 8 root root 4096 Mar 25 13:11 .git
-rw-r--r-- 1 root root 38 Mar 25 13:11 .gitignore
drwxr-xr-x 5 root root 4096 Mar 25 13:11 glassfish
drwxr-xr-x 4 root root 4096 Mar 25 13:11 gnu_parallel
drwxr-xr-x 5 root root 4096 Mar 25 13:11 god
drwxr-xr-x 7 root root 4096 Mar 25 13:11 gunicorn
drwxr-xr-x 4 root root 4096 Mar 25 13:11 hadoop
drwxr-xr-x 5 root root 4096 Mar 25 13:11 haproxy
drwxr-xr-x 3 root root 4096 Mar 25 13:11 heartbeat
drwxr-xr-x 3 root root 4096 Mar 25 13:11 imagemagick
drwxr-xr-x 4 root root 4096 Mar 25 13:11 instiki
drwxr-xr-x 6 root root 4096 Mar 25 13:11 iptables
drwxr-xr-x 6 root root 4096 Mar 25 13:11 java
drwxr-xr-x 3 root root 4096 Mar 25 13:11 java_sun
drwxr-xr-x 5 root root 4096 Mar 25 13:11 jetty
drwxr-xr-x 6 root root 4096 Mar 25 13:11 jira
drwxr-xr-x 5 root root 4096 Mar 25 13:11 jpackage
drwxr-xr-x 4 root root 4096 Mar 25 13:11 keepalived
drwxr-xr-x 5 root root 4096 Mar 25 13:11 kickstart
-rw-r--r-- 1 root root 10850 Mar 25 13:11 LICENSE
drwxr-xr-x 5 root root 4096 Mar 25 13:11 logrotate
drwxr-xr-x 3 root root 4096 Mar 25 13:11 logwatch
drwxr-xr-x 3 root root 4096 Mar 25 13:11 lvm
drwxr-xr-x 3 root root 4096 Mar 25 13:11 man
drwxr-xr-x 5 root root 4096 Mar 25 13:11 maradns
drwxr-xr-x 3 root root 4096 Mar 25 13:11 maven
drwxr-xr-x 6 root root 4096 Mar 25 13:11 memcached
drwxr-xr-x 3 root root 4096 Mar 25 13:11 mercurial
drwxr-xr-x 7 root root 4096 Mar 25 13:11 munin
drwxr-xr-x 8 root root 4096 Mar 25 13:11 mysql
drwxr-xr-x 8 root root 4096 Mar 25 13:11 nagios
drwxr-xr-x 3 root root 4096 Mar 25 13:11 nanite
drwxr-xr-x 7 root root 4096 Mar 25 13:11 nginx
-rw-r--r-- 1 root root 999 Mar 25 13:11 NOTICE
drwxr-xr-x 3 root root 4096 Mar 25 13:11 nscd
drwxr-xr-x 5 root root 4096 Mar 25 13:11 ntp
drwxr-xr-x 5 root root 4096 Mar 25 13:11 ohai
drwxr-xr-x 5 root root 4096 Mar 25 13:11 one-shot
drwxr-xr-x 6 root root 4096 Mar 25 13:11 openldap
drwxr-xr-x 4 root root 4096 Mar 25 13:11 openssh
drwxr-xr-x 4 root root 4096 Mar 25 13:11 openssl
drwxr-xr-x 5 root root 4096 Mar 25 13:11 openvpn
drwxr-xr-x 5 root root 4096 Mar 25 13:11 ossec
drwxr-xr-x 5 root root 4096 Mar 25 13:11 packages
drwxr-xr-x 5 root root 4096 Mar 25 13:11 pacman
drwxr-xr-x 5 root root 4096 Mar 25 13:11 passenger_apache2
drwxr-xr-x 5 root root 4096 Mar 25 13:11 passenger_enterprise
drwxr-xr-x 5 root root 4096 Mar 25 13:11 perl
drwxr-xr-x 7 root root 4096 Mar 25 13:11 php
drwxr-xr-x 5 root root 4096 Mar 25 13:11 postfix
drwxr-xr-x 5 root root 4096 Mar 25 13:11 postgresql
drwxr-xr-x 5 root root 4096 Mar 25 13:11 pxe_dust
drwxr-xr-x 6 root root 4096 Mar 25 13:11 python
drwxr-xr-x 5 root root 4096 Mar 25 13:11 quick_start
drwxr-xr-x 5 root root 4096 Mar 25 13:11 rabbitmq
drwxr-xr-x 3 root root 4096 Mar 25 13:11 rabbitmq_chef
drwxr-xr-x 6 root root 4096 Mar 25 13:11 radiant
drwxr-xr-x 5 root root 4096 Mar 25 13:11 rails
drwxr-xr-x 4 root root 4096 Mar 25 13:11 rails_enterprise
-rw-r--r-- 1 root root 1227 Mar 25 13:11 Rakefile
-rw-r--r-- 1 root root 659 Mar 25 13:11 README
drwxr-xr-x 5 root root 4096 Mar 25 13:11 redmine
drwxr-xr-x 4 root root 4096 Mar 25 13:11 reprepro
drwxr-xr-x 5 root root 4096 Mar 25 13:11 resolver
drwxr-xr-x 8 root root 4096 Mar 25 13:11 riak
drwxr-xr-x 3 root root 4096 Mar 25 13:11 rsync
drwxr-xr-x 6 root root 4096 Mar 25 13:11 rsyslog
drwxr-xr-x 4 root root 4096 Mar 25 13:11 ruby
drwxr-xr-x 5 root root 4096 Mar 25 13:11 ruby_enterprise
drwxr-xr-x 3 root root 4096 Mar 25 13:11 rubygems
drwxr-xr-x 7 root root 4096 Mar 25 13:11 runit
drwxr-xr-x 3 root root 4096 Mar 25 13:11 rush
drwxr-xr-x 7 root root 4096 Mar 25 13:11 samba
drwxr-xr-x 7 root root 4096 Mar 25 13:11 sbuild
drwxr-xr-x 3 root root 4096 Mar 25 13:11 screen
drwxr-xr-x 5 root root 4096 Mar 25 13:11 snort
drwxr-xr-x 7 root root 4096 Mar 25 13:11 solr
drwxr-xr-x 3 root root 4096 Mar 25 13:11 sqlite
drwxr-xr-x 4 root root 4096 Mar 25 13:11 ssh_known_hosts
drwxr-xr-x 4 root root 4096 Mar 25 13:11 stompserver
drwxr-xr-x 5 root root 4096 Mar 25 13:11 subversion
drwxr-xr-x 5 root root 4096 Mar 25 13:11 sudo
drwxr-xr-x 4 root root 4096 Mar 25 13:11 teamspeak
drwxr-xr-x 5 root root 4096 Mar 25 13:11 teamspeak3
drwxr-xr-x 3 root root 4096 Mar 25 13:11 thrift
drwxr-xr-x 3 root root 4096 Mar 25 13:11 tmux
drwxr-xr-x 5 root root 4096 Mar 25 13:11 tomcat
drwxr-xr-x 8 root root 4096 Mar 25 13:11 tomcat6
drwxr-xr-x 5 root root 4096 Mar 25 13:11 trac
drwxr-xr-x 8 root root 4096 Mar 25 13:11 transmission
drwxr-xr-x 5 root root 4096 Mar 25 13:11 ubuntu
drwxr-xr-x 4 root root 4096 Mar 25 13:11 ucspi-tcp
drwxr-xr-x 5 root root 4096 Mar 25 13:11 unicorn
drwxr-xr-x 4 root root 4096 Mar 25 13:11 users
drwxr-xr-x 5 root root 4096 Mar 25 13:11 varnish
drwxr-xr-x 4 root root 4096 Mar 25 13:11 vim
drwxr-xr-x 5 root root 4096 Mar 25 13:11 wordpress
drwxr-xr-x 3 root root 4096 Mar 25 13:11 xfs
drwxr-xr-x 3 root root 4096 Mar 25 13:11 xml
drwxr-xr-x 8 root root 4096 Mar 25 13:11 zenoss
drwxr-xr-x 3 root root 4096 Mar 25 13:11 zlib
drwxr-xr-x 3 root root 4096 Mar 25 13:11 zsh
[root@localhost chef-repo]#
이제 슬슬 간단한 것 부터 한번 실제로 해봐야 겠다..........