Seberapa cepat replikasi MySQL?

19

Saya sedang mempertimbangkan untuk membuat replikasi mysql db kami untuk dapat memiliki budak lokal di masing-masing kantor cabang kami, sambil memiliki master di kantor utama untuk meningkatkan kinerja aplikasi (secara signifikan) di kantor cabang kami.

Db itu sendiri tidak sebesar itu (<1gb) tapi saya bertanya-tanya; mempertimbangkan 200-300 rekor pembaruan / puncak min: seberapa cepat replikasi? (dengan asumsi, pertama, koneksi dsl 5mb generik, lebih cepat jika perlu - mencoba menjaga biaya serendah mungkin tetapi uang ada di sana untuk lebih)

Apakah seluruh tabel direplikasi dalam batch? Apakah replikasi dilakukan, sesuai permintaan, karena setiap catatan dalam tabel diperbarui (dari dokumen, saya pikir saya melihat bahwa itu dapat dikonfigurasi)?

Catatan:

  • Saya sedang memikirkan pengaturan 1 master, 2 budak (2 kantor cabang untuk saat ini) seperti pada dokumen di sini kecuali bahwa itu adalah sebuah aplikasi, bukan klien web
  • Setiap pembaruan yang dilakukan pada master perlu mereplikasi ke budak lain dalam <10 menit.
  • Semua ini mengasumsikan bahwa saya bisa mendapatkan ORM kami (DevExpress XPO) senang dengan konsep membaca dari budak dan menulis kepada master.
Steven Evers
sumber

Jawaban:

21

Replikasi MySQL terjadi sedekat mungkin dengan waktu nyata, dibatasi oleh disk dan jaringan I / O. Budak membuka soket ke master, yang tetap terbuka. Ketika transaksi terjadi pada master, itu akan dicatat dalam binlog, dan hanya diputar ulang pada slave (s). Jika soket antara master dan slave terputus, binlog akan diputar ulang untuk slave setelah koneksi berhasil berikutnya.

Replikasi multi-master melakukan hal yang sama, tetapi di kedua arah.

Beberapa perhitungan dasar akan membantu Anda dalam menentukan kebutuhan bandwidth Anda dengan lebih baik.

Average transaction size * number of slaves * updates/minute = bandwidth needed

Semoga ini membantu.

Joe
sumber
4

Replikasi di sisi budak ditangani oleh dua utas independen.

  • Proses pembaca log, yang menghubungkan ke master, menerima setiap pernyataan modifikasi data, menulisnya ke log relai.
  • Proses penulis sql, yang mengambil item baru dari log relai, melakukan pernyataan pada database slave, lalu memindahkan pointer slave melewati pernyataan itu untuk menunjukkan penerimaan permintaan.

Latensi replikasi dibatasi oleh IO, pertama IO pada database slave untuk menerapkan transaksi dari log relay (yang mungkin melibatkan kueri SQL yang kompleks) dan kedua oleh IO pada master untuk membaca binlog dan mengirimkannya ke setiap slave.

Replikasi MySQL meningkatkan kapasitas membaca permintaan tetapi tidak meningkatkan kinerja menulis permintaan, yang terjaga keamanannya pada kecepatan IO dapat disiram ke binlog pada master, dan slave

Dave Cheney
sumber
3

Replikasi di MySQL cukup cepat untuk mendapatkan data ke slave (lebih cepat daripada Anda akan dapat menjalankan UPDATEpada master, dan beralih ke jendela lain untuk menjalankan SELECTpada slave, jika(dan hanya jika) koneksi jaringan semuanya dan semuanya berjalan OK. Setiap koneksi kelas-DSL harus baik-baik saja untuk kasus umum dari permintaan kecil reguler Anda, tetapi permintaan memasukkan / memperbarui besar dapat memakan waktu beberapa saat untuk menyalin, dan sinkronisasi ulang jika terjadi replikasi stuffup (dan MySQL rentan terhadap itu, sayangnya) akan memakan waktu cukup lama (menyalin seluruh database Anda dari master lagi). Ada trik untuk membatasi dampak sinkronisasi ulang pada master Anda, seperti menempatkan MySQL Anda di LVM sehingga Anda dapat melakukan kunci / snapshot yang sangat cepat dan rsync konten snapshot ke slave, tetapi akhirnya sinkronisasi akan menyedot.

womble
sumber