Rumah >pangkalan data >tutorial mysql >Mari kita bincangkan tentang pelaksanaan Mycat bagi pemisahan baca-tulis kelompok Mysql

Mari kita bincangkan tentang pelaksanaan Mycat bagi pemisahan baca-tulis kelompok Mysql

WBOY
WBOYke hadapan
2022-01-21 18:11:062823semak imbas

Artikel ini memperkenalkan anda kepada pengetahuan yang berkaitan tentang MySQL read and write separation, saya harap ia akan membantu anda.

Mari kita bincangkan tentang pelaksanaan Mycat bagi pemisahan baca-tulis kelompok Mysql

Ikhtisar pemisahan baca-tulis MySQL

  • MySQL kini merupakan pangkalan data percuma yang paling banyak digunakan di dunia semua orang yang terlibat dalam operasi sistem Semua jurutera dari Weiwei mesti telah bersentuhan dengannya.

  • Dalam persekitaran pengeluaran sebenar, satu MySQL sebagai pangkalan data bebas sama sekali tidak dapat memenuhi keperluan sebenar, sama ada dari segi keselamatan, ketersediaan tinggi, keselarasan tinggi dan aspek lain.

  • Oleh itu, secara amnya, data disegerakkan melalui Replikasi Tuan-Hamba , dan kemudian melalui Baca dan tulis pemisahan (MySQL-Proxy/Amoeba) untuk meningkatkan kapasiti beban serentak pangkalan dataSebarkan dan laksana.

Prinsip kerja pengasingan baca-tulis

  • Prinsip asasnya ialah:

  • Pangkalan data utama mengendalikan operasi tambah, ubah suai dan padam transaksi (INSERT, UPDATE, DELETE)

  • Memproses operasi pertanyaan SELECT daripada pangkalan data

  • Replikasi pangkalan data digunakan untuk menyegerakkan perubahan yang disebabkan oleh operasi transaksi kepada pangkalan data hamba dalam kelompok.

Mengapa membaca dan menulis pemisahan

  • Menghadapi tekanan akses yang semakin meningkat, prestasi pelayan tunggal telah menjadi hambatan, dan beban perlu dikongsi

  • Tuan dan hamba hanya bertanggungjawab untuk penulisan mereka sendiri dan membaca, sedikit sebanyak Meringankan kunci X (tulis) dan perbalahan kunci S (baca)

  • Enjin myisam boleh dikonfigurasikan daripada perpustakaan untuk meningkatkan prestasi pertanyaan dan menjimatkan overhed sistem

  • Tingkatkan lebihan dan tingkatkan ketersediaan

Cara mencapai pemisahan baca dan tulis

  • Secara amnya terdapat Dua cara untuk mencapai
  • Pelaksanaan lapisan aplikasi, pelaksanaan program laman web
  • Pelaksanaan lapisan aplikasi merujuk kepada pemisahan membaca dan menulis dalam aplikasi dan dalam penyambung

  • Kelebihan:

  • Pengasingan membaca dan menulis dilaksanakan di dalam aplikasi, dan ia boleh digunakan semasa pemasangan

  • Kurangkan kesukaran penggunaan tertentu

  • The tekanan capaian berada di bawah tahap tertentu dan prestasinya sangat baik

  • Kelemahan:

  • Setelah seni bina dilaraskan , kod mesti berubah dengan sewajarnya

  • Adalah sukar untuk melaksanakan aplikasi lanjutan, seperti pembahagian pangkalan data automatik dan pemisahan jadual

  • Tidak boleh digunakan pada senario aplikasi besar

Pelaksanaan lapisan perisian tengah:

  • Pelaksanaan lapisan middleware merujuk kepada pengasingan membaca dan menulis dalam program middleware luaran

  • program middleware biasa

  • Cobar:

  • Sistem pengedaran relasi yang dibangunkan oleh Alibaba B2B, menguruskan hampir 3,000 tika MySQL. Ia telah bertahan dengan ujian di Alibaba Kemudian, kerana pemergian penulis, kobar tidak lagi dikekalkan untuk menggantikan kobar.

  • MyCAT:

  • Peminat komuniti menjalankan pembangunan sekunder berdasarkan Alibaba cobar, menyelesaikan beberapa masalah yang dihadapi oleh cobar pada masa itu, dan menyertai Terdapat banyak ciri baru di dalamnya. Pada masa ini, komuniti MyCAT sangat aktif, dan beberapa syarikat sudah menggunakan MyCAT. Secara keseluruhan, sokongan adalah lebih tinggi daripada

  • , dan ia akan terus dikekalkan.

  • OneProxy:

  • Bos besar dalam industri pangkalan data, bekas pembangunan pembinaan ketua pasukan pangkalan data Alipay, berdasarkan idea proksi rasmi mysql menggunakan c untuk pembangunan Ya, OneProxy ialah perisian tengah berbayar komersil En. Lou telah mengetepikan beberapa perkara berfungsi dan menumpukan pada prestasi dan kestabilan. Seseorang telah menguji

  • dan berkata ia sangat stabil di bawah konkurensi yang tinggi.

  • Vitess:

  • Perisian tengah ini digunakan dalam pengeluaran Youtube, tetapi seni binanya sangat kompleks. Berbeza dengan middleware sebelum ini, perubahan aplikasi menggunakan Vitess agak besar Untuk menggunakan antara muka API bahasa yang dia sediakan, kita boleh belajar daripada beberapa idea reka bentuknya.

  • Kingshard:

  • Kingshard dibangunkan oleh Chen Fei, bekas ahli pasukan pembangunan middleware 360Atlas, menggunakan bahasa go pada masa lapangnya, pada masa ini, terdapat kira-kira 3 orang yang terlibat dalam pembangunan. ia bukan produk matang yang boleh digunakan ia perlu diperbaiki secara berterusan.

  • Atlas:

  • Pasukan 360 ​​menulis semula lua dalam C berdasarkan proksi mysql. Versi asal menyokong pembahagian jadual, dan pangkalan data dan versi jadual yang dipecahkan telah dikeluarkan. Saya melihat beberapa rakan di Internet sering mengatakan bahawa ia sering digantung di bawah konkurensi tinggi Jika anda ingin menggunakannya, anda perlu mengujinya terlebih dahulu.

  • MaxScale dan Laluan MySQL:

  • Kedua-dua middleware ini dianggap rasmi MaxScale ialah versi yang diselenggara oleh mariadb (pengarang asal MySQL) . ), versi semasa tidak menyokong sub-pangkalan data dan jadual. Laluan MySQL ialah perisian tengah yang kini dikeluarkan oleh syarikat Oracle rasmi MySQL.

  • Kelebihan:

  • Reka bentuk seni bina yang lebih fleksibel

  • Boleh mencapai beberapa kawalan lanjutan pada program , seperti: pemisahan mendatar yang telus, failover dan pemantauan boleh bergantung pada cara teknikal untuk meningkatkan prestasi MySQL Ia mempunyai sedikit kesan pada kod perniagaan dan juga selamat

  • Kelemahan:

    .
  • Memerlukan sokongan pasukan pembangunan dan operasi tertentu.


Apakah MyCAT

  • Sumber terbuka sepenuhnya, berorientasikan perusahaan aplikasi Kluster pangkalan data besar yang dibangunkan

  • menyokong transaksi, ACID dan versi pangkalan data yang dipertingkat yang boleh menggantikan MySQL

  • Peringkat perusahaan pangkalan data yang boleh dianggap sebagai Pangkalan Data kluster MySQL, digunakan untuk menggantikan kluster Oracle yang mahal

  • Satu Pelayan SQL baharu yang menyepadukan teknologi caching memori, teknologi NoSQL dan data besar HDFS

  • gabungan Generasi baharu produk pangkalan data peringkat perusahaan untuk pangkalan data tradisional dan gudang data teragih baharu

  • Produk perisian tengah pangkalan data baharu


Pemasangan dan konfigurasi perkhidmatan MyCat

  • MyCat menyediakan pakej pemasangan tersusun, menyokong Windows, Linux , Mac, Solaris dan sistem lain Pasang dan jalankan

  • Laman utama muat turun rasmi http://www.mycat.org.cn/

  • Seni bina eksperimen:
  • 192.168.2.2 Mycat CentOS 8.3.2011
  • 192.368.2.3 OS
  • 192.168.2.5 Dari pelayan CentOS 7.6
  • Menjalankan Mycat memerlukan JDK 1.7 ke atas

  • Muat turun Mycat
  • wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar. >
  • tar xf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /usr/local/
  • sudo useradd -M -N -s /sbin/nologin mycat && echo "123456" |. sudo passwd --stdin mycat
  • sudo chown -R mycat/

  • direktori program bin, dijalankan di bawah Linux: ./mycat console, first chmod x *
    Nota: Mycat menyokong arahan { console | stop | restart | disimpan dalam direktori: server.xml ialah fail konfigurasi untuk pelarasan parameter pelayan Mycat dan kebenaran pengguna, schema.xml ialah fail konfigurasi untuk definisi perpustakaan logik, jadual dan definisi sharding, rule.xml ialah fail konfigurasi untuk peraturan sharding, dan schema.xml ialah fail konfigurasi untuk peraturan sharding Beberapa maklumat parameter khusus peraturan slice disimpan secara berasingan sebagai fail, yang juga dalam direktori ini Jika fail konfigurasi diubah suai, Mycat perlu dimulakan semula untuk berkuat kuasa.
    Direktori lib terutamanya menyimpan beberapa fail jar yang bergantung kepada mycat.
    Log disimpan dalam log/mycat.log, satu fail setiap hari Konfigurasi log adalah dalam conf/log4j.xml Mengikut keperluan anda sendiri, anda boleh melaraskan tahap output untuk nyahpepijat. lebih banyak maklumat akan dikeluarkan untuk memudahkan penyelesaian masalah.

Tetapan permulaan dan permulaan perkhidmatan MyCat

  • Apabila menggunakan dan memulakan MyCAT di Linux, anda perlu untuk Mengkonfigurasi MYCAT_HOME dalam pembolehubah persekitaran sistem Linux Kaedah operasi adalah seperti berikut:

  • sudo vim /etc/profile.d/mycat.sh

    MYCAT_HOME=/usr. /local/mycat PATH= $MYCAT_HOME/bin:$PATH

  • Dayakan pembolehubah persekitaran

  • /etc/profile.d/mycat. sh

    Mulakan perkhidmatan
  • /usr/local/mycat/bin/mycat mula
  • cat /usr/local /mycat/logs/wrapper.log

akaun pengguna mycat dan maklumat kebenaran berada dalam Konfigurasikan

  • vim /usr/local/mycat/conf/server.xml

  • Apa yang ditakrifkan di sini ialah nama pengguna dan kata laluan untuk log masuk ke mycat pada 192.168.2.2 Nama boleh disesuaikan. Perkhidmatan mysqld tidak berjalan pada 192.168.2.2 Nama pangkalan data yang dinyatakan dalam skema ialah pangkalan data yang mesti wujud di bahagian pelayan!

Edit fail konfigurasi MyCAT schema.xml, mengenai maklumat konfigurasi dataHost Seperti berikut:

    Sandarkan fail konfigurasi asal
  • cp /usr/local/mycat/conf/schema.xml{,.bak}
  • Edit fail konfigurasi
  • vim /usr/local/mycat/conf/schema.xml


    < ;!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    "> URL di sini, salah Gagal memulakan sesi menulis! "dn1" datahost = "dthost" pangkalan data = "myData"/> "0" dbType = "mysql" dbDriver = "native" switchType = "-1"
    slavethreshold = "100 "& gt;
    /heartbeat & gt;

    gt;

    & lt;/datahost & gt;
    & lt;/mycat: skema & gt;

  • Paksa semua operasi baca dijalankan pada pelayan baca, dan hanya tukar ke pelayan tulis apabila data ditulis

  • Perhatikan bahawa pengguna mycat di sini mesti diberi kuasa pada pangkalan data master-slave 192.168.2.3 dan 2.5

  • BERIKAN SEMUA KEISTIMEWAAN PADA *.* KEPADA 'mycat'@' %' DIKENALPASTI OLEH '123456';

  • atau nyatakan segmen rangkaian

  • BERIKAN SEMUA KEISTIMEWAAN PADA *.* KEPADA 'mycat'@' 192.168.2. %' DIKENALPASTI OLEH '123456';

  • keistimewaan flush;

  • Jika ralat ini dilaporkan , pelayan berjalan seperti biasa , semak dahulu sama ada terdapat kebenaran

  • RALAT 1184 (HY000): Sumber Data Tidak Sah: 0

 skema: perpustakaan logik, dan Pangkalan Data MySQL sepadan dengan Jadual yang disertakan dalam perpustakaan logik.
 jadual: Jadual, iaitu jadual yang disimpan dalam pangkalan data fizikal Berbeza daripada pangkalan data tradisional, jadual di sini perlu mengisytiharkan nod data logik DataNode yang disimpannya jadual. Untuk mencapai ini melalui definisi peraturan, jadual boleh menentukan "jadual kanak-kanak" yang menjadi miliknya rekod dalam jadual induk Semua rekod subjadual A disimpan pada serpihan yang sama dengan A.
Peraturan pemecahan: Ia adalah takrifan gabungan medan dan fungsi Berdasarkan nilai medan ini, nombor jujukan serpihan yang disimpan (DataNode) dikembalikan Setiap jadual boleh mentakrifkan peraturan pemecahan peraturan boleh menjadi fleksibel Sambungan, menyediakan peraturan perpecahan berasaskan nombor, peraturan perpecahan rentetan, dsb. secara lalai.
 dataNode: Nod data logik MyCAT ialah nod fizikal khusus yang menyimpan jadual Ia juga dipanggil nod serpihan Ia dikaitkan dengan pangkalan data belakang khusus melalui DataSource. Untuk ketersediaan tinggi, setiap DataNode dilengkapi dengan dua Sumber Data, satu induk dan satu hamba Apabila nod induk turun, sistem secara automatik beralih ke nod hamba.
 dataHost: Tentukan alamat akses perpustakaan fizikal untuk mengikat dataNode.

MyCAT pada masa ini mentakrifkan pustaka logik dan konfigurasi yang berkaitan melalui fail konfigurasi:
MYCAT_HOME/conf/schema.xml mentakrifkan pustaka logik, jadual, nod serpihan, dsb.
MYCAT_HOME/conf Tentukan peraturan pemecahan dalam /rule.xml;
Tentukan pembolehubah berkaitan pengguna dan sistem, seperti port, dll. dalam MYCAT_HOME/conf/server.xml.

Nota:
Teg skema digunakan untuk mentakrifkan pustaka logik dalam contoh MyCat: diikuti dengan nama perpustakaan logik MyCat boleh mempunyai berbilang perpustakaan logik, dan setiap pustaka logiknya sendiri konfigurasi berkaitan. Anda boleh menggunakan tag skema untuk membahagikan perpustakaan logik yang berbeza ini.
Atribut checkSQLschema lalai kepada palsu Dokumen rasmi bermaksud sama ada untuk mengalih keluar nama pangkalan data di hadapan jadual, "pilih * daripada db1.testtable jika ditetapkan kepada benar, db1 akan dialih keluar. Tetapi jika nama db1 bukan nama skema
, ia tidak akan dialih keluar, jadi secara rasmi disyorkan untuk tidak menggunakan sintaks ini. Juga ditetapkan kepada palsu secara lalai.
sqlMaxLimit Apabila nilai ditetapkan kepada nombor tertentu. Untuk setiap pernyataan SQL yang dilaksanakan, jika tiada pernyataan had ditambahkan, MyCat akan menambah nilai yang sepadan secara automatik. Contohnya, jika anda menetapkan nilai kepada 100 dan melaksanakan "select * from test_table", kesannya akan menjadi
"selelct * from test_table had 100". Teg dataNode mentakrifkan nod data dalam MyCat, iaitu apa yang biasa kita panggil sebagai data. 🎜>

  • Mulakan semula perkhidmatan
  • /usr/local/mycat/bin/mycat restart
    Menghentikan Mycat-server...
    Mycat Berhenti -server.
    Memulakan Mycat-server...
    tail /usr/local/mycat/logs/wrapper.log

Konfigurasikan master-slave MySQL

  • Pasang dan konfigurasikan mariadb pada kedua-dua pelayan masing-masing Untuk langkah khusus, sila rujuk: https://blog.csdn.net /gaofei0428/ article/details/103829676?spm=1001.2014.3001.5501
  • Pertama di bahagian pangkalan data utama 192.168.2.3

  • Mula-mula di bahagian pangkalan data utama
  • 192.168.2.3 my. >


    /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock

    symbolic-links=0 log-bin=/data/mysql/mysql-bin

    server-id=1

    binlog-ignore-db= mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema binlog-ignore-db=test innodb_flush_log_at_trx_commit=1
    binlog-do-db=mysql replicate-do-db=
  • mydata
  • lower_case_table_names=1 Hidupkan padanan kes
  • Perhatikan bahawa pangkalan data yang hendak disegerakkan mesti wujud terlebih dahulu

  • Selepas bermula tanpa ralat, konfigurasikan ia pada pelayan hamba 192.168.2.5 /etc/my.cnf



  • vim /etc/my.cnf                                                                                                                                                                                                                                                                                                                                                soket=/var/lib/mysql/mysql.sock

    symbolic-links=0

    log-bin=/data/mysql/mysql-bin
    server-id=2
    relay-log-index=/data/mysql/slave -relay-bin.index
    relay-log=/data/mysql/slave-relay-bin
    lower_case_table_names=1
  • read_only =1 Hidupkan mod baca sahaja untuk mengelakkan tulis balik data, yang tidak akan menjejaskan replikasi segerak hamba
  • lower_case_table_names=1 Hidupkan padanan kes

  • Selepas memulakan semula hamba perkhidmatan pangkalan data, lakukan operasi berikut
  • Hentikan hamba pelayan hamba dan cipta pengguna pangkalan data hamba
  • mysql -uroot -p123456 - e "stop slave"
  • mysql -uroot -p123456 -e "berikan hamba replikasi pada *.* kepada 'hamba'@'%' yang dikenal pasti oleh '123456'"
    mysql -uroot -p123456 -e "pilih pengguna ,kata laluan daripada pengguna mysql. "

    mysql -uroot -p123456 -e "tukar master kepada master_host='192.168.2.3',master_user=' slave',master_password=' 123456',master_log_file='mysql-bin.000002',master_log_pos=245;"
  • mysql -uroot -p123456 -e "mulakan hamba"
    mysql -uroot -p123456 -e "🎜"🎜

  • Ujian

  • Mula-mula eksport sandaran semua perpustakaan pelayan utama 192.168.2.3

  • mysqldump -uroot -p --all-databases > /tmp/all_dbs.sql

  • Kemudian import

  • mysql -uroot -p < dari pelayan 192.168. 2.5 ; /tmp/all_dbs.sql

  • Tambah beberapa data pada bahagian pangkalan data utama 192.168.2.3 dan perhatikan sama ada pangkalan data hamba disegerakkan

  • Semak pada pelayan hamba

  • Jika terdapat ralat penyegerakan, anda perlu berhenti hamba pada pelayan hamba dan kemudian tukar tuan sekali lagi Gunakan ujian log masuk Pengguna hamba

Kembali ke pelayan mycat 192.168.2.2

Cuba log masuk


  • mysql - uroot -p123456 -h192.168.2.2 -P8066

    8066 ialah nombor port apabila mycat sedang dijalankan
  • Uji pemisahan baca dan tulis
  • mysql -uroot -p123456 -h192.168. .2 -P9066 -e "tunjukkan @@datasource"
9066 ialah port pengurusan mycat

pilih * daripada mydata.mylist;
  • Tulis data atau tukar data
  • masukkan ke dalam mydata.mylist values(10,'test');

Simulasikan kesalahan, hentikan hamba dahulu pelayan 192.168.2.5
  • systemctl stop mariadb.service

    Cuba menulis data pada 192.168.2.2
  • masukkan ke dalam mydata.mylist values( 7,'gf');

  • Lihat pada pelayan utama 192.168. 2.3

  • Buka pelayan hamba 192.168.2.5

Simulasikan pelayan induk 192.168.2.3 ke bawah

    • Pertanyaan adalah perkara biasa, cuba menulis data

    • Pertanyaan itu biasa tetapi tidak boleh ditulis


    • Tambah berbilang perpustakaan
    • vim cat /usr/ local/mycat /conf/server.xml

    • mydata,wordpress

    • vim /usr/local/mycat/conf/schema.xml

    • Selepas menambah perkhidmatan mulakan semula
    • /usr/local/mycat/bin/mycat mulakan semula
    • tail / usr/local/mycat/logs/wrpper.log


    • Pengendalian ralat
      Permulaan gagal: Tamat masa menunggu isyarat daripada JVM.
      JVM tidak keluar atas permintaan, ditamatkan

      Penyelesaian
      Tambahkan
      wrapper.startup.timeout=300 //Timeout 300 seconds wrapper.ping.timeout=120
    Pembelajaran yang disyorkan:

    tutorial video mysql

Atas ialah kandungan terperinci Mari kita bincangkan tentang pelaksanaan Mycat bagi pemisahan baca-tulis kelompok Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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