Database cluster dan load balancing

149

Apa itu pengelompokan basis data? Jika Anda mengizinkan database yang sama berada di 2 server yang berbeda, bagaimana mereka menjaga data tetap tersinkronisasi. Dan bagaimana ini berbeda dari load balancing dari perspektif server database?

Malik Daud Ahmad Khokhar
sumber

Jawaban:

132

Database clustering adalah sedikit istilah yang ambigu, beberapa vendor menganggap sebuah cluster memiliki dua atau lebih server berbagi penyimpanan yang sama, beberapa yang lain menyebut sebuah cluster satu set server yang direplikasi.

Replikasi mendefinisikan metode di mana satu set server tetap disinkronkan tanpa harus berbagi penyimpanan agar dapat tersebar secara geografis, ada dua cara utama untuk melakukannya:

  • replikasi master-master (atau multi-master): Server apa pun dapat memperbarui database. Biasanya diurus oleh modul yang berbeda dalam database (atau beberapa perangkat lunak yang berbeda berjalan di atasnya dalam beberapa kasus).

    Kelemahannya adalah sangat sulit untuk melakukannya dengan baik, dan beberapa sistem kehilangan sifat ACID ketika dalam mode replikasi ini.

    Sisi positifnya adalah fleksibel dan Anda dapat mendukung kegagalan server mana pun selagi database diperbarui.

  • replikasi master-slave: Hanya ada satu salinan data otoritatif, yang didorong ke server slave.

    Kelemahannya adalah bahwa itu kurang toleran terhadap kesalahan, jika master mati, tidak ada perubahan lebih lanjut pada budak.

    Keuntungannya adalah lebih mudah dilakukan daripada multi-master dan biasanya mempertahankan properti ACID.

Load balancing adalah konsep yang berbeda, terdiri dari mendistribusikan kueri yang dikirim ke server-server tersebut sehingga bebannya didistribusikan secara merata. Biasanya dilakukan di lapisan aplikasi (atau dengan kolam koneksi). Satu-satunya hubungan langsung antara replikasi dan load balancing adalah bahwa Anda memerlukan replikasi untuk dapat memuat keseimbangan, jika tidak, Anda akan memiliki satu server.

Vinko Vrsalovic
sumber
1
Ah, lupa tentang replikasi :) Ya, Anda dapat mencapai load balancing seperti itu dalam kombinasi dengan logika level aplikasi :). +1
Jimmy Chandra
1
Dokumen Postgresql merujuk ke "database cluster" secara berbeda: "Sebelum Anda dapat melakukan apa pun, Anda harus menginisialisasi area penyimpanan database pada disk. Kami menyebutnya cluster database. (SQL menggunakan istilah katalog cluster.) Sebuah cluster database adalah kumpulan dari database yang dikelola oleh satu instance dari server database yang sedang berjalan. " postgresql.org/docs/8.3/static/creating-cluster.html
Donato
1
Apa arti properti ACID, atau lebih tepatnya, apa tepatnya yang Anda kehilangan jika Anda tidak melestarikannya?
TheStoryCoder
@TheStoryCoder Dalam ilmu komputer, ACID (Atomicity, Consistency, Isolasi, Durability) adalah seperangkat properti dari transaksi basis data yang dimaksudkan untuk menjamin validitas bahkan dalam hal terjadi kesalahan, gangguan daya, dll. Dalam konteks basis data, serangkaian basis data operasi yang memenuhi properti ACID (dan ini dapat dianggap sebagai operasi logis tunggal pada data) disebut transaksi. Misalnya, transfer dana dari satu rekening bank ke rekening bank lain, bahkan yang melibatkan banyak perubahan seperti mendebit satu rekening dan mengkredit rekening lain, adalah satu transaksi.
fizampou
17

Dari sudut pandang SQL Server:

Clustering akan memberi Anda konfigurasi aktif-pasif. Berarti dalam cluster 2 simpul, salah satunya akan menjadi aktif (melayani) dan yang lainnya akan pasif (menunggu untuk mengambil alih ketika simpul aktif gagal). Ini ketersediaan tinggi dari sudut pandang perangkat keras.

Anda dapat memiliki cluster aktif-aktif, tetapi akan membutuhkan beberapa contoh SQL Server yang berjalan di setiap node. (yaitu Instance 1 pada Node A gagal ke Instance 2 pada Node B, dan instance 1 pada Node B gagal ke instance 2 pada Node A).

Load balancing (setidaknya dari sudut pandang SQL Server) tidak ada (setidaknya dalam arti yang sama load balancing server web). Anda tidak dapat menyeimbangkan muatan dengan cara itu. Namun, Anda dapat membagi aplikasi Anda untuk berjalan pada beberapa database pada server 1 dan juga menjalankan pada beberapa database pada server 2, dll. Ini adalah rata-rata utama "load balancing" di dunia SQL.

Jimmy Chandra
sumber
9

Clustering menggunakan penyimpanan bersama dari beberapa jenis (drive cage atau SAN, misalnya), dan menempatkan dua ujung depan database di atasnya. Server ujung depan berbagi alamat IP dan nama jaringan cluster yang digunakan klien untuk terhubung, dan mereka memutuskan di antara mereka sendiri yang saat ini bertugas melayani permintaan klien.

Jika Anda bertanya tentang server basis data tertentu, tambahkan itu ke pertanyaan Anda dan kami dapat menambahkan detail tentang penerapannya, tetapi pada intinya, itulah pengelompokan itu.

SqlRyan
sumber
6

Database Clustering sebenarnya adalah mode replikasi sinkron antara dua atau lebih node dengan fungsi tambahan toleransi kesalahan ditambahkan ke sistem Anda, dan itu juga dalam arsitektur apa-apa bersama. Dengan tidak membagikan apa pun, itu berarti bahwa masing-masing node sebenarnya tidak berbagi sumber daya fisik seperti disk atau memori.

Sejauh menjaga data disinkronkan, ada server manajemen yang semua node data terhubung bersama dengan node SQL untuk mencapai ini (berbicara khusus tentang MySQL).

Sekarang tentang perbedaan: penyeimbangan beban hanyalah salah satu hasil yang dapat dicapai melalui pengelompokan, yang lain termasuk ketersediaan tinggi, skalabilitas dan toleransi kesalahan.

Puneet Misra
sumber