Berikut cara mengatur replikasi antara dua MySQL 5. 7 server berjalan di Ubuntu 16. 04 LTS. Replikasi biasanya digunakan untuk meningkatkan ketersediaan atau memiliki node tambahan untuk menjalankan kueri dan laporan analitik. Kami juga menunjukkan bagaimana Anda dapat dengan mudah menggunakan OpsDash untuk memantau status replikasi
Ubuntu 16. Repositori 04 LTS hadir dengan versi 5. 7 dari MySQL, jadi menginstalnya hanya masalah
$ sudo apt-get install mysql-serverPosting selanjutnya menganggap Anda telah menyiapkan dua node identik yang menjalankan MySQL, yang dapat berbicara satu sama lain melalui jaringan pribadi, dan bahwa node tersebut memiliki IP.
master IP: 10.0.0.156 slave IP: 10.0.0.157_Penyiapan utama
Pertama mari kita atur masternya. Proses ini perlu mengambil snapshot database yang konsisten, yang melibatkan penempatan kunci baca global. Ini berarti database akan bersifat hanya-baca dan semua penulisan akan diblokir selama penguncian berlangsung. Anda harus merencanakan waktu henti ini
1) Perbarui konfigurasi
Di dalam file /etc/mysql/mysql. conf. d/mysqld. cnf batalkan komentar atau atur yang berikut ini
bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.logIni membuat master mendengarkan IP pribadi, menyetelnya master IP: 10.0.0.156 slave IP: 10.0.0.1579 (yang harus unik untuk setiap node di antara kumpulan node master dan slave yang terhubung) ke 1, dan mengaktifkan logging biner
2) Mulai ulang layanan MySQL agar perubahan diterapkan
sudo systemctl restart mysql_3) Buat pengguna untuk replikasi
Kami akan menyiapkan budak untuk terhubung ke master melalui akun khusus. Akun membutuhkan bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log0 hak istimewa. Di sini kami menggunakan nama pengguna bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log1
$ mysql -u root -p Password: mysql> CREATE USER 'repl'@'10.0.0.157' IDENTIFIED BY 'slavepass'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.157'; Query OK, 0 rows affected (0.00 sec)4) Kunci masternya
Selanjutnya kita perlu mengunci master untuk mendapatkan snapshot yang konsisten untuk mem-bootstrap budak
mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec)_Perhatikan bahwa kunci ini dilepaskan saat Anda keluar dari klien mysql CLI, atau saat Anda mengeluarkan bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log2. Kunci harus tetap di tempatnya sampai bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log3 pada langkah 6 di bawah selesai
5) Catat posisi log replikasi master
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 613 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)Informasi ini akan diperlukan untuk menginisialisasi budak di langkah berikutnya
6) Buang master db
$ mysqldump -u root -p --all-databases --master-data > dbdump.sqlCatatan. Anda juga dapat menghentikan mysqld dan mentransfer file db. Halaman ini memiliki detail lebih lanjut
7) Buka kunci database master
Anda dapat melakukannya dengan keluar dari shell mysql CLI Anda, atau dengan menjalankan
mysql> UNLOCK TABLES;8) Salin file ke budak
Transfer file dump dengan aman ke slave, misalnya. g. , menggunakan bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log_4
$ scp dbdump.sql 10.0.0.157:/tmpPengaturan budak
1) Perbarui konfigurasi
Dalam file /etc/mysql/mysql. conf. d/mysqld. cnf, batalkan komentar atau atur yang berikut ini
master IP: 10.0.0.156 slave IP: 10.0.0.157_0Seperti untuk master di atas, ini membuat budak mendengarkan IP pribadi, menyetelnya master IP: 10.0.0.156 slave IP: 10.0.0.1579 (kali ini ke 2), dan mengaktifkan logging biner. Meskipun logging biner tidak sepenuhnya diperlukan, masuk akal untuk menjaga konfigurasi budak sedekat mungkin dengan master, jika budak dipromosikan menjadi master. Itu juga memungkinkan budak ini bertindak sebagai master untuk budak lain
2) Mulai ulang layanan MySQL agar perubahan diterapkan
master IP: 10.0.0.156 slave IP: 10.0.0.157_13) Impor dump db
Impor file dump yang Anda buat di master dan salin ke budak ini
master IP: 10.0.0.156 slave IP: 10.0.0.157_24) Siapkan budak untuk berbicara dengan master
master IP: 10.0.0.156 slave IP: 10.0.0.157_3Pada titik ini, budak sinkron dengan master dan siap menerima dan memutar ulang perubahan yang dilakukan pada master. Nilai bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log_6 dan bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log7 berasal dari output bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log8 yang Anda jalankan sebelumnya
Uji apakah replikasi berfungsi
Dan Anda selesai. Jika Anda sampai sejauh ini tanpa kesalahan, buat tabel/baris baru di master. Perubahan harus disebarkan kurang lebih secara instan ke budak. Periksa apakah perubahan muncul pada budak
Pengaturan Pemantauan
OpsDash adalah server yang dihosting sendiri dan solusi pemantauan layanan, yang dapat memantau instance MySQL. Ini gratis untuk digunakan hingga 5 server dan layanan. Mari kita lihat cara menyiapkannya untuk kasus ini
1) Instal server OpsDash
Unduh dan instal server OpsDash di mesin apa pun yang dapat terhubung ke server MySQL
OpsDash harus aktif dan berjalan setelah perintah ini. Anda dapat menelusuri bind-address = 10.0.0.156 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log9 untuk melihat UI OpsDash, di mana sudo systemctl restart mysql0 adalah IP server tempat Anda menginstal OpsDash. Ingatlah untuk membuka port di firewall Anda jika perlu
2) Buat pengguna MySQL
OpsDash perlu terhubung ke server MySQL dan mengumpulkan metrik. Mari buat pengguna baru untuk ini
master IP: 10.0.0.156 slave IP: 10.0.0.157_5Hak istimewa sudo systemctl restart mysql1 dan sudo systemctl restart mysql2 memungkinkan OpsDash untuk menanyakan status replikasi. Anda juga dapat mengganti sudo systemctl restart mysql3 dengan IP server OpsDash yang sebenarnya
3) Beri tahu OpsDash tentang server MySQL
Dari UI OpsDash, mari tambahkan entri untuk setiap instance MySQL. Dari halaman Pengaturan Sistem -> Layanan, tambahkan layanan MySQL, berikan IP, nama pengguna ("opsdash") dan kata sandi ("opsdashpass")
4) Lihat dasbor
Dasbor untuk master (Sumber -> "master") menunjukkan berbagai metrik kesehatan dan kinerja, termasuk jumlah budak aktif (yang seharusnya 1). Anda dapat mengeklik grafik dan menyetel peringatan saat turun di bawah 1. OpsDash dapat memberi tahu Anda melalui email, Slack, HipChat, PagerDuty, atau Pushbullet saat peringatan terjadi
Dasbor budak menyertakan kelambatan replikasi (dalam detik), serta jumlah utas budak (harus ada 1 utas I/O budak dan 1 utas SQL budak yang berjalan dalam jalur normal)
Kegagalan Manual
Terakhir, mari kita lihat bagaimana slave MySQL dapat dipromosikan menjadi master secara manual. Perhatikan bahwa ini tidak mencakup failover yang tidak direncanakan/otomatis, hanya kasus ketika failover telah direncanakan dan dijalankan secara manual – seperti untuk peningkatan versi atau peningkatan perangkat keras
1) Hentikan modifikasi pada master
Koneksi ke master harus dihentikan terlebih dahulu, agar tidak ada lagi perubahan yang terjadi pada master
2) Tunggu hingga replikasi selesai
Semua perubahan harus direplikasi ke budak, dan budak harus menyelesaikan penerapannya. Anda dapat memeriksanya dengan menjalankan "SHOW PROCESSLIST" pada master
master IP: 10.0.0.156 slave IP: 10.0.0.157_6Negara harus membaca “Tuan telah mengirim semua binlog ke budak; . Ini berarti master telah menyelesaikan bagian dari replikasi
Pada budak, menjalankan "SHOW SLAVE STATUS\G" memberikan status budak
master IP: 10.0.0.156 slave IP: 10.0.0.157_7Kolom Slave_SQL_Running_State harus bertuliskan “Slave telah membaca semua log relai;
3) Promosikan budak
Sekarang Anda dapat mempromosikan budak dengan perintah
master IP: 10.0.0.156 slave IP: 10.0.0.157_8Setelah perintah ini, node slave tidak lagi berbicara dengan master
4) Konfigurasi ulang aplikasi
Semua aplikasi dan pekerjaan harus dikonfigurasi untuk berbicara dengan master baru. Ini melengkapi failover
Bacaan lebih lanjut
Manual Referensi MySQL memiliki bab tentang replikasi, yang mendokumentasikan semua ini dan lebih banyak lagi. Anda juga dapat membaca tentang pengaturan lain seperti replikasi multi-master dan replikasi semisinkron, dan teknik seperti replikasi tertunda dan mengambil cadangan dari budak
Utilitas MySQL berisi alat yang dapat digunakan untuk mengotomatiskan langkah-langkah penyiapan replikasi dan kegagalan
Anda dapat mengetahui lebih lanjut tentang OpsDash di sini. OpsDash adalah server yang dihosting sendiri dan solusi pemantauan layanan dengan dukungan terintegrasi untuk pemantauan replikasi MySQL