Cara mengatur replikasi mysql master-slave

Cara mengatur replikasi mysql master-slave

Replikasi MySQL adalah proses di mana server master mereplikasi datanya ke satu atau lebih server budak. Ini dapat memberikan beberapa manfaat seperti peningkatan ketersediaan data, peningkatan kinerja, dan cadangan yang lebih mudah. Salah satu aspek penting dari replikasi adalah keamanan, dan dalam artikel ini, kami akan mengeksplorasi cara mengkonfigurasi replikasi master-slave mySQL dengan otentikasi menggunakan sertifikat SSL.

Dengan menggunakan sertifikat SSL, kami dapat memastikan bahwa data yang direplikasi aman dan hanya dapat diakses oleh pihak yang berwenang. Selain itu, sertifikat SSL juga dapat digunakan untuk mengotentikasi server master dan budak, memberikan lapisan keamanan tambahan.

Dalam artikel ini, kami akan melalui proses pengaturan konfigurasi replikasi master-slave dengan sertifikat SSL, termasuk membuat dan menginstal sertifikat, mengkonfigurasi server master dan slave, dan memecahkan masalah umum masalah umum.

Manfaat Replikasi MySQL

Manfaat utama replikasi master-slave mySQL adalah:

  • Pertunjukan: Salah satu manfaat utama adalah memungkinkan untuk membongkar kueri baca saja dari database master ke budak, meningkatkan kinerja dan skalabilitas sistem basis data. Ini karena database master hanya bertanggung jawab untuk menangani transaksi tertulis, sementara para budak dapat menangani transaksi baca.
  • Redundansi dan toleransi kesalahan: Manfaat lain dari replikasi master-slave mySQL adalah memberikan tingkat redundansi dan toleransi kesalahan. Jika database master turun, para budak dapat terus melayani permintaan baca, meminimalkan downtime. Selain itu, jika database budak turun, itu dapat diganti dengan budak baru, dan data dapat disinkronkan kembali dari master.
  • Cadangan dan pemulihan: Replikasi Master-Slave MySQL juga dapat digunakan untuk cadangan dan pemulihan data. Dengan secara teratur mengambil cadangan para budak, Anda dapat memiliki salinan data yang dapat digunakan jika terjadi bencana pada database master.

Artikel ini akan membantu Anda mengatur replikasi master-slave antara dua server MySQL. Tutorial ini diuji pada Ubuntu 22.04 Linux Instance dengan MySQL 8.0 server database.

Rincian Pengaturan:

Untuk tujuan pengujian, saya telah membuat dua sistem di jaringan lokal saya. Kedua sistem memiliki IP yang berbeda dari jaringan yang sama. Dengan asumsi bahwa server basis data master dan slave memiliki IP di bawah ini seperti di bawah ini:

Master Server: 11.11.11.11 Slave Server: 22.22.22.22 

Jika Anda menggunakan berbagai versi mySQL yang berbeda di master dan slave gunakan tautan ini untuk memeriksa kompatibilitas.

Langkah 1: Buat Sertifikat SSL [Master]

Pertama, Anda perlu menghasilkan sertifikat CA. Otoritas Sertifikat (CA) adalah organisasi pihak ketiga tepercaya yang mengeluarkan sertifikat digital yang digunakan untuk memverifikasi identitas dan keaslian suatu entitas. Kemudian kami dapat menghasilkan sertifikat digital untuk sistem master dan klien yang ditandatangani oleh sertifikat CA.

  1. Buat direktori untuk menyimpan sertifikat SSL baru.
    mkdir/etc/mysql/sertifikat  CD/etc/mysql/sertifikat  
  2. Sekarang, hasilkan sertifikat untuk digunakan sebagai otoritas sertifikat.
    OpenSSL GENRSA 4096> CA-Key.PEM  OpenSSL Req -new -x509 -nodes -days 9999 -Key ca -key.PEM> CA-CERT.PEM  
  3. Menghasilkan sertifikat untuk server master mysql:
    OpenSSL Req -NewKey RSA: 4096 -days 9999 -nodes -Keyout Server -Key.PEM> Server-Req.PEM  OPENSSL X509 -REQ -IN SERVER -REQ.PEM -DARI 9999 -CA CA -CERT.PEM -Cakey CA -Key.PEM -SET_SERIAL 01> Server -CERT.PEM  
  4. Kemudian hasilkan sertifikat untuk sistem klien (budak).
    OpenSSL Req -NewKey RSA: 4096 -days 9999 -nodes -Keyout klien -key.PEM> klien-req.PEM  OpenSSL X509 -REQ -in klien -req.PEM -DARI 9999 -CA CA -CERT.PEM -Cakey CA -Key.PEM -SET_SERIAL 01> CLIENT -CERT.PEM  

Catatan penting: Pastikan untuk menggunakan yang berbeda "Nama Umum (FQDN)" untuk file CA daripada file sertifikat master dan klien.

Langkah 2: Perbarui file Configuraion MySQL [Master]

Selanjutnya file konfigurasi MySQL (misalnya:/etc/mysql/mysql.conf.d/mysqld.CNF) dan tambahkan/perbarui entri berikut:

[mysqld] server-id = 1 binlog-format = Log-bin campuran = mysql-bin innodb_flush_log_at_trx_commit = 1 sync_binlog = 1 ssl ssl-ca =/etc/mysql/cers/ca-cert.PEM SSL-CERT =/etc/mysql/certs/server-cert.PEM SSL-Key =/etc/mysql/certs/server-key.PEM
1234567891011[mysqld] server-id = 1binlog-format = mixedlog-bin = mysql-bininnodb_flush_log_at_trx_commit = 1sync_binlog = 1 sslssl-ca =/etc/mysql/certs/ca-cert.PEMSSL-CERT =/etc/mysql/Certs/server-cert.pemssl-key =/etc/mysql/sertifikat/server-key.PEM

Langkah 3: Buat Pengguna Replikasi [Master]

Pada langkah ini, kami akan membuat pengguna baru di server MySQL yang akan digunakan untuk mengotentikasi klien dengan layanan master. Jadi, masuk ke server MySQL di server database master dengan pengguna yang diistimewakan root. Kemudian buat pengguna baru, yang akan digunakan untuk proses replikasi.

Hubungkan ke server mysql kemudian jalankan dan jalankan kueri berikut untuk membuat pengguna baru dan berikan mereka ke akses budak.

MySQL> Buat Pengguna 'Replikasi'@'22.22.22.22 'diidentifikasi oleh' Asecurepa $$ w0rd 'memerlukan SSL; mysql> hibah budak di *.* Untuk 'replikasi'@'22.22.22.22 '; mysql> hak istimewa flush;
123MySQL> Buat Pengguna 'Replikasi'@'22.22.22.22 'diidentifikasi oleh' aseCurepa $$ w0rd 'membutuhkan ssl; mysql> hibah budak di *.* Untuk 'replikasi'@'22.22.22.22 '; mysql> hak istimewa flush;

Pastikan untuk Mengganti '22.22.22.22 'dengan alamat IP instance slave.

Pastikan untuk menggunakan kata sandi yang kuat untuk akun pengguna.

Langkah 4: Basis Data Dump [Master]

Sekarang, ekspor semua database pada instance master menggunakan 'mysqldump' kegunaan.

mysqldump -uroot -p --skip-lock-tabel --single-transaction \ ---flush-log-hex-blob--master-data = 2 -a | gzip -c> dump.SQL.GZ  

Salin file dump ke server slave.

SCP Dump.SQL.GZ [email dilindungi]:  

Perintah akan meminta kata sandi pengguna jarak jauh. Setelah pengguna otentikasi, file akan disalin ke server jarak jauh di bawah direktori home akun 'root'.

Langkah 5: Salin file sertifikat SSL [master]

Salin Kunci Klien dan Sertifikat dan File Sertifikat CA ke instance Slave. Pastikan itu "/etc/mysql/sertifikat" Direktori ada sistem jarak jauh.

scp/etc/mysql/certs/ca-cert.PEM [email dilindungi]:/etc/mysql/sertifikat/  scp/etc/mysql/certs/client-cert.PEM [email dilindungi]:/etc/mysql/sertifikat/  scp/etc/mysql/sertifikat/klien.PEM [email dilindungi]:/etc/mysql/sertifikat/  

Catatan: Konfigurasikan tombol SSH untuk login otomatis atau gunakan kata sandi untuk terhubung ke remote.

Langkah 6: Kembalikan Cadangan Database [Slave]

Masuk ke Server Klien Replikasi MySQL. Ekstrak file dump menggunakan utilitas gunzip. Setelah itu, kembalikan database.

Gunzip Dump.SQL.GZ  mysql -uroot -p -f < dump.sql  

Kemudian periksa posisi file log di file cadangan.

dump kepala.SQL -N80 | grep "master_log_pos"  

Output akan terlihat seperti ini:

Output-ubah master menjadi master_log_file = "mysql-bin.000007 ", master_log_pos = 154; 

Perhatikan Master_log_file Dan Master_log_pos nilai, itu akan digunakan nanti dalam artikel ini.

Langkah 7: Perbarui Konfigurasi Slave MySQL [Slave]:

Selanjutnya file konfigurasi MySQL (misalnya:/etc/mysql/mysql.conf.d/mysqld.CNF) dan tambahkan/perbarui entri folloiwng:

[mysqld] server-id = 2 binlog-format = Log-bin campuran = mysql-bin relay-log = mysql-relay-bin-log-slave-updates = 1 read-only = 1
1234567[mysqld] server-id = 2binlog-format = mixedlog-bin = mysql-binrelay-log = mysql-relay-binlog-slave-updates = 1read-only = 1

Langkah 8: Mulai Replikasi Budak [Slave]

Konfigurasikan instance slave dengan alamat IP master instance bersama dengan pengguna replikasi, kata sandi mereka dan sertifikat yang disalin dari master instance. Pastikan untuk memperbarui 'mysql-bin.###### ' Dan 'Master_log_pos = ###' Sama seperti yang kita dapatkan di langkah 6. Sertakan semua nol.

mysql> ubah master menjadi master_host = "11.11.11.11 ", master_user = 'replikasi', master_password =" aseCurepa $$ w0rd ", master_ssl_ca ="/etc/mysql/cers/ca-cert.PEM ", master_ssl_cert ="/etc/mysql/certs/client-cert.PEM ", master_ssl_key ="/etc/mysql/sertifikat/klien-key.PEM ", master_ssl = 1, master_log_file =" mysql-bin.###### ", master_log_pos = ###;
12345678mysql> ubah master menjadi master_host = '11.11.11.11 ', master_user =' replikasi ', master_password =' ​​aseCurepa $$ w0rd ', master_ssl_ca ='/etc/mysql/cers/ca-cert.PEM ', master_ssl_cert ='/etc/mysql/certs/client-cert.PEM ', master_ssl_key ='/etc/mysql/certs/klien-key.PEM ', master_ssl = 1, master_log_file =' mysql-bin.###### ', master_log_pos = ###;

Akhirnya mulai proses replikasi:

mysql> Mulai budak;
1mysql> Mulai budak;

Ini akan memungkinkan dan memulai proses replikasi.

Langkah 9: Verifikasi replikasi

Anda dapat menjalankan 'Tunjukkan status budak' permintaan untuk memeriksa status replikasi saat ini:

mysql> tunjukkan status budak \ g
1mysql> tunjukkan status budak \ g
Output *************************** 1. baris *************************** SELAMA_OO_STATE: Menunggu sumber untuk mengirim acara Master_host: 11.11.11.11 Master_user: Replikasi Master_Port: 3306 Connect_retry: 60 Master_log_file: MySQL-Bin.000177 read_master_log_pos: 100443919 relay_log_file: mysql-relay-bin.000498 RELAY_LOG_POS: 104189538 RELAY_MASTER_LOG_FILE: mysql-bin.000169 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 104189322 Relay_Log_Space: 972921462 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /etc/mysql /sertifikat/CA-CERT.PEM MASTER_SSL_CA_PATH: master_ssl_cert:/etc/mysql/certs/client-cert.PEM MASTER_SSL_CIPHER: master_ssl_key:/etc/mysql/sertifikat/klien-key.Seconds_behind_master: 13803 Master_SSL_VERIFY_SERVER_CERT: No Last_io_errno: 0 last_ero_error: last_sql_errno: 0 last_sql_error: piSTon6-o.server_ids: MASTER6-IID6-IDION6-IID6-IID1.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Waiting for dependent transaction to commit Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row di set, 1 peringatan (0.00 detik) 

Periksa nilai 'Seconds_behind_master'. Nilai nol (0) berarti kedua sistem disinkronkan sepenuhnya.
Replikasi Master-Slave MySQL telah berhasil dikonfigurasi pada sistem Anda dan dalam mode kerja. Terima kasih telah menggunakan tutorial ini, mohon jangan lupa untuk membaginya dengan teman -teman Anda.

Kesimpulan

Dalam artikel ini, kami telah membahas proses mengonfigurasi replikasi master-slave mySQL dengan otentikasi menggunakan sertifikat SSL. Kami telah melalui langkah -langkah untuk membuat dan menginstal sertifikat, mengkonfigurasi server master dan slave, dan memecahkan masalah umum. Dengan menggunakan sertifikat SSL, kami telah memastikan bahwa data yang direplikasi aman dan hanya dapat diakses oleh pihak yang berwenang. Selain itu, sertifikat SSL telah digunakan untuk mengotentikasi server master dan budak, memberikan lapisan keamanan tambahan. Pendekatan ini dapat membantu organisasi untuk meningkatkan keamanan lingkungan replikasi mereka dan untuk memastikan integritas dan kerahasiaan data mereka.

Secara keseluruhan, replikasi master-slave mySQL adalah alat yang berguna untuk meningkatkan kinerja, skalabilitas, dan toleransi kesalahan sistem basis data MySQL. Ini memungkinkan untuk distribusi data di beberapa server dan dapat digunakan untuk cadangan dan pemulihan data.