Replikasi telah banyak diterapkan dalam sistem database untuk memastikan ketersediaan data yang tinggi melalui pembuatan redundansi. Ini pada dasarnya adalah strategi untuk membuat salinan data yang sama di server yang berjalan berbeda yang mungkin berada di mesin yang berbeda sehingga, jika terjadi kegagalan pada server utama, server lain dapat dibawa untuk melanjutkan penyajian.
Kumpulan replika adalah grup instans MongoDB yang memelihara kumpulan data yang sama. Mereka adalah dasar dari penyebaran produksi. Replikasi menguntungkan karena data selalu tersedia dari server yang berbeda untuk berjaga-jaga jika sistem server utama gagal. Selain itu, ini meningkatkan throughput baca dengan memungkinkan klien mengirim permintaan baca ke server yang berbeda dan mendapatkan respons dari yang terdekat.
Sebuah set replika merupakan beberapa node bantalan data yang dapat di-host di mesin yang berbeda dan node arbiter. Salah satu node bantalan data ini diberi label sebagai primer sementara yang lain adalah node sekunder. Node utama menerima semua operasi tulis dan kemudian mereplikasi data ke node lain setelah operasi tulis selesai dan perubahan dicatat dalam oplog.
Arbiter adalah contoh tambahan yang tidak memelihara kumpulan data tetapi memberikan kuorum dalam kumpulan replika dengan menanggapi detak jantung dan permintaan pemilihan oleh anggota kumpulan replika lainnya. Dengan demikian, mereka mengurangi biaya pemeliharaan kumpulan replika daripada berfungsi penuh anggota kumpulan replika dengan kumpulan data.
Kegagalan Otomatis
Node utama mungkin gagal karena beberapa alasan seperti pemadaman listrik atau pemutusan jaringan sehingga tidak dapat berkomunikasi dengan anggota lain. Jika komunikasi terputus selama lebih dari periode ElectionTimeoutMillis yang dikonfigurasi, salah satu sekunder akan meminta pemilihan untuk mencalonkan dirinya sebagai primer baru. Jika pemilihan selesai dan sukses, cluster akan melanjutkan operasi normal. Selama periode ini, tidak ada operasi tulis yang dapat dilakukan. Namun, kueri baca dapat dikonfigurasi untuk berjalan seperti biasa di sekunder saat primer offline.
Untuk proses replikasi yang optimal, waktu rata-rata sebelum cluster memilih primer baru maksimal harus 12 detik dengan pengaturan konfigurasi replikasi default. Hal ini mungkin dipengaruhi oleh faktor-faktor seperti latensi jaringan yang dapat memperpanjang waktu sehingga orang harus mempertimbangkan arsitektur cluster untuk memastikan waktu ini tidak disetel terlalu tinggi.
Nilai untuk selectionTimeoutMillis dapat diturunkan dari default 10000 (10 detik) sehingga primer dapat dideteksi pertama kali selama sangat cepat. Namun, ini mungkin sering memanggil pemilihan bahkan untuk faktor-faktor kecil seperti latensi jaringan sementara meskipun node utama sehat. Ini akan menyebabkan masalah seperti rollback untuk operasi tulis.
Bisa untuk Kumpulan Replika
Seperti disebutkan, set replika mungkin memiliki anggota dari mesin host yang berbeda sehingga membuatnya lebih kompleks untuk mempertahankan cluster. Kami membutuhkan satu platform dari mana set replika ini dapat dipelihara dengan mudah. Ansible adalah salah satu alat yang memberikan gambaran umum yang lebih baik untuk mengonfigurasi dan mengelola kumpulan replika. Jika Anda baru mengenal kemungkinan, baca ringkasan singkat dari artikel ini untuk memahami dasar-dasar seperti membuat buku pedoman.
Parameter Konfigurasi
- arbiter_at_index: ini mendefinisikan posisi arbiter dalam daftar anggota kumpulan replika. Seorang arbiter ingat tidak memiliki data sebagai anggota lain dan tidak dapat digunakan sebagai simpul utama. Ini hanya tersedia untuk membuat kuorum selama pemilihan. Misalnya, jika Anda memiliki jumlah anggota yang genap, ada baiknya menambahkan arbiter sehingga jika suaranya sama, ia menambahkan 1 untuk membuat anggota yang menang. Nilai yang akan diberikan harus berupa bilangan bulat.
- chaining_allowed: Ini mengambil nilai boolean dan menentukan apakah anggota sekunder lainnya harus mereplikasi dari anggota sekunder lainnya jika chaining _allowed =true. Sebaliknya jika chaining _allowed =false, anggota sekunder lainnya hanya dapat mereplikasi dari yang utama. Nilai default adalah true.
- election_timeout_secs: secara default nilainya adalah 10000 (mengambil nilai integer). Ini adalah waktu dalam milidetik untuk mendeteksi ketika node utama tidak dapat dijangkau atau lebih tepatnya tidak berkomunikasi dengan anggota lain sehingga memicu pemilihan. Atur ini ke nilai median 12 detik. Jika diatur terlalu tinggi, akan memakan waktu lama sebelum mendeteksi kegagalan primer dan karenanya lebih lama untuk melakukan pemilihan. Karena ini memengaruhi operasi penulisan, Anda mungkin akan kehilangan banyak data selama periode tersebut. Sebaliknya jika terlalu rendah, akan sering terjadi pemicuan pilkada meski kasusnya tidak terlalu serius dan primer masih bisa dijangkau. Akibatnya, Anda akan memiliki begitu banyak rollback untuk operasi tulis yang pada titik tertentu dapat menyebabkan integritas atau inkonsistensi data yang buruk.
- detak jantung_timeout_secs: Perangkat replika perlu berkomunikasi satu sama lain sebelum pemilihan dengan mengirimkan sinyal yang disebut sebagai detak jantung. Anggota kemudian perlu menanggapi sinyal ini dalam jangka waktu tertentu yang secara default diatur ke 10 detik. Heartbeat_timeout_secs adalah jumlah detik replika set anggota menunggu detak jantung yang sukses dari satu sama lain dan jika anggota tidak merespons, itu ditandai sebagai tidak dapat diakses. Namun, ini hanya berlaku untuk protokol versi 0. Oleh karena itu, nilai untuk ini adalah bilangan bulat.
- login_host: Ini adalah host yang menampung database login. Secara default untuk MongoDB adalah localhost.
- login_database: defaultnya adalah admin dan tempat kredensial login disimpan. (mengambil nilai string)
- pengguna_login: nama pengguna yang digunakan untuk otentikasi.(mengambil nilai string)
- login_password: kata sandi untuk mengautentikasi pengguna. (mengambil nilai string)
- login_port: Ini adalah port MongoDB untuk host masuk. (mengambil nilai integer)
- anggota: mendefinisikan daftar anggota set replika. Ini adalah string yang dipisahkan dengan koma atau daftar yaml yaitu mongodb0:27017,mongodb2:27018,mongodb3:27019… Jika tidak ada nomor port, maka 27017 diasumsikan.
- versi_protokol: mengambil bilangan bulat yang mendefinisikan versi proses replikasi. Entah 0 atau 1
- replika_set: ini adalah nilai string yang mendefinisikan nama set replika.
- ssl: nilai boolean yang menentukan apakah akan menggunakan koneksi SSL saat menghubungkan ke database atau tidak.
- ssl_certs_reqs: ini menentukan apakah sertifikat diperlukan dari sisi lain koneksi dan jika ada kebutuhan untuk memvalidasinya jika disediakan. Pilihan untuk ini adalah CERT_NONE, CERT_OPTIONAL dan CERT_REQUIRED. Standarnya adalah CERT_REQUIRED.
- validasi: mengambil nilai boolean yang menentukan apakah akan melakukan validasi dasar pada konfigurasi set replika yang disediakan. Nilai default adalah true.
Membuat Kumpulan Replika MongoDB Menggunakan Ansible
Berikut adalah contoh tugas sederhana untuk menyiapkan set replika di ansible. Sebut saja file ini task.yaml
# Create a replicaset called 'replica0' with the 3 provided members
- name: Ensure replicaset replica0 exists
mongodb_replicaset:
login_host: localhost
login_user: admin
login_password: root
replica_set: replica0
arbiter_at_index:2
election_timeout_secs:12000
members:
- mongodb1:27017
- mongodb2:27018
- mongodb3:27019
when: groups.mongod.index(inventory_hostname) == 0
# Create two single-node replicasets on the localhost for testing
- name: Ensure replicaset replica0 exists
mongodb_replicaset:
login_host: localhost
login_port: 3001
login_user: admin
login_password: root
login_database: admin
replica_set: replica0
members: localhost:3000
validate: yes
- name: Ensure replicaset replica1 exists
mongodb_replicaset:
login_host: localhost
login_port: 3002
login_user: admin
login_password: secret
login_database: root
replica_set: replica1
members: localhost:3001
validate: yes
Di buku pedoman kami, kami dapat memanggil tugas seperti
---
- hosts: ansible-test
remote_user: root
become: yes
Tasks:
- include: tasks.yml
Jika Anda menjalankan ini di playbook Anda, ansible-playbook -i inventory.txt -c ssh mongodbcreateReplcaSet.yaml Anda akan diberikan respons jika set replika telah dibuat atau belum. Jika kunci mongodb_replicaset dikembalikan dengan nilai sukses dan deskripsi set replika yang telah dibuat, maka Anda siap melakukannya.
Kesimpulan
Di MongoDB umumnya membosankan untuk mengonfigurasi set replika untuk instance mongod yang mungkin di-host oleh mesin yang berbeda. Namun, Ansible menyediakan platform sederhana untuk melakukan hal yang sama dengan hanya mendefinisikan beberapa parameter seperti yang dibahas di atas. Replikasi adalah salah satu proses yang memastikan operasi aplikasi yang berkelanjutan maka harus dikonfigurasi dengan baik dengan menetapkan beberapa jumlah anggota di dunia produksi. Seorang arbiter digunakan untuk membuat kuorum selama proses pemilihan maka harus dimasukkan dalam file konfigurasi dengan menentukan posisinya.