Halo sobat sekolahlinux semua, kali ini saya coba untuk melanjutkan tutorial soal mongodb, nah kali ini saya akan membuat tutorial sharding, pada dasarnya konsep sharding pada mongodb ini mirip-mirip dengan RAID5 dan berfungsi juga sebagai loadbalancer, daripada panjang-panjang jelasin mending langsung praktek saja hehe 😀
OS Linux : Centos 7.x
MongoDB : Version 3.2
- mongos : 192.168.100.10
- configsvr : 192.168.100.20
- shardsvr1 : 192.168.100.30
- shardsvr2 : 192.168.100.40
- shardsvr3 : 192.168.100.50
NOTED: Untuk Production Tidak Disarankan Menggunakan 1 CONFIGSVR
SHARDSVR: shard dalam mongoDB terdiri dari beberapa server (mongod) dan didalamnya terdapat data hasil split. Beberapa server tersebut dalam shard membentuk replika set. sehingga dapat kita katakan suatu replika set berada pada suatu sharding.
MONGOS: melakukan routing terhadap request ke shard yang memiliki data tersebut. Pada saat aplikasi ini dijalankan. ia akan mengambil data dari config server.
CONFIGSVR: menyimpan konfigurasi mongos dan juga detail peletakan data yang di split di masing-masing shardsvr. configsvr bisa 1 atau 3
*CONFIGSVR
pertama buat dulu direktori untuk databasenya
mkdir -p /data/configdb
jalankan pada server configsvr
mongod --configsvr --port 27010
jika kalian ingin membuatnya menjadi sebuah file config, dan kemudian baru dijalankan kalian bisa membuat file config seperti dibawah ataupun mengcopy file mongod.conf dan lalu mengedit dalamnya menjadi seperti dibawah
vim /home/sekolahlinux/mongod1.conf
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: dbPath: /data/configdb journal: enabled: true # engine: # mmapv1: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces net: port: 27010 # bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. #security: #operationProfiling: #replication: sharding: clusterRole: configsvr ## Enterprise-Only Options #auditLog: #snmp:
jika sudah jalankan mongod dengan file konfigurasinya dengan perintah dibawah ini
mongod --config /home/mongod1.conf
*MONGOS
jalankan perintah dibawah pada terminal server mongos server
mongos --configdb 192.168.100.20:27010 --port 27011
jika configsvr ada 3 maka perintahnya jadi seperti ini, ganti “xx” dengan ip terakhir dari configsrv
mongos --configdb 192.168.100.20:27010,192.168.100.xx:27010,192.168.100.xx:27010 --port 27011
jika kalian ingin membuatnya menjadi sebuah file config, dan kemudian baru dijalankan kalian bisa membuat file config seperti dibawah ataupun mengcopy file mongod.conf dan lalu mengedit dalamnya menjadi seperti dibawah
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. #storage: # dbPath: /data/db # journal: # enabled: true # engine: # mmapv1: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces net: port: 27011 # bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. #security: #operationProfiling: #replication: #sharding: # clusterRole: configsvr sharding: configDB: 192.168.100.20:27010,192.168.100.xx:27010,192.168.100.xx:27010 # chunkSize: 5 ## Enterprise-Only Options #auditLog: #snmp:
jika sudah jalankan mongod dengan file konfigurasinya dengan perintah dibawah ini
mongos --config /home/mongod1.conf
*SHARDSVR
jangan lupa untuk membuat direktori untuk databasenya
mkdir -p /data/db
jalankan pada ke 3 shardsvr
mongod --port 27012 --dbpath /data/db
jika kalian ingin membuatnya menjadi sebuah file config, dan kemudian baru dijalankan kalian bisa membuat file config seperti dibawah ataupun mengcopy file mongod.conf dan lalu mengedit dalamnya menjadi seperti dibawah
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: dbPath: /data/db journal: enabled: true # engine: # mmapv1: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces net: port: 27012 # bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options #auditLog: #snmp:
jika sudah jalankan mongod dengan file konfigurasinya dengan perintah dibawah ini
mongod --config /home/mongod1.conf
*MONGOS
masuk ke mongo shell di mongos svr
mongo --port 27011
tambahkan shardsvr dengan command seperti dibawah jika shardsvr kalian standalone
mongos> sh.addShard("192.168.100.30:27012") mongos> sh.addShard("192.168.100.40:27012") mongos> sh.addShard("192.168.100.50:27012")
namun jika shardsvr kalian replicate makan commandnya menjadi seperti dibawah
mongos> sh.addShard( "rs1/192.168.100.30:27017" ) mongos> sh.addShard( "rs1/192.168.100.31:27017" ) mongos> sh.addShard( "rs1/192.168.100.32:27017" ) mongos> sh.addShard( "rs2/192.168.100.40:27017" ) mongos> sh.addShard( "rs2/192.168.100.41:27017" ) mongos> sh.addShard( "rs2/192.168.100.42:27017" ) mongos> sh.addShard( "rs3/192.168.100.50:27017" ) mongos> sh.addShard( "rs3/192.168.100.51:27017" ) mongos> sh.addShard( "rs3/192.168.100.52:27017" )
nama databasenya “students” dan nama documentnya “grades” dan untuk shared key “student_id” pemilihan shared key harus yang unik karena nantinya akan berkaitan dengan split data pada sharding server
mongos> use students mongos> sh.enableSharding("students") mongos> sh.shardCollection("students.grades", {"student_id" : 1})
jika terdapat error dari command terakhir yang ada diatas, yang pesannya kita harus mengindex shared key, jalankan perntah dibawah, jika sudah ulangi perintah terakhir yang tadi muncul error
mongos> use students mongos> db.grades.createIndex( { student_id: 1 } );
coba lakukan simulasi dengan memasukkan script ini pada mongo shell
mongos> use students mongos> for ( i = 200; i < 1000000; i++ ) { db.grades.insert({student_id: i, type: "exam", score : Math.random() * 100 }); db.grades.insert({student_id: i, type: "quiz", score : Math.random() * 100 }); db.grades.insert({student_id: i, type: "homework", score : Math.random() * 100 }); } WriteResult({ "nInserted" : 1 })
untuk melihat status sharding, coba lihat dibaris “chunks:” apakah sudah ada 3 shardsvr atau masih di 1 shardsvr, jika belum kemungkinan data yang masuk masih dibawah chunk size yang diterapkan
mongos> sh.status()
untuk melihat data document “grades” pada database “students” yang terdistribusi ke masing-masing sharding server
mongos> use students mongos> db.grades.getShardDistribution()
untuk melihat chunk size, secara default chunksize bernilai 64MB
mongos> use config mongos> db.settings.find() { "_id" : "chunksize", "value" : NumberLong(64) }
untuk merubah chunk size bisa dengan cara ini
mongos> use config mongos> db.settings.save( { _id:"chunksize", value: <sizeInMB> } )
Sekian tutorial kali ini, semoga bermanfaat ya 😀 dan selamat praktek, salam sekolahlinux.