Apa itu Puppet Server?
Puppet adalah open source configuration management tool, digunakan untuk mengatur konfigurasi pada sebuah host, baik berupa file, packages, maupun users secara sentralisasi. Saya menggunakan puppet untuk mengatur semua server yang saya tangani, yang jumlahnya begitu banyak, kalau hanya 1-10 mungkin bisa, tapi kalau sudah ratusan beda cerita, karena tidak mungkin saya mengkonfigurasi satu - persatu server tersebut, karena selain tidak efisien, besar peluang terjadinya human error.
Sebagai gambaran saja, jika saya
menginginkan perubahan pada sebuah konfigurasi, tapi di semua server,
misalkan saya ingin menambahkan rules pada pf (packet filter),
tinggal merubah rules pada puppet server atau puppetmaster, maka semua
host yang terdaftar sebagai puppet client, rules pf akan dirubah oleh
puppet client.
Pengguna Puppet
Puppet biasa digunakan pada
environment bersekala dari kecil hingga besar berikut sebagian daftar
client yang mungkin tidak asing bagi kita menggunakan puppet:
- Oracle,
- Google,
- Wikimedia Foundation,
- Twitter,
- Dell,
- Rackspace,
- Zynga,
- New York Stock Exchange,
- Disney,
- Citrix Systems,
- Los Alamos National Laboratory,
- Stanford University,
- Nokia,
- dll.
Bisa bayangkan bagaimana system bisa
bekerja pada skala sebesar perusahaan diatas, bahkan perusahaan
seperti VMware, Google Ventures, and Cisco rela Invest di Puppet Labs.
Puppet Platform
Puppet bisa bekerja pada lintas platform berikut daftar sistem operasi yang di dukung pada saat penulisan:
Linux:
- Red Hat Enterprise Linux,
- CentOS
- Scientific Linux,
- Oracle Linux,
- Debian,
- Ubuntu,
- Fedora,
- SUSE Linux Enterprise Server,
- Gentoo Linux,
- Mandriva Corporate Server,
- ArchLinux.
BSD:
- FreeBSD,
- OpenBSD.
Unix lainnya:
- Mac OS X,
- Oracle Solaris,
- AIX,
- HP-UX.
Windows:
- Windows Server 2003,
- Windows 2008.
Puppet bekerja menggunakan metode
client-server walaupun bisa stand-alone, semua konfigurasi
tersentralisasi pada puppet server, semua sistem operasi yang di dukung
puppet, bisa di jalankan sebagai puppet server, kecuali windows, hanya
bisa di jadikan sebagai puppet client. Jadi kita bisa jadikan OpenBSD
sebagai puppetmaster dan Solaris sebagai puppet clientnya.
Puppet bekerja dengan metode
client-server, ini berarti sebuah client (puppet client) atau lebih akan
menghubungi puppet server, bisa jadi lebih dari satu puppet server.
Secara priodik (defaultnya 30 menit) puppet client akan menghubungi
puppet server, untuk mendownload konfigurasi terbaru dari puppet server
disebut dengan catalog dan mensikronisasikan dengan konfigurasi yang
ada, apabila ditemukan perubahan, maka puppet akan merubahnya. Setelah
itu puppet client, mengirimkan laporan ke puppet server, mengenai ada
tidaknya perubahan, jika ada perubahan maka di laporkan pula bagian mana
yang berubah.
Berikut diagram yang menunjukan bagaimana alur data pada puppet:
![]() |
| sumber gambar: puppetlabs |
Fungisionalitas pada puppet dibangun
dengan lapisan-lapisan layer yang terpisah, setiap layer bertanggung
jawab terhadap sistem, masing-masing bertanggung jawab untuk aspek tetap
dari sistem, dengan kontrol ketat terhadap bagaimana informasi lewat di
antara lapisan:
![]() |
| sumber gambar: puppetlabs |
Resource yang bisa di manajemen puppet
Pada saat penulisan artikel ini puppet sudah bisa memanajemen resource dibawah ini:
- augeas
- computer
- cron
- exec
- file
- filebucket
- group
- host
- interface
- k5login
- macauthorization
- mailalias
- maillist
- mcx
- mount
- nagios_command
- nagios_contact
- nagios_contactgroup
- nagios_host
- nagios_hostdependency
- nagios_hostescalation
- nagios_hostextinfo
- nagios_hostgroup
- nagios_service
- nagios_servicedependency
- nagios_serviceescalation
- nagios_serviceextinfo
- nagios_servicegroup
- nagios_timeperiod
- notify
- package
- resources
- router
- schedule
- scheduled_task
- selboolean
- selmodule
- service
- ssh_authorized_key
- sshkey
- stage
- tidy
- user
- vlan
- yumrepo
- zfs
- zone
- zpool
Sebagai contoh, bila kita ingin
membuat cron, tinggal membuat kelasnya di puppet server, maka cron akan
terbentuk dengan sendirinya di semua host yang terdaftar sebagai puppet
client. Dan perlu diingat tidak sebatas list diatas puppet bisa di
manajemen, tergantung dari kreatifitas dan kebutuhan kita sendiri.
Di sini kita tidak membicarakan bagaiamana instalasi maupun penjelasan
mengenai tools, tapi saya hanya ingin menunjukan bagaimana puppet
bekerja. Penjelasan seperti instalasi, konfigurasi, dan lain-lain bisa
di lihat setelah artikel ini. Tujuan dari demonstrasi ini adalah agar
pembaca melihat garis besarnya saja, dan demo ini di implementasikan di
localhost bukan dengan metode client-server.
Yang akan saya lakukan adalah instalasi puppet saya menggunakan system operasi Centos (Linux), kemudian kita akan
membuat puppet script, yang melakukan instalasi paket httpd,
meng-enable-nya, mengecek proses httpd, jika mati, akan di hidupkan
puppet. FYI: saya juga menambahkan epel repository.
Instalasi Puppet
##############
[root@sektor72 ~]# yum install puppet -y
Paket puppet yang terinstall :
puppet noarch 2.6.13-2.el6 epel 811 k
Installing for dependencies:
augeas-libs i686 0.9.0-1.el6 base 311 k
compat-readline5 i686 5.2-17.1.el6 base 128 k
facter noarch 1.6.4-1.el6 epel 66 k
libselinux-ruby i686 2.0.94-5.2.el6 base 97 k
ruby i686 1.8.7.352-4.el6_2 updates 532 k
ruby-augeas i686 0.3.0-2.el6 epel 20 k
ruby-libs i686 1.8.7.352-4.el6_2 updates 1.6 M
ruby-shadow i686 1.4.1-13.el6 epel 11 k
Mengecek apakah sudah terinstall atau belum paket httpd, jika tidak ada output, berarti paket httpd belum terinstall.
[root@sektor72 ~]# rpm -qa | grep httpd
Sekarang mari kita membuat puppet script yang mudah, dengan extention (.pp)
[root@sektor72 ~]# vi apply.pp
dengan isi sebagai berikut:
package { "httpd":
ensure => present,
}
service { "httpd":
enable => true,
ensure => running,
}
Mari kita eksekusi script yang telah kita buat, jika tidak ada masalah
dalam tahap instalasi atau puppet script kita maka akan tampak seperti
berikut:
[root@sektor72 ~]# puppet apply apply.pp
notice: /Stage[main]//Package[httpd]/ensure: created
notice: /Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 111.43 seconds
[root@sektor72 ~]#
Tampaknya proses berjalan lancar, mari kita cek hasil dari puppet:
[root@sektor72 ~]# rpm -qa | grep httpd
httpd-2.2.15-15.el6.centos.i686
yups, paket httpd sudah terinstal, mari kita cek coba mematikan proses httpdnya
[root@sektor72 ~]# /etc/init.d/httpd status
httpd (pid 5119) is running...
[root@sektor72 ~]# /etc/init.d/httpd stop
Stopping httpd: [ OK ]
[root@sektor72 ~]# /etc/init.d/httpd status
httpd is stopped
[root@sektor72 ~]#
ok, service httpd
sudah di matikan. Kita coba jalankan script puppet yang telah kita
buat tadi, jika memang benar, maka service akan di hidupkan kembali
oleh puppet.
[root@sektor72 ~]#
puppet apply apply.pp
notice:
/Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to
'running'
notice: Finished
catalog run in 1.30 seconds
[root@sektor72 ~]#
Nampak output
puppet, memberi kabar gembira, mari kita cek:
[root@sektor72 ~]#
/etc/init.d/httpd status
httpd (pid 5586) is
running...
[root@sektor72 ~]#
Yups terjalan
berjalan dengan baik, puppet menghidupkan service httpd, sekarang
mari kita me-disable httpd pada chkconfig:
[root@sektor72 ~]#
chkconfig --list|grep httpd
httpd
0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@sektor72 ~]#
chkconfig httpd off
[root@sektor72 ~]#
chkconfig --list|grep httpd
httpd
0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@sektor72 ~]#
Mari kita jalankan
kembali script puppet, dan kita lihat hasilnya:
[root@sektor72 ~]#
puppet apply apply.pp
notice:
/Stage[main]//Service[httpd]/enable: enable changed 'false' to 'true'
notice: Finished
catalog run in 1.44 seconds
[root@sektor72 ~]#
chkconfig --list|grep httpd
httpd
0:off 1:off 2:on 3:on 4:on 5:on 6:off
OK, puppet berhasil
meng-enble runlevel untuk 2,3,4,5. yang tadi sebelumnya mati.
Bahkan bila kita
menghapus paket httpd, maka puppet akan menginstallnya kembali, mari
kita lihat:
[root@sektor72 ~]#
yum remove httpd -y
Loaded plugins:
fastestmirror, priorities, refresh-packagekit, security, versionlock
Setting up Remove
Process
Resolving
Dependencies
--> Running
transaction check
---> Package
httpd.i686 0:2.2.15-15.el6.centos will be erased
--> Finished
Dependency Resolution
Dependencies
Resolved
=============================================================================================================================================================
Package
Arch Version
Repository Size
=============================================================================================================================================================
Removing:
httpd
i686 2.2.15-15.el6.centos
@base 2.8 M
Transaction Summary
=============================================================================================================================================================
Remove 1
Package(s)
Installed size: 2.8
M
Downloading
Packages:
Running
rpm_check_debug
Running Transaction
Test
Transaction Test
Succeeded
Running Transaction
Erasing :
httpd-2.2.15-15.el6.centos.i686
1/1
Removed:
httpd.i686
0:2.2.15-15.el6.centos
Complete!
[root@sektor72 ~]#
rpm -qa|grep httpd # kosong
[root@sektor72 ~]#
puppet apply apply.pp
err:
/Stage[main]//Service[httpd]/ensure: change from stopped to running
failed: Could not start Service[httpd]: Execution of '/sbin/service
httpd start' returned 1: at /root/apply.pp:7
notice:
/Stage[main]//Package[httpd]/ensure: created
notice: Finished
catalog run in 40.80 seconds
[root@sektor72 ~]#
rpm -qa | grep httpd
httpd-2.2.15-15.el6.centos.i686
[root@sektor72 ~]#
Yups, Alhamdulillah
selesai sudah penjelasan puppet sebagai server automasi dan manajemen
konfigurasi, saya berharap pembaca sekarang mengerti mengapa puppet
menjadi server automasi di datacenter berbagai belahan dunia. Untuk
lebih dalam mengenai puppet, pembaca bisa mengikuti terus artikel
berikutnya.



Tidak ada komentar:
Posting Komentar