MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB yang Dihosting Sendiri

Anda mungkin menghosting MongoDB Anda di penyedia layanan cloud yang andal, misalnya Atlas, karena Anda benar-benar ingin fokus pada ide Anda dan mendelegasikan semua area manajemen kunci yang halus seperti jaringan, penyimpanan, akses, dll.

Semuanya terlihat bagus pada awalnya sampai ide kecil Anda mulai berubah menjadi bisnis dan biayanya mulai meroket. Meskipun bukan itu masalahnya, postingan ini akan tetap memberi Anda gambaran umum tentang kerumitan teknis yang terlibat (dan banyak uang yang dihemat!) jika Anda ingin bermigrasi ke solusi yang dihosting sendiri.

BTW, berapa banyak penghematan yang kita bicarakan? Mari kita lakukan perbandingan cepat antara Atlas instance dan MongoDB yang dihosting sendiri di AWS .

Atlas (~$166/bulan)

$0,23/jam berdasarkan persyaratan yang dipilih di atas (~ cloud.mongodb.com)



AWS (~$36/bulan)

$0,0416/jam untuk instans dan harga tambahan berdasarkan jenis dan penyimpanan EBS (~ kalkulator.aws)

Penghematan hampir 4,5x hanya dalam hal infrastruktur!

Sekarang setelah Anda mengetahui alasan utamanya dan masih membaca postingan ini, tanpa basa-basi lagi, mari selami teknologinya.

Garis Besar

  1. Menyiapkan infrastruktur
  2. Menyiapkan MongoDB
  3. Migrasi massal
  4. Sinkronisasi delta untuk menjembatani latensi sakelar koneksi (tidak berlaku untuk kluster basi)

Karena seluruh konten bisa sedikit melelahkan di satu tempat, saya akan membaginya menjadi 2 postingan terkait.

1. Menyiapkan Infrastruktur

Saya akan menyebutkan di bawah panduan untuk menyiapkan instance yang menjalankan RedHat Enterprise Linux 8 di AWS. Ini karena MongoDB umumnya berkinerja lebih baik dengan sistem file xfs. Berikut ini artikel untuk memahaminya dengan lebih baik.

Memutar Instans EC2

Saya telah menggunakan t3.small instance yang datang dengan 2 vCPU dan 2Gb RAM meskipun Anda dapat memilih contoh pilihan Anda.

Direkomendasikan bahwa DB Anda harus memiliki akses ke setidaknya 1GB RAM dan 2 inti asli karena hal itu secara langsung memengaruhi kinerja selama mekanisme caching &konkurensi seperti yang ditangani oleh mesin default WiredTiger . Anda dapat membaca lebih lanjut tentang catatan produksi yang terkait dengan persyaratan RAM dan CPU di sini .

Ikhtisar Konfigurasi:

  • OS:Redhat Enterprise Linux 8 (berbasis intel x64)
  • Jenis Instance:t3.small
  • Penyimpanan:10 GB (os) + 30 GB (data) + 3 GB (log) dari EBS yaitu 3 volume terpisah

Saya berasumsi bahwa Anda sudah terbiasa membuat VM di AWS.

Sekarang, setelah instance dalam status berjalan, tetapkan IP Elastis untuk itu dan kemudian cukup lakukan login jarak jauh ke dalam mesin.

Kami membutuhkan IP Elastis untuk menyiapkan nama host publik untuk instance

$ ssh -i <PEM_FILE> ec2-user@<ELASTIC_IP>

Pasang Volume Tambahan

Kami telah menambahkan 2 volume EBS tambahan selain FS Root untuk Data dan Log yang belum dipasang (Ingat 30Gb dan 3Gb? ). Anda dapat membuat daftar blok volume menggunakan,

$ sudo lsblk

Volume tambahan akan dicantumkan tepat setelah blok root (lihat panah)

Pada gambar di atas, Anda dapat melihat bahwa volume tambahan diberi nama

  1. xvdb (Ruang 30 Gb untuk menyimpan data)
  2. xvdc (3 Gb ruang untuk menyimpan log)

Sekarang, mari kita buat sistem file dalam volume tersebut.

$ sudo mkfs.xfs -L mongodata /dev/xvdb
$ sudo mkfs.xfs -L mongologs /dev/xvdc

-L adalah opsi alias untuk menyetel label volume

Dan kemudian pasang volumenya.

$ sudo mount -t xfs /dev/xvdb /var/lib/mongo
$ sudo mount -t xfs /dev/xvdc /var/log/mongodb

Agar perubahan ini terlihat, sistem harus di-boot ulang. Oleh karena itu, sekarang kita juga membutuhkan kegigihan partisi sehingga jika terjadi reboot yang tidak disengaja, kita tidak kehilangan penyimpanan Database.

Kita dapat mencapai ini dengan menentukan aturan pemasangan di file fstab. Anda dapat membaca lebih lanjut di sini.

Sebelum itu mari kita salin UUID dari partisi di atas (karena mereka unik dan tidak akan berubah setelah sistem restart )

$ sudo blkid

Salin UUID yang terdaftar untuk /dev/xvdb dan /dev/xvdc . Lihat “LABEL” untuk identifikasi blok

Sekarang buka /etc/fstab file dan rekatkan konfigurasi dalam format berikut.

UUID=<COPIED_UUID_FOR_DATA> /var/lib/mongo xfs defaults,nofail 0 0
UUID=<COPIED_UUID_FOR_LOGS> /var/log/mongodb xfs defaults,nofail 0 0

Perbarui Nama Inang

Nama host akan digunakan untuk mengidentifikasi server database Anda di jaringan. Anda dapat menggunakan IP Elastis yang ditetapkan di atas atau Nama domain (jika tersedia). Buka /etc/hostname file dan tambahkan entri. Untuk mis.

ip-xx.us-east-2.compute.internal **<ELASTIC_IP> <DOMAIN_1> <DOMAIN_2>** ...

Perbarui Batas Proses (Opsional)

Ini opsional diperlukan untuk mengontrol jumlah maksimum koneksi yang dapat diterima sambil menjaga sistem tetap stabil. Buka /etc/security/limits.conf file dan tambahkan entri berikut.

* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000

Sekarang setelah semua prasyarat terkait infra diurutkan, boot ulang instance, dan mari kita lanjutkan ke instalasi MongoDB.

1. Menyiapkan MongoDB

Tambahkan Sumber Repo

Buat file /etc/yum.repos.d/mongodb-org.4.2.repo dan tambahkan detail repositori paket berikut.

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

Sekarang mari kita instal MongoDB.

$ sudo yum -y install mongodb-org

Buat direktori dan izin penyiapan

MongoDB secara default menggunakan jalur berikut untuk menyimpan data dan log internal:

/var/lib/mongo → Data
/var/log/mongodb → Log

Buat direktori

$ sudo mkdir /var/lib/mongo
$ sudo mkdir /var/log/mongodb

Ubah izin pengguna &grup

$ sudo chown mongod:mongod /var/lib/mongo
$ sudo chown mongod:mongod /var/log/mongod

Buat Pengguna Admin

daemon/layanan mongod harus dijalankan terlebih dahulu sebelum kita melanjutkan untuk membuat pengguna. Mari kita gunakan konfigurasi default (disimpan di /etc/mongod.conf ) untuk saat ini dan mulai proses daemon.

$ sudo -u mongod mongod -f /etc/mongod.conf

Perintah di atas akan memulai daemon mongod dalam mode fork (default).

Sekarang, mari login ke server dan buat pengguna admin pertama kita.

Buka cangkang mongo

$ mongo

Gunakan database "admin" untuk membuat root-admin

> use admin

Buat pengguna admin

> db.createUser({user: "admin", pwd: "password", roles: [{role: "root", db: "admin"}]})

Buat pengguna biasa

> db.createUser({user: "normal_user", pwd: "password", roles: [{role: "readWriteAnyDatabase", db: "admin"}]})

Matikan server untuk saat ini. Kami akan memulai ulang lagi dengan konfigurasi yang dimodifikasi

> db.shutDownServer()

Menyiapkan Otentikasi

Di sini, kami akan mengaktifkan otentikasi basis data dan memodifikasi alamat-bind agar server kami dapat diakses di domain publik. Buka /etc/mongod.conf dan buat perubahan di bawah ini.

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0 # accessible on the network address
security:
  authorization: enabled # creds will be required for making db operations

Simpan konfigurasi dan mulai ulang server.

$ sudo -u mongod mongod -f /etc/mongod.conf

Uji Masuk

Anda dapat memverifikasi apakah kredensial berfungsi menggunakan,

$ mongo -u admin -p password

Itu saja tentang pengaturan awal! Harap pantau terus postingan terkait saya berikutnya tentang proses migrasi mendetail dan kiat-kiat untuk menjaga produksi DB tetap siap.

P.S. Terima kasih kepada Piyush Kumar karena telah membantu menyusun postingan ini!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengubah nama koleksi di luwak.model?

  2. Bagaimana cara membuat kueri case-insensitive di Mongodb?

  3. Cara Memformat Angka dalam SQL

  4. Tidak peka huruf besar indeks unik Mongo

  5. MongoDB - Kueri Proyeksi