Replikasi MySQL di server yang terpisah secara geografis

11

Organisasi saya telah mencari cara untuk menyebarkan server kami di sekitar secara geografis sambil menjaga cadangan sangat up to date, dan idealnya menyebarkan beban.

Hal pertama yang saya pikirkan adalah Rails di MySQL. Tingkat penulisan tidak terlalu tinggi (artikel / komentar dibiarkan kurang dari 1 per menit, meskipun beberapa memiliki lampiran media besar).

Begitu,

  • apakah replikasi MySQL bekerja dengan baik di seluruh jaringan area luas?
  • Apakah koneksi (atau server slave) turun berarti intervensi manual diperlukan (begitu kedua server dapat saling berbicara lagi) atau apakah pemulihan otomatis?
  • Jika master menghilang, apa yang diperlukan untuk mengubah budak menjadi master? Apakah ada skrip / alat standar untuk membantu mengelola itu?
  • Gotchas lain dll?
Hamish Downer
sumber

Jawaban:

6

Kami menggunakan replikasi di pusat data di beberapa negara Eropa (sehingga mereka tidak saling berbeda satu sama lain, tetapi mereka tentu saja bukan lokal) dan ini bekerja tanpa masalah.

Replikasi akan dimulai kembali secara otomatis jika memungkinkan. Jika ada masalah dengan kueri (mis. Database hadir pada master dan bukan slave, dan kueri menggunakannya), maka itu akan memerlukan koreksi manual secara default (tetapi Anda dapat mengaturnya untuk mengabaikan kesalahan seperti itu). Jika database adalah mirror yang tepat, maka Anda seharusnya tidak perlu me-restart replikasi secara manual.

Jika Anda memiliki dua server dan master menghilang, maka untuk mengubah budak menjadi 'master', hentikan replikasi dan ubah kode Anda (untuk menulis ke 'master' baru). Jika Anda memiliki tiga atau lebih server dan master menghilang, maka hentikan replikasi pada slave, ubah mereka untuk menggunakan master baru, dan mulai lagi. Jika mereka tidak benar-benar sinkron (tergantung seberapa banyak data yang ditransfer, seberapa sibuk server, seberapa baik koneksi jaringan, dll), maka Anda mungkin harus melakukan lebih banyak pekerjaan daripada itu. Bagian replikasi dari dokumentasi MySQL membahas hal ini lebih terinci .

Saya menyarankan agar Anda memastikan bahwa Anda mereplikasi lebih dari SSL (yaitu mengatur pengguna replikasi untuk memerlukan koneksi SSL).

Tony Meyer
sumber
4

Replikasi berubah secara dramatis di MySQL 5.1. Di 5.0 hanya Replikasi Berbasis Pernyataan yang digunakan. Anda sekarang memiliki opsi untuk melakukan Replikasi Berbasis Baris atau Replikasi Berbasis Campuran. Ini akan sangat memengaruhi cara Anda mereplikasi WAN.

Jika Anda memiliki kemampuan untuk: A) Melakukan IP take over (jika server Anda terpisah secara geografis, ini tidak mungkin) B) Membuat perubahan DNS dengan gesit Anda dapat menghindari memodifikasi kode aplikasi / konfigurasi untuk mengubah master. Kami menggunakan DNS internal dengan caching pendek dan domain internal palsu. Jika kita perlu mengubah masterdb.internal menjadi server lain, dalam 5 detik perubahan akan terjadi.

Dalam satu pusat data kami menggunakan IP take over. Semua server DB memiliki antarmuka virtual (eth0: 1, eth0: 2, eth0: 3) yang tidak di-boot saat boot. Jika salah satu budak perlu mengambil alih, Anda hanya perlu eth0: 2 dan itu adalah tuannya. Dalam skenario ini, eth0 adalah 'jika' yang kita gunakan untuk masuk dan semacamnya. Aplikasi terhubung pada eth0: 1 yang tidak akan diaktifkan saat boot jika skrip saya mendeteksi bahwa IP diambil. (wikipedia STONITH) Jika lain adalah untuk mengambil alih IP master yang mungkin perlu gagal.

Bruno Bronosky
sumber
3

Saya tidak akan merekomendasikan untuk menyeberangi lautan saat menggunakan replikasi MySQL. Saya mencoba sekali untuk meniru dari master di eropa sementara budak itu di texas. Replikasi itu pecah hampir setiap hari sampai kami benar-benar meninggalkan proyek ini. Tentu saja bisa, tetapi cenderung semakin rapuh, semakin besar jarak antara master dan slave.

tex
sumber