MongoDB part3 – sharding mongodb pada centos 7.x

0
1442

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.