Berbagi adalah proses MongoDB untuk menyimpan kumpulan data di berbagai mesin. Ini memungkinkan Anda untuk melakukan skala data horizontal, mempartisi data di seluruh instance independen, dan itu bisa berupa 'Set Replika'. Partisi kumpulan data pada 'Sharding' menggunakan kunci shard. Sharding memungkinkan Anda menambahkan lebih banyak mesin berdasarkan pertumbuhan data di tumpukan Anda.
Sharding dan Replikasi
Mari kita membuatnya sederhana. Ketika Anda memiliki koleksi musik, 'Sharding' akan menyimpan dan menyimpan koleksi musik Anda ke dalam folder yang berbeda. 'Replikasi', di sisi lain, hanya menyinkronkan koleksi musik Anda ke instance lain.
Tiga Komponen Sharding
Pecahan - Digunakan untuk menyimpan semua data, dan dalam lingkungan produksi, setiap pecahan adalah kumpulan replika. Menyediakan ketersediaan tinggi dan konsistensi data.
Server Konfigurasi - Digunakan untuk menyimpan metadata cluster, 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, dan kemudian 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
Untuk tutorial ini, kami 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:
boot ulang
Langkah 2 - Instal MongoDB di Semua Instance
Kami akan menggunakan MongoDB (MongoDB 3.4) terbaru untuk semua instance. 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 di bawah ini.
sudo yum -y install mongodb-org
Setelah mongodb terinstal, gunakan 'mongo ' atau 'mongod ' dengan cara berikut untuk memeriksa detail versi.
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 dengan perintah systemctl berikut.
systemctl stop mongod
Edit konfigurasi mongodb default 'mongod.conf '.
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
Di 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 hak kepemilikan direktori tersebut menjadi pengguna 'mongod'.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Selanjutnya, jalankan layanan mongod dengan perintah berikut.
mongod --config /etc/mongod.conf
Anda dapat memeriksa apakah layanan mongod berjalan pada port 27017 dengan perintah netstat.
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 server 4 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 dan hentikan layanan mongod (Jika layanan sedang berjalan), dan edit file konfigurasi MongoDB.
systemctl stop mongod
vim /etc/mongod.conf
Ubah penyimpanan default ke direktori khusus Anda.
penyimpanan:
dbPath:/data/db1
Di baris 'bindIP', ubah nilainya menjadi 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 dengan perintah di bawah ini:
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 gambar di bawah ini.
Hasil dari shardsvr3 dan shardsvr4 dengan nama kumpulan replika 'shardreplica02 '.
Ulangi langkah ini di shardsvr3 dan shardsvr4 server dengan nama kumpulan replika yang berbeda 'shardreplica02 '.
Sekarang kami telah membuat 2 set replika sebagai pecahan - 'shardreplica01 ' dan 'shardreplica02 '.
Langkah 5 - Konfigurasikan mongos/Router Kueri
'Query Router' atau mongos hanyalah contoh yang menjalankan 'mongos'. Anda dapat menjalankan mongos dengan file konfigurasi, atau menjalankannya hanya dengan baris perintah.
Masuk ke server mongos dan hentikan layanan MongoDB.
ssh [email protected]
systemctl stop mongod
Jalankan mongos dengan perintah 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 hasilnya di bawah.
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 5, 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 membagi status seperti yang ditunjukkan pada tangkapan layar di bawah ini.
Kami memiliki 2 set replika pecahan dan 1 instance mongos yang berjalan di tumpukan kami.
Langkah 7 - Pengujian
Sekarang kita akan menguji server MongoDB dengan mengaktifkan sharding dan kemudian menambahkan dokumen.
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 database - telah dipartisi ke set replika '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.
Menambahkan dokumen ke 'tumpukan' koleksi.
Sekarang masukkan dokumen ke koleksi. Saat kita menambahkan dokumen ke koleksi di sharded cluster, kita harus menyertakan 'shard key'.
Anda dapat menggunakan contoh di bawah ini. 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"],
})
Dokumen di berhasil ditambahkan ke koleksi, seperti yang ditunjukkan pada tangkapan layar berikut.
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 database, koleksi, dan dokumen yang tersedia di replika set.
Cluster sharded MongoDB pada CentOS 7 berhasil diinstal dan diterapkan.