Rumah  >  Artikel  >  pangkalan data  >  Pemahaman menyeluruh tentang penyegerakan master-slave MySql dalam satu artikel

Pemahaman menyeluruh tentang penyegerakan master-slave MySql dalam satu artikel

藏色散人
藏色散人ke hadapan
2023-03-01 16:59:591877semak imbas

Artikel ini membawa anda pengetahuan yang berkaitan tentang MySql terutamanya memperkenalkan penyegerakan master-slave dan prinsip kerjanya, dsb. Rakan-rakan yang berminat boleh melihatnya bersama-sama.

1 Pengenalan

Helo semua, Mysql ialah pangkalan data yang paling biasa digunakan untuk semua orang Berikut ialah perkongsian mata pengetahuan penyegerakan induk-hamba mysql untuk semua orang untuk menyatukan pengetahuan asas Mysql, jika ada kesilapan, sila betulkan.

2 Gambaran keseluruhan penyegerakan master-slave MySql

Penyegerakan master-slave MySQL, iaitu MySQL Replication, boleh menyegerakkan data daripada satu pelayan pangkalan data kepada berbilang pelayan pangkalan data. Pangkalan data MySQL dilengkapi dengan fungsi penyegerakan induk-hamba Selepas konfigurasi, ia boleh merealisasikan penyegerakan induk-hamba dalam pelbagai skema berdasarkan pangkalan data dan struktur jadual.

Redis ialah pangkalan data dalam memori berprestasi tinggi, tetapi ia bukan protagonis hari ini; MySQL ialah pangkalan data relasi berdasarkan fail cakera Berbanding dengan Redis, kelajuan membaca akan menjadi lebih perlahan, tetapi ia berkuasa . Boleh digunakan untuk menyimpan data berterusan. Dalam kerja sebenar, kami sering menggunakan Redis sebagai cache bersama MySQL Apabila terdapat permintaan akses data, ia akan terlebih dahulu dicari dari cache Jika ia wujud, ia akan dikeluarkan secara langsung. pangkalan data akan diakses semula Ini meningkatkan prestasi Kecekapan membaca juga mengurangkan tekanan capaian pada pangkalan data bahagian belakang. Menggunakan seni bina cache seperti Redis adalah bahagian yang sangat penting dalam seni bina konkurensi tinggi.

Memandangkan volum perniagaan terus berkembang, tekanan pada pangkalan data akan terus meningkat Perubahan kerap dalam cache juga sangat bergantung pada hasil pertanyaan data, yang mengakibatkan kecekapan pertanyaan data rendah Beban tinggi, terlalu banyak sambungan, dsb. Untuk senario e-dagang, selalunya terdapat banyak senario tipikal yang lebih banyak membaca dan kurang menulis Kita boleh menggunakan seni bina master-slave untuk MySQL dan membaca dan menulis berasingan, supaya pelayan induk (Master) mengendalikan permintaan tulis dan pelayan hamba. (Slave) mengendalikan permintaan baca Ini boleh meningkatkan lagi keupayaan pemprosesan serentak pangkalan data. Seperti yang ditunjukkan dalam gambar di bawah:

Dalam gambar di atas, anda dapat melihat bahawa kami telah menambah dua perpustakaan hamba ini boleh menahan sejumlah besar permintaan baca bersama-sama dan berkongsi beban utama. Pangkalan data hamba akan terus menyegerakkan data daripada pangkalan data induk melalui replikasi induk-hamba untuk memastikan data dalam pangkalan data hamba konsisten dengan data dalam pangkalan data induk.

Seterusnya, mari kita lihat fungsi penyegerakan tuan-hamba dan cara penyegerakan tuan-hamba dilaksanakan.

3 Peranan penyegerakan tuan-hamba

Secara umumnya, tidak semua sistem perlu mereka bentuk seni bina tuan-hamba untuk pangkalan data, kerana seni bina itu sendiri mempunyai kos tertentu Ya, jika tujuan kita adalah untuk meningkatkan kecekapan akses serentak yang tinggi kepada pangkalan data, maka kita harus mengoptimumkan penyataan dan indeks SQL terlebih dahulu untuk memberikan permainan penuh kepada prestasi maksimum pangkalan data, kedua, menggunakan strategi caching, seperti seperti menggunakan alat caching seperti Redis dan MongoDB, yang melaluinya Kelebihan prestasi tinggi adalah untuk menyimpan data dalam pangkalan data dalam memori untuk meningkatkan kecekapan membaca Akhirnya, pangkalan data menggunakan seni bina tuan-hamba untuk memisahkan bacaan dan penulisan. Kos menggunakan dan menyelenggara sistem secara beransur-ansur meningkat mengikut peningkatan seni bina.

Berbalik kepada subjek, penyegerakan tuan-hamba bukan sahaja boleh meningkatkan daya pemprosesan pangkalan data, tetapi juga mempunyai tiga aspek berikut:

3.1 Pemisahan baca dan tulis

Kami boleh menyegerakkan data melalui replikasi tuan-hamba, dan kemudian meningkatkan keupayaan pemprosesan serentak pangkalan data melalui pengasingan baca-tulis. Ringkasnya, data kami diletakkan dalam pelbagai pangkalan data, salah satunya ialah pangkalan data Master, dan selebihnya adalah pangkalan data Hamba. Apabila data dalam pangkalan data utama berubah, data akan disegerakkan secara automatik ke pangkalan data hamba, dan program kami boleh membaca data dari pangkalan data hamba, iaitu, menggunakan kaedah pemisahan baca-tulis. Aplikasi e-dagang selalunya "membaca lebih banyak dan menulis lebih sedikit", dan pengasingan membaca dan menulis boleh mencapai akses serentak yang lebih tinggi. Pada asalnya, semua tekanan baca dan tulis ditanggung oleh satu pelayan Kini, berbilang pelayan bersama-sama mengendalikan permintaan baca, mengurangkan tekanan pada pangkalan data utama. Selain itu, anda juga boleh memuatkan baki pelayan hamba supaya permintaan baca yang berbeza diagihkan secara sama rata kepada pelayan hamba yang berbeza mengikut dasar, menjadikan bacaan lebih lancar. Satu lagi sebab untuk membaca lancar adalah untuk mengurangkan kesan jadual kunci Sebagai contoh, jika kita membiarkan perpustakaan utama bertanggungjawab untuk menulis, apabila kunci tulis berlaku di perpustakaan utama, ia tidak akan menjejaskan operasi pertanyaan perpustakaan hamba.

3.2 Sandaran Data

Penyegerakan induk-hamba juga bersamaan dengan mekanisme sandaran panas data, yang disandarkan di bawah operasi biasa pangkalan data utama tanpa menjejaskan peruntukan perkhidmatan data.

3.3 Ketersediaan Tinggi

Sandaran data sebenarnya adalah mekanisme yang berlebihan melalui kaedah redundansi ini, ketersediaan pangkalan data yang tinggi boleh ditukar apabila pelayan gagal dan situasi lain yang tidak tersedia, failover boleh dilakukan dengan cepat dan pangkalan data hamba boleh bertindak sebagai pangkalan data induk untuk memastikan operasi normal perkhidmatan. Anda boleh mengetahui tentang petunjuk SLA ketersediaan tinggi bagi pangkalan data sistem e-dagang.

4 Prinsip penyegerakan tuan-hamba

Bercakap tentang prinsip penyegerakan tuan-hamba, kita perlu memahami fail log penting dalam pangkalan data, iaitu fail binari Binlog Ia merekodkan peristiwa yang mengemas kini pangkalan data, sebenarnya, prinsip penyegerakan tuan-hamba adalah berdasarkan Binlog Data disegerakkan.

Dalam proses replikasi tuan-hamba, operasi akan berdasarkan tiga utas Satu ialah utas pembuangan binlog, yang terletak pada nod induk yang lain ialah utas I/O dan SQL Mereka masing-masing Terletak pada nod hamba, seperti yang ditunjukkan di bawah:

Digabungkan dengan gambar di atas, mari kita fahami proses teras replikasi tuan-hamba:

  • Apabila nod induk menerima permintaan tulis, permintaan tulis mungkin merupakan operasi penambahan, pemadaman atau pengubahsuaian Pada masa ini, operasi kemas kini permintaan tulis akan direkodkan dalam log binlog .

  • Nod induk akan menyalin data ke nod hamba, seperti nod slave01 dan nod slave02 dalam rajah Dalam proses ini, setiap nod hamba mesti disambungkan kepada induk nod. Apabila hamba Apabila nod disambungkan ke nod induk, nod induk akan mencipta benang dump binlog untuk setiap nod hamba untuk menghantar log binlog ke setiap nod hamba.

  • Benang pembuangan binlog akan membaca log binlog pada nod induk, dan kemudian menghantar log binlog ke benang I/O pada nod hamba. Apabila perpustakaan utama membaca peristiwa, ia akan mengunci Binglog Selepas bacaan selesai, kunci akan dilepaskan.

  • Selepas menerima log binlog, benang I/O pada nod hamba akan terlebih dahulu menulis log binlog ke relaylog tempatan, dan log binlog akan disimpan dalam relaylog.

  • Benang SQL pada nod hamba akan membaca log binlog dalam relaylog, menghuraikannya ke dalam operasi penambahan, pemadaman dan pengubahsuaian tertentu dan meletakkan operasi ini yang dilakukan pada nod induk ke dalam Do ia sekali lagi pada nod hamba untuk mencapai kesan pemulihan data, supaya konsistensi data antara nod induk dan nod hamba dapat dipastikan.

Kandungan data penyegerakan induk-hamba sebenarnya adalah log binari (Binlog Walaupun ia dipanggil log binari, ia sebenarnya menyimpan peristiwa satu demi satu mengendalikan operasi kemas kini pangkalan data, seperti INSERT, UPDATE, DELETE, dll.

Selain itu, kita juga perlu ambil perhatian bahawa tidak semua versi MySQL mendayakan log binari pelayan secara lalai Apabila melakukan penyegerakan induk-hamba, kita perlu menyemak dahulu sama ada pelayan telah mendayakan log binari.

Log binari ialah fail akan berlaku sedikit kelewatan semasa penghantaran rangkaian, seperti 200ms Ini boleh menyebabkan data yang dibaca oleh pengguna daripada pustaka hamba ini akan menyebabkan data tidak konsisten dalam penyegerakan tuan-hamba. Sebagai contoh, jika kami mengemas kini rekod, operasi ini selesai pada pangkalan data utama, dan dalam tempoh yang singkat, seperti 100ms, rekod yang sama dibaca semula Pada masa ini, pangkalan data hamba belum menyelesaikan penyegerakan data. maka , data yang kami baca daripada perpustakaan adalah sekeping data lama. Apa yang perlu dilakukan dalam keadaan ini?

5 Bagaimana untuk menyelesaikan masalah konsistensi data penyegerakan tuan-hamba

Seperti yang anda boleh bayangkan, jika data yang ingin kita kendalikan semuanya disimpan dalam pangkalan data yang sama , kemudian untuk Apabila data dikemas kini, kunci tulis boleh ditambah pada rekod, supaya ketidakkonsistenan data tidak akan berlaku semasa membaca. Tetapi pada masa ini, peranan perpustakaan hamba adalah untuk membuat sandaran data, tanpa pemisahan membaca dan menulis, untuk berkongsi tekanan perpustakaan utama.

Jadi kita masih perlu mencari jalan untuk menyelesaikan masalah ketidakkonsistenan data dalam penyegerakan master-slave apabila mengasingkan membaca dan menulis, iaitu menyelesaikan masalah replikasi data antara tuan dan hamba mengikut ketekalan data Untuk membahagikan daripada lemah kepada kuat, terdapat tiga kaedah replikasi berikut.

5.1 Replikasi segerak sepenuhnya

Pertama sekali, replikasi segerak sepenuhnya bermakna selepas pangkalan data induk melengkapkan transaksi, semua pangkalan data hamba juga mesti melengkapkan transaksi tersebut bolehkah hasil pemprosesan dikembalikan kepada pelanggan; oleh itu, walaupun konsistensi data replikasi segerak sepenuhnya dijamin, perpustakaan induk perlu menunggu semua perpustakaan hamba menyelesaikan transaksi, dan prestasinya agak rendah. Seperti yang ditunjukkan di bawah:

5.2 Replikasi tak segerak

Replikasi tak segerak bermaksud apabila perpustakaan utama menyerahkan sesuatu, benang pembuangan binlog akan dimaklumkan untuk menghantar Log binlog dihantar ke perpustakaan hamba Setelah utas pembuangan binlog menghantar log binlog ke perpustakaan hamba, tidak perlu menunggu perpustakaan hamba menyelesaikan transaksi secara serentak memproses hasil kepada pelanggan.

Oleh kerana perpustakaan utama hanya perlu menyelesaikan transaksi dengan sendirinya, ia boleh mengembalikan hasil pemprosesan kepada pelanggan tanpa mengambil kira sama ada perpustakaan hamba telah menyelesaikan transaksi Ini mungkin membawa kepada tuan-hamba jangka pendek ketidakkonsistenan data, seperti Jika anda menanyakan data baharu yang baru dimasukkan dalam pangkalan data induk serta-merta daripada pangkalan data hamba, anda mungkin tidak dapat menanyakannya.

Selain itu, jika pangkalan data utama ranap selepas menyerahkan transaksi, binlog mungkin tidak mempunyai masa untuk disegerakkan ke pangkalan data hamba Pada masa ini, jika nod induk-hamba ditukar untuk kegagalan pemulihan, kehilangan data akan berlaku . Oleh itu, walaupun replikasi tak segerak mempunyai prestasi tinggi, ia adalah yang paling lemah dari segi konsistensi data.

Replikasi induk-hamba MySQL menggunakan replikasi tak segerak secara lalai.

5.3 Replikasi separa segerak

Selepas MySQL versi 5.5, replikasi separa segerak disokong. Prinsipnya ialah selepas pelanggan menyerahkan COMMIT, hasilnya tidak dikembalikan terus kepada pelanggan, sebaliknya menunggu sekurang-kurangnya satu perpustakaan hamba untuk menerima Binlog dan menulisnya ke log geganti sebelum mengembalikannya kepada klien. Kelebihan ini ialah ia meningkatkan ketekalan data Sudah tentu, berbanding dengan replikasi tak segerak, ia meningkatkan kelewatan sekurang-kurangnya satu lagi sambungan rangkaian dan mengurangkan kecekapan menulis ke pangkalan data utama.

Dalam versi MySQL 5.7, parameter rpl_semi_sync_master_wait_for_slave_count juga telah ditambahkan Kami boleh menetapkan bilangan pustaka hamba yang perlu bertindak balas kembali kepada klien. Jika anda meningkatkan parameter ini, anda boleh meningkatkan kekuatan ketekalan data, tetapi ia juga akan meningkatkan masa pangkalan data induk menunggu pangkalan data hamba untuk bertindak balas.

Walau bagaimanapun, replikasi separa segerak juga mempunyai masalah berikut:

  • Prestasi replikasi separa segerak agak berbeza berbanding dengan replikasi tak segerak . Berbanding dengan replikasi tak segerak, yang tidak perlu menunggu respons daripada mana-mana perpustakaan hamba untuk menerima data, replikasi separa segerak perlu menunggu sekurang-kurangnya satu respons daripada perpustakaan hamba untuk mengesahkan penerimaan log binlog, yang mengakibatkan kehilangan prestasi yang lebih besar.
  • Masa maksimum pustaka induk menunggu respons daripada pustaka hamba boleh dikonfigurasikan Jika masa yang dikonfigurasikan melebihi, replikasi separa segerak akan menjadi replikasi tak segerak juga akan muncul.
  • Dalam versi sebelum MySQL 5.7.2, replikasi separa segerak mengalami masalah bacaan hantu.

Apabila perpustakaan utama berjaya menghantar transaksi dan dalam proses menunggu pengesahan daripada perpustakaan hamba, pada masa ini, perpustakaan hamba belum sempat memulangkan hasil pemprosesan kepada pelanggan , tetapi kerana enjin storan perpustakaan utama telah pun menyerahkan transaksi secara dalaman , jadi pelanggan lain boleh membaca data daripada perpustakaan utama.

Namun, jika perpustakaan utama tiba-tiba menutup sambungan pada saat berikutnya, dan permintaan seterusnya masuk pada masa ini, kerana perpustakaan utama ditutup, permintaan hanya boleh ditukar ke perpustakaan hamba, kerana hamba perpustakaan masih belum menerima permintaan daripada perpustakaan induk Pangkalan data telah menyegerakkan data, maka sudah tentu data ini tidak boleh dibaca dari pangkalan data Berbanding dengan hasil pembacaan data pada detik sebelumnya, fenomena bacaan hantu adalah disebabkan.

5.4 Replikasi separa segerak dipertingkatkan

Replikasi separa segerak dipertingkatkan ialah penambahbaikan yang dibuat kepada replikasi separa segerak dalam versi selepas mysql 5.7.2 Prinsipnya hampir sama, dan ia terutamanya menyelesaikan masalah sihir soalan.

Selepas perpustakaan induk dikonfigurasikan dengan parameter rpl_semi_sync_master_wait_point = AFTER_SYNC, sebelum enjin storan melakukan transaksi, perpustakaan induk mesti menerima mesej pengesahan bahawa penyegerakan data telah selesai daripada perpustakaan hamba sebelum menyerahkan transaksi , untuk menyelesaikan masalah bacaan hantu. Rujuk gambar di bawah:

6 Ringkasan

Melalui kandungan di atas, kami memahami penyegerakan master-slave pangkalan data Mysql . Jika anda Matlamatnya hanyalah konkurensi tinggi pangkalan data, jadi anda boleh terlebih dahulu mempertimbangkan pengoptimuman daripada aspek seperti pengoptimuman SQL, pengindeksan dan data cache Redis, dan kemudian mempertimbangkan sama ada untuk menggunakan seni bina master-slave.

Dalam konfigurasi seni bina tuan-hamba, jika kita mahu menggunakan strategi pemisahan baca-tulis, kita boleh menulis program kita sendiri atau melaksanakannya melalui perisian tengah pihak ketiga.

Kelebihan menulis program anda sendiri ialah ia lebih bebas pangkalan data utama. Pada masa yang sama, program bersambung terus ke pangkalan data, mengurangkan lapisan middleware dan mengurangkan beberapa kehilangan prestasi.

Kaedah menggunakan middleware mempunyai kelebihan yang jelas, ia berkuasa dan mudah digunakan. Walau bagaimanapun, akan terdapat beberapa kehilangan prestasi kerana penambahan lapisan middleware antara pelanggan dan pangkalan data Pada masa yang sama, harga middleware komersial adalah agak tinggi, dan terdapat kos pembelajaran tertentu. Selain itu, kami juga boleh mempertimbangkan untuk menggunakan beberapa alat sumber terbuka yang sangat baik, seperti MaxScale. Ia adalah perisian tengah data MySQL yang dibangunkan oleh MariaDB. Sebagai contoh, dalam rajah di bawah, MaxScale digunakan sebagai proksi pangkalan data, dan pemisahan baca-tulis diselesaikan melalui penghalaan dan pemajuan. Pada masa yang sama, kami juga boleh menggunakan alat MHA sebagai alat pensuisan tuan-hamba yang sangat konsisten untuk melengkapkan seni bina ketersediaan tinggi MySQL.

Pembelajaran yang disyorkan: "Tutorial Video MySQL"

Atas ialah kandungan terperinci Pemahaman menyeluruh tentang penyegerakan master-slave MySql dalam satu artikel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam