PuppetDB adalah generasi terbaru dari puppetlabs untuk menyimpan dan mengambil catalogs, facts, dan exported resources. Bagi siapapun yang telah banyak menggunakan puppet storeconfigs pasti akan merasa, bahwa storeconfigs lambat dalam mengambil data, ya hal ini wajar menurut penulis karena data yang telah di generate oleh puppet di simpan oleh storeconfigs kedalam sebuah database seperti MySQL, SQLite atau PostgreSQL. Jadi salah satu faktor lambatnya bergantung pula pada performa database yang digunakan, nah untuk menyelesaikan problema tersebut developer puppet membuat puppetDB, menurut penulis lebih cepat, lebih mudah dalam konfigurasi, dan lebih mudah juga dalam maintenance-nya. PuppetDB base Java jadi membutuhkan JVM untuk menjalankannya. Sebenarnya puppetdb di tempatkan pada relational database. Ada dua database yang di support yaitu HSQLDB dan PostgreSQL. Tetapi bila di config maka secara default akan menggunakan HSQLDB. Nah kali ini penulis akan menggunakan defaultnya dulu, karena pointnya kali ini adalah bagaimana setup PuppetDB. Silahkan baca artikel seletah ini sebagai kelanjutannya, yaitu PuppetDB dengan PostgreSQL. Ohya jangan harap PuppetDB akan mendukung MySQL karena tidak memiliki dukungan untuk query rekursif. Mari kita sama-sama pelajari bagaimana setup puppetDB. Berikut step yang akan kita lakukan:
1. Instalasi puppetDB
2. Firewalling
3. Setup puppetDB
4. Testing
Informasi melalui situs puppetlabs untuk versi terbaru adalah 1.0 memiliki fitur yang sungguh menggiurkan:
* It’s a drop-in, 100% compatible replacement for storeconfigs
* It’s a drop-in, 100% compatible replacement for inventory service
* It's already in production at many sites, handling thousands of nodes and
millions of resources
* It hooks into your Puppet infrastructure using Puppet’s pre-existing
extension points (catalog/facts/resource/node terminuses)
* It’s much faster, much more space-efficient, and much more scalable
than current storeconfigs and the current inventory service.
* We can handle a few thousand nodes, with several hundred
resources each, with a 30m runinterval on our laptops during
development.
* It stores the entire catalog, including all dependency and
containment information
* It exposes well-defined, HTTP-based methods for accessing stored information
* Documented at http://docs.puppetlabs.com/puppetdb
* It presents a superset of the storeconfigs and inventory service
APIs for use in scripts or by other tools
* In particular, we support arbitrarily nested boolean operators
* It decouples catalog and fact storage from the compilation process
* PuppetDB obsoletes previous puppetq functionality
* It works Very Hard to store everything you send it; we auto-retry
all storage requests, persist storage requests across restarts,
and preserve full traces of all failed requests for post-mortem analysis
* It’s secured using Puppet’s built-in SSL infrastructure
* It’s heavily instrumented and easy to integrate its performance info into
your monitoring frameworks
Versi 1.0 inilah yang akan kita mainkan, sebenarnya penulis sudah ingin mencoba dari versi 0.9 tapi menunggu versi ini agar lebih stabil.
1. Instalasi puppetDB
Sebelum menginstal berikut hal yang perlu kita perhatikan:1. Versi puppet pada konfigurasi ini adalah 3.0.0.1 open source
2. Sudah memiliki puppetmaster dan puppet agent yang berjalan
3. Sistem operasi yang penulis pakai adalah CentOS, compatible with Redhat.
4. Telah setup puppetlabs repository
5. puppetDB dan puppetmaster dalam satu host
untuk melakukan semua hal diatas, setupnya kita bisa lihat di unixhat.blogspot.com/2012/10/konfigurasi-puppet-dan-puppetmaster.html
Kita bisa melakukan instalasi puppetDB dengan menggunakan puppet atau dengan yum, tapi agar terlihat fitur puppet yang keren ini maka penulis menggunakannya :).
[root@LAB01-01 ~]# puppet resource package puppetdb ensure=latest /Package[puppetdb]/ensure: created package { 'puppetdb': ensure => '1.0.1-1.el5', }
Output diatas berarti puppetDB sudah terinstall beserta depencies yang dibutuhkannya, seperti openjdk, jpackage dkk, memang tidak terlihat, apa saja yang sedang di lakukan, tapi kalau kita buka terminal baru dan ketikkan ps ax maka akan terlihat apa yang puppet perbuat, sama dengan kita menginstall dengan yum.
[root@LAB01-01 ~]# ps ax 1666 pts/0 S+ 0:01 /usr/bin/ruby /usr/bin/puppet resource package puppetdb ensure=latest 1722 ? Ss 0:02 /usr/bin/python /usr/bin/yum -d 0 -e 0 -y install puppetdbKalau ingin melihat paket apa saja yang dibutuhkan atau telah di install kita bisa lihat pada log-nya yum:
[root@LAB01-01 ~]# tail /var/log/yum.log Oct 12 02:23:55 Installed: alsa-lib-1.0.17-1.el5.x86_64 Oct 12 02:23:56 Installed: libXtst-1.0.1-3.1.x86_64 Oct 12 02:23:57 Installed: jpackage-utils-1.7.3-1jpp.2.el5.noarch Oct 12 02:24:01 Installed: tzdata-java-2012f-1.el5.x86_64 Oct 12 02:24:18 Installed: 1:java-1.6.0-openjdk-1.6.0.0-1.28.1.10.9.el5_8.x86_64 Oct 12 02:24:40 Installed: puppetdb-1.0.1-1.el5.noarchTerlihat disana JVM dibalik layar puppetDB :). Selesai sudah tahap instalasi puppetDB, berikutnya adalah setup firewall pada puppetDB host agar bisa di akses.
2. Firewalling
PuppetDB menggunakan port 8081 untuk default lalu-lalang datanya. Silahkan bukalah port 8081 pada filewall pembaca, entah itu di cisco, solaris, linux, shorewall dll. Berikut contohnya pada linux:
[root@LAB01-01 ~]# iptables -A INPUT -p tcp -m state --state NEW --dport 8081 -j ACCEPTPerintah ipbtables diatas tidak di rekomendasikan pada production server. Karena membuka port 8081 untuk semua IP.
3. Setup puppetDB
Setelah install puppetDB dan setup firewall, saatnya untuk konfigurasi puppetDB, yaitu agar bisa berkomunikasi dengan puppetmaster. berikut yang akan kita lakukan:
a. Install plugin untuk puppetmaster
b. Setup puppetDB
a. puppetmaster membutuhkan plugin Ruby agar bisa menggunakan puppetDB, yaitu paket pe-puppetdb-terminus, penulis akan menggunakan puppet, mari kita install paket tersebut:
[root@LAB01-01 ~]# puppet resource package puppetdb-terminus ensure=latest /Package[puppetdb-terminus]/ensure: created package { 'puppetdb-terminus': ensure => '1.0.1-1.el5', }Cek keberadaan paket
[root@LAB01-01 ~]# rpm -qa|grep terminus puppetdb-terminus-1.0.1-1.el5
b. Setup puppetDB
Cek dimana posisi konfigurasi puppetmaster:
[root@LAB01-01 ~]# puppet config print confdir /etc/puppet [root@LAB01-01 ~]# ls -la /etc/puppet total 72 drwxr-xr-x 4 root root 4096 Oct 14 23:21 . drwxr-xr-x 82 root root 4096 Oct 15 00:02 .. -rw-r--r-- 1 root root 2979 Sep 28 13:34 auth.conf -rw-r--r-- 1 root root 381 Sep 21 15:06 fileserver.conf drwxr-xr-x 2 root root 4096 Oct 12 05:25 manifests drwxr-xr-x 2 root root 4096 Sep 28 13:34 modules -rw-r--r-- 1 root root 1056 Oct 14 23:15 puppet.confSelanjutnya buat file konfigurasi untuk puppetdb, yaitu puppetdb.conf pada folder /etc/puppet, dengan isi:
[main] server = LAB01-01.cloud.net port = 8081
berikut adalah contoh dari file yang sudah penulis buat:
[root@LAB01-01 puppet]# cat /etc/puppet/puppetdb.conf [main] server = LAB01-01.cloud.net port = 8081Kemudian tambahkan isi dari block config master, atau buat [master] jika belum ada:
[master] storeconfigs = true storeconfigs_backend = puppetdb
berikut contoh dari lengkapnya dari file penulis:
[root@LAB01-01 ~]# cat /etc/puppet/puppet.conf [main] # The Puppet log directory. # The default value is '$vardir/log'. logdir = /var/log/puppet # Where Puppet PID files are kept. # The default value is '$vardir/run'. rundir = /var/run/puppet # Where SSL certificates are kept. # The default value is '$confdir/ssl'. ssldir = $vardir/ssl [agent] # The file in which puppetd stores a list of the classes # associated with the retrieved configuratiion. Can be loaded in # the separate ``puppet`` executable using the ``--loadclasses`` # option. # The default value is '$confdir/classes.txt'. classfile = $vardir/classes.txt # Where puppetd caches the local configuration. An # extension indicating the cache format is added automatically. # The default value is '$confdir/localconfig'. localconfig = $vardir/localconfig [master] storeconfigs = true storeconfigs_backend = puppetdb
Perlu di perhatikan, jika sebelumnya telah menggunakan storeconfigs, silahkan hapus atau komen settingannya, agar puppet hanya menggunakan puppetDB.
berikutnya adalah membuat file routes.yaml, file ini berguna pada saat kita ingin membuat layanan inventaris pada host-host yang kita miliki sebagai puppet agent. Berikut file yang telah penulis buat:
[root@LAB01-01 puppet]# cat /etc/puppet/routes.yaml --- master: facts: terminus: puppetdb cache: yaml
Alhamdulillah selesai sudah tahap setup puppetDB, tahap akhir adalah dengan mengaplikasi file-file yang telah kita buat dan modifikasi tadi, dengan merestart puppetmaster:
[root@LAB01-01 puppet]# /etc/init.d/puppetmaster restart Stopping puppetmaster: [ OK ] Starting puppetmaster: [ OK ]
3. Testing
Saatnya melakukan percobaan untuk melakukan permintaan cataolog pada puppetmaster, dari puppet agent:
[root@LAB01-02 ~]# puppet agent --test Info: Retrieving plugin Info: Caching catalog for lab01-02.cloud.net Info: Applying configuration version '1350271290' Finished catalog run in 0.16 seconds
Sekarang kita menuju puppetmaster, lihat log dari puppetDb apakah puppetDB bisa menangkap data yang telah di generate oleh puppetmaster?
[root@LAB01-01 puppet]# tail /var/log/puppetdb/puppetdb.log 2012-10-14 23:21:30,147 INFO [command-proc-75] [puppetdb.command] [4c52c562-c705-4c53-ab05-bafa03419424] [replace facts] lab01-02.cloud.net 2012-10-14 23:21:31,503 INFO [command-proc-75] [puppetdb.command] [10757243-a180-4563-8db3-d591d3d626ae] [replace catalog] lab01-02.cloud.netYa, Alhamdullilah ada output yang mengindikasikan bahwa catalog puppet agent untuk lab01-02.cloud.net sudah di simpan. Demikian mengenai puppetDB semoga bermanfaat dan sebagai tanggung jawab penulis atas ilmu yang telah Alloh berikan, amiiinn.