Berbagi adalah proses MongoDB untuk menyimpan kumpulan data di berbagai mesin. Ini memungkinkan Anda untuk melakukan skala data horizontal dan untuk mempartisi semua data di seluruh instance independen. Sharding memungkinkan Anda menambahkan lebih banyak mesin berdasarkan pertumbuhan data ke tumpukan Anda.
Sharding dan Replikasi
Mari kita membuatnya sederhana. Saat Anda memiliki koleksi musik, 'Sharding' akan menyimpan dan menyimpan koleksi musik Anda di folder yang berbeda pada instance atau set replika yang berbeda sementara 'Replication' hanya menyinkronkan koleksi musik Anda ke instance lain.
Tiga Komponen Sharding
Pecahan - Digunakan untuk menyimpan semua data. Dan di lingkungan produksi, setiap pecahan adalah set replika. Menyediakan ketersediaan tinggi dan konsistensi data.
Server Konfigurasi - Digunakan untuk menyimpan metadata cluster, dan berisi pemetaan kumpulan data cluster dan pecahan. Data ini digunakan oleh server mongos/query untuk mengirimkan operasi. Disarankan untuk menggunakan lebih dari 3 instans dalam produksi.
Router Mongos/Kueri - Ini hanya instance mongo yang berjalan sebagai antarmuka aplikasi. Aplikasi akan membuat permintaan ke instance 'mongos', lalu 'mongos' akan mengirimkan permintaan menggunakan kunci shard ke set replika shard.
Prasyarat
- Server 2 centOS 7 sebagai Kumpulan Replika Konfigurasi
- 10.0.15.31 configsvr1
- 10.0.15.32 configsvr2
- Server 4 CentOS 7 sebagai Kumpulan Replika Shard
- 10.0.15.21 shardsvr1
- 10.0.15.22 shardsvr2
- 10.0.15.23 shardsvr3
- 10.0.15.24 shardsvr4
- 1 server CentOS 7 sebagai mongos/Router Kueri
- 10.0.15.11 mongo
- Hak istimewa root
- Setiap server terhubung ke server lain
Langkah 1 - Nonaktifkan SELinux dan Konfigurasikan Host
Dalam tutorial ini, kita akan menonaktifkan SELinux. Ubah konfigurasi SELinux dari 'enforcing' menjadi 'disabled'.
Terhubung ke semua node melalui OpenSSH.
ssh [dilindungi email]
Nonaktifkan SELinux dengan mengedit file konfigurasi.
vim /etc/sysconfig/selinux
Ubah nilai SELINUX menjadi 'dinonaktifkan'.
SELINUX=dinonaktifkan
Simpan dan keluar.
Selanjutnya, edit file host di setiap server.
vim /etc/hosts
Tempel konfigurasi host berikut:
10.0.15.32 ConfigSvr2
10.0.15.11 Mongos
10.0.15.21 Shardsvr1
10.0.15.22 Shardsvr2
10.0.15.23 Shardsvr3
Simpan dan keluar.
Sekarang restart semua server menggunakan perintah reboot.
boot ulang
Langkah 2 - Instal MongoDB di semua instance
Kami akan menggunakan versi MongoDB terbaru (3.4) untuk semua instans. Tambahkan repositori MongoDB baru dengan menjalankan perintah berikut:
cat <<'EOF'>> /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb .org/static/pgp/server-3.4.asc
EOF
Sekarang instal MongoDB 3.4 dari repositori mongodb menggunakan perintah yum berikut.
sudo yum -y install mongodb-org
Setelah mongodb diinstal, Anda dapat menggunakan 'mongo ' atau 'mongod ' perintah.
mongod --version
Langkah 3 - Buat Kumpulan Replika Server Konfigurasi
Di bagian 'prasyarat', kami telah mendefinisikan server konfigurasi dengan 2 mesin 'configsvr1' dan 'configsvr2'. Dan pada langkah ini, kita akan mengonfigurasinya menjadi set replika.
Jika ada layanan mongod yang berjalan di server, hentikan menggunakan perintah systemctl.
systemctl stop mongod
Edit konfigurasi mongodb default 'mongod.conf ' menggunakan editor Vim.
vim /etc/mongod.conf
Ubah jalur penyimpanan DB ke direktori Anda sendiri. Kami akan menggunakan '/data/db1' untuk server pertama, dan direktori '/data/db2' untuk server konfigurasi kedua.
penyimpanan:
dbPath:/data/db1
Ubah nilai baris 'bindIP' ke alamat jaringan internal Anda - 'configsvr1' dengan alamat IP 10.0.15.31, dan server kedua dengan 10.0.15.32.
bindIP:10.0.15.31
Pada bagian replikasi, tetapkan nama replikasi.
replikasi:
replSetName:"replconfig01"
Dan di bawah bagian sharding, tentukan peran instance. Kami akan menggunakan dua contoh ini sebagai 'configsvr'.
sharding:
clusterRole:configsvr
Simpan dan keluar.
Selanjutnya, kita harus membuat direktori baru untuk data MongoDB, lalu mengubah pemilik direktori tersebut menjadi pengguna 'mongod'.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Setelah ini, jalankan layanan mongod dengan perintah di bawah ini.
mongod --config /etc/mongod.conf
Anda dapat menggunakan perintah netstat untuk memeriksa apakah layanan mongod berjalan pada port 27017 atau tidak.
netstat -plntu
Configsvr1 dan Configsvr2 siap untuk set replika. Hubungkan ke server 'configsvr1' dan akses mongo shell.
ssh [dilindungi email]
mongo --host configsvr1 --port 27017
Mulai nama set replika dengan semua anggota configsvr menggunakan kueri di bawah.
rs.initiate(
{
_id:"replconfig01",
configsvr:true,
anggota:[
{ _id :0, host :"configsvr1 :27017" },
{ _id :1, host :"configsvr2:27017" }
]
}
)
Jika Anda mendapatkan hasil '{ "ok" :1 } ', itu berarti configsvr sudah dikonfigurasi dengan set replika.
dan Anda akan dapat melihat simpul mana yang master dan simpul mana yang sekunder.
rs.isMaster()
rs.status()
Konfigurasi Config Server Replica Set telah selesai.
Langkah 4 - Buat Kumpulan Replika Shard
Pada langkah ini, kita akan mengkonfigurasi 4 server 'centos 7' sebagai server 'Shard' dengan 2 'Replica Set'.
- 2 server - 'shardsvr1 ' dan 'shardsvr2 ' dengan nama kumpulan replika:'shardreplica01 '
- 2 server - 'shardsvr3 ' dan 'shardsvr4 ' dengan nama kumpulan replika:'shardreplica02 '
Hubungkan ke setiap server, hentikan layanan mongod (Jika ada layanan yang berjalan), dan edit file konfigurasi MongoDB.
systemctl stop mongod
vim /etc/mongod.conf
Ubah penyimpanan default ke direktori khusus Anda.
penyimpanan:
dbPath:/data/db1
Pada baris 'bindIP', ubah nilainya untuk menggunakan alamat jaringan internal Anda.
bindIP:10.0.15.21
Di bagian replikasi, Anda dapat menggunakan 'shardreplica01 ' untuk contoh pertama dan kedua. Dan gunakan 'shardreplica02 ' untuk server pecahan ketiga dan keempat.
replication:
replSetName:"shardreplica01"
Selanjutnya, tentukan peran server. Kami akan menggunakan semua ini sebagai instance shardsvr.
sharding:
clusterRole:shardsvr
Simpan dan keluar.
Sekarang, buat direktori baru untuk data MongoDB.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Mulai layanan mongod.
mongod --config /etc/mongod.conf
Periksa apakah MongoDB berjalan menggunakan perintah berikut:
netstat -plntu
Anda akan melihat MongoDB berjalan di alamat jaringan lokal.
Selanjutnya, buat set replika baru untuk 2 instance pecahan ini. Hubungkan ke 'shardsvr1' dan akses mongo shell.
ssh [dilindungi email]
mongo --host shardsvr1 --port 27017
Mulai set replika dengan nama 'shardreplica01 ', dan anggotanya adalah 'shardsvr1 ' dan 'shardsvr2 '.
rs.initiate(
{
_id :"shardreplica01",
anggota:[
{ _id :0, host :"shardsvr1:27017" },
{ _id :1, host :"shardsvr2:27017" }
]
}
)
Jika tidak ada kesalahan, Anda akan melihat hasil seperti di bawah ini.
Hasil dari shardsvr3 dan shardsvr4 dengan nama kumpulan replika 'shardreplica02 '.
Ulangi langkah ini untuk shardsvr3 dan shardsvr4 server dengan nama kumpulan replika yang berbeda 'shardreplica02 '.
Sekarang kami telah membuat 2 set replika - 'shardreplica01 ' dan 'shardreplica02 ' - sebagai pecahan.
Langkah 5 - Konfigurasikan mongos/Router Kueri
'Query Router' atau mongos hanyalah contoh yang menjalankan 'mongos'. Anda dapat menjalankan mongo dengan file konfigurasi, atau menjalankan hanya dengan baris perintah.
Masuk ke server mongos dan hentikan layanan MongoDB.
ssh [email protected]
systemctl stop mongod
Jalankan mongos dengan baris perintah seperti yang ditunjukkan di bawah ini.
mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"
Gunakan opsi '--configdb' untuk menentukan server konfigurasi. Jika Anda sedang dalam produksi, gunakan setidaknya 3 server konfigurasi.
Anda akan melihat hasil yang mirip dengan berikut ini.
Berhasil terhubung ke configsvr1:27017
Berhasil terhubung ke configsvr2:27017
instance mongos sedang berjalan.
Langkah 6 - Tambahkan pecahan ke mongos/Perute Kueri
Buka shell lain dari langkah sebelumnya, sambungkan ke server mongo lagi, dan akses shell mongo.
ssh [dilindungi email]
mongo --host mongos --port 27017
Tambahkan server pecahan dengan kueri sh mongodb.
Untuk 'shardreplica01 ' contoh:
sh.addShard( "shardreplica01/shardsvr1:27017")
sh.addShard( "shardreplica01/shardsvr2:27017")
Untuk 'shardreplica02 ' contoh:
sh.addShard( "shardreplica02/shardsvr3:27017")
sh.addShard( "shardreplica02/shardsvr4:27017")
Pastikan tidak ada kesalahan dan periksa status pecahan.
sh.status()
Anda akan melihat status sharding yang mirip dengan tampilan screenshot berikut.
Kami memiliki 2 set replika pecahan dan 1 instance mongos yang berjalan di tumpukan kami.
Langkah 7 - Pengujian
Untuk menguji pengaturan, akses server mongo shell mongo.
ssh [dilindungi email]
mongo --host mongos --port 27017
Aktifkan Sharding untuk Database
Buat database baru dan aktifkan sharding untuk database baru.
gunakan lemp
sh.enableSharding("lemp")
sh.status()
Sekarang lihat status databasenya, sudah dipartisi ke replika set 'shardreplica01'.
Aktifkan Sharding untuk Koleksi
Selanjutnya, tambahkan koleksi baru ke database dengan dukungan sharding. Kami akan menambahkan koleksi baru bernama 'tumpukan' dengan 'nama' koleksi pecahan, dan kemudian melihat database dan status koleksi.
sh.shardCollection("lemp.stack", {"name":1})
sh.status()
Koleksi baru 'tumpukan' dengan 'nama' koleksi pecahan telah ditambahkan.
Tambahkan dokumen ke 'tumpukan' koleksi.
Sekarang masukkan dokumen ke koleksi. Saat kita menambahkan dokumen ke koleksi di sharded cluster, kita harus menyertakan 'shard key'.
Pada contoh di bawah, kami menggunakan kunci pecahan 'nama ', seperti yang kami tambahkan saat mengaktifkan sharding untuk koleksi.
db.stack.save({
"name":"LEMP Stack",
"apps":["Linux", "Nginx", "MySQL", "PHP"],
})
Seperti yang ditunjukkan pada tangkapan layar berikut, dokumen telah berhasil ditambahkan ke koleksi.
Jika Anda ingin menguji database, Anda dapat menghubungkan ke kumpulan replika 'shardreplica01 ' Server UTAMA dan buka shell mongo. Saya masuk ke server PRIMARY 'shardsvr2'.
ssh [dilindungi email]
mongo --host shardsvr2 --port 27017
Periksa database yang tersedia di set replika.
tampilkan dbs
gunakan lemp
db.stack.find()
Anda akan melihat bahwa database, koleksi, dan dokumen tersedia dalam kumpulan replika.
MongoDB Sharded Cluster pada CentOS 7 telah berhasil diinstal dan disebarkan.