Setup cluster scale shreding MongoDB


Alhamdulillah selain tema konfigurasi management yang penulis sukai(kena racun puppet kantor =D), sedari kuliah suka dengan yang namanya clustering, HA, failover, balancer, dan kawannya, pokoknya yang menyangkut urusan reliability, availability, dan serviceability (RAS). Tugas akhir kuliah (skripsi) juga iseng-iseng membuat failover clustering di sebuah Kementrian Republik Indonesia.

Artikel kali ini bukan tugas dari kantor, tapi "memanfaatkan waktu untuk rasa ingin tau dan berbagi ilmu" :). InshaAlloh mencari ridho-Nya. Dari sekedar bincang punya bincang dengan teman satu divisi, soal apa itu hadoop, bagaimana cara kerja hadoop, apakah hadoop clustering, dari pada penasaran penulis coba oprekin, weiitss tunggu dulu, kita belum akan bermain dengan hadoop disini, karena bicara hadoop luas, bicara HDFS, Mapreduce dll, akan penulis post di kesempatan lainnya. Sekarang kita bermain dengan MongoDB dulu yang tak kalah saktinya dengan hadoop, yang bisa melakukan replikasi, clustering dll.

Sebelum membahas si MongoDB lebih lanjut berikut cakupan hal-hal yang akan penulis bahas:



1. Penjelesan singkat MongoDB
2. Instalasi MongoDB
3.


1. Penjelesan singkat MongoDB
Dengan mudah kita Documen-oriented storage, full index support, replication & high availability, auto-sharding, querying, fast in-place updates, map/reduce, gridFS

2. Instalasi MongoDB
Disini kita akan membahas soal instalasi, penjelasan konfigurasi, error yang akan di temui, opsi untuk noprealloc, dan testingnya.

a. Tambahkan repository untuk MongoDB untuk versi 64 bit ya, sehingga seperti berikut:
[root@LAB01-01 ~]# cat /etc/yum.repos.d/mongodb.repo
[mongoDB]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1

b. Lakukan instalasi
[root@LAB01-01 ~]# yum install mongo-10gen mongo-10gen-server
Installing:
 mongo-10gen             x86_64        2.2.0-mongodb_1
 mongo-10gen-server      x86_64        2.2.0-mongodb_1

Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 50 M

c. Tools yang di instal pada saat instalasi paket:
[root@LAB01-01 ~]# mongo
mongo         mongodump     mongofiles    mongooplog    mongorestore  mongostat  
mongod        mongoexport   mongoimport   mongoperf     mongos        mongotop    

d. Penjelasan konfigurasi
1. /etc/mongod.conf:file konfigurasi dari mongod, untuk setiap instance
2. /etc/rc.d/init.d/mongod: init script untuk mongod
3. /var/lib/mongo: Letak dimana data untuk MongoDB disimpan (area berbahaya)
4. /var/log/mongo: Letak file log dari mongo



Sun Oct 21 01:53:42 [initandlisten] ERROR: Insufficient free space for journal files
Sun Oct 21 01:53:42 [initandlisten] Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles


Sun Oct 21 01:59:45 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /var/lib/mongo/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating


 1643 pts/0    S+     0:00 /bin/bash /etc/init.d/mongod start
 1650 pts/0    S+     0:00 runuser -s /bin/bash mongod -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/bin/mongod -f /etc/mongod.conf
 1651 ?        Ss     0:00 bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/bin/mongod -f /etc/mongod.conf
 1652 ?        Sl     0:00 /usr/bin/mongod -f /etc/mongod.conf
 1654 ?        Ss     0:00 /usr/bin/mongod -f /etc/mongod.conf
 1655 ?        Dl     0:06 /usr/bin/mongod -f /etc/mongod.conf

[root@LAB01-01 ~]# /etc/init.d/mongod start
Starting mongod: all output going to: /var/log/mongo/mongod.log
forked process: 1655
child process started successfully, parent exiting
                                                           [  OK  ]


[root@LAB01-01 ~]# ll /var/lib/mongo/journal/
total 3148824
-rw------- 1 mongod mongod 1073741824 Oct 21 02:03 j._0
-rw------- 1 mongod mongod 1073741824 Oct 21 02:03 prealloc.1
-rw------- 1 mongod mongod 1073741824 Oct 21 02:03 prealloc.2


> db.coba.save( { a: 1 } )
Can't take a write lock while out of disk space

[root@LAB01-01 ~]# mongod --noprealloc --dbpath /var/lib/mongo
note: noprealloc may hurt performance in many applications
Sun Oct 21 02:24:21 [initandlisten] MongoDB starting : pid=1586 port=27017 dbpath=/var/lib/mongo 64-bit host=LAB01-01.cloud.net
Sun Oct 21 02:24:21 [initandlisten] db version v2.2.0, pdfile version 4.5
Sun Oct 21 02:24:21 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
Sun Oct 21 02:24:21 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Sun Oct 21 02:24:21 [initandlisten] options: { dbpath: "/var/lib/mongo", noprealloc: true }
Sun Oct 21 02:24:21 [initandlisten] journal dir=/var/lib/mongo/journal
Sun Oct 21 02:24:21 [initandlisten] recover : no journal files present, no recovery needed
Sun Oct 21 02:24:21 [websvr] admin web console waiting for connections on port 28017
Sun Oct 21 02:24:21 [initandlisten] waiting for connections on port 27017
Sun Oct 21 02:26:01 [initandlisten] connection accepted from 127.0.0.1:38367 #1 (1 connection now open)
Sun Oct 21 02:26:12 [FileAllocator] allocating new datafile /var/lib/mongo/test.ns, filling with zeroes...
Sun Oct 21 02:26:12 [FileAllocator] creating directory /var/lib/mongo/_tmp
Sun Oct 21 02:26:13 [FileAllocator] done allocating datafile /var/lib/mongo/test.ns, size: 16MB,  took 0.607 secs
Sun Oct 21 02:26:13 [FileAllocator] allocating new datafile /var/lib/mongo/test.0, filling with zeroes...
Sun Oct 21 02:26:15 [FileAllocator] done allocating datafile /var/lib/mongo/test.0, size: 64MB,  took 2.266 secs
------------------
Sun Oct 21 02:26:15 [conn1] build index test.test { _id: 1 }
Sun Oct 21 02:26:15 [conn1] build index done.  scanned 0 total records. 0.001 secs
Sun Oct 21 02:26:15 [conn1] insert test.test keyUpdates:0 locks(micros) w:2934869 2935ms



[root@LAB01-01 ~]# mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.test.save( { a: 1 } )
> db.test.find()
{ "_id" : ObjectId("50839584f45669036666ef3c"), "a" : 1 }