Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL di Cloud - Migrasi Online Dari Amazon RDS ke Instans EC2:Bagian Satu

Di blog kami sebelumnya, kami melihat betapa mudahnya memulai RDS untuk MySQL. Ini adalah cara yang nyaman untuk menyebarkan dan menggunakan MySQL, tanpa mengkhawatirkan biaya operasional. Namun tradeoffnya adalah kontrol yang berkurang, karena pengguna sepenuhnya bergantung pada staf Amazon jika terjadi kinerja yang buruk atau anomali operasional. Tidak ada akses ke direktori data atau cadangan fisik membuat sulit untuk memindahkan data dari RDS. Ini bisa menjadi masalah besar jika database Anda melebihi RDS, dan Anda memutuskan untuk bermigrasi ke platform lain. Blog dua bagian ini menunjukkan kepada Anda bagaimana melakukan migrasi online dari RDS ke server MySQL Anda sendiri.

Kami akan menggunakan EC2 untuk menjalankan Server MySQL kami sendiri. Ini bisa menjadi langkah pertama untuk migrasi yang lebih kompleks ke pusat data pribadi Anda. EC2 memberi Anda akses ke data Anda sehingga xtrabackup dapat digunakan. EC2 juga memungkinkan Anda untuk menyiapkan terowongan SSH dan menghilangkan persyaratan untuk menyiapkan koneksi VPN perangkat keras antara infrastruktur lokal dan VPC Anda.

Asumsi

Sebelum kita mulai, kita perlu membuat beberapa asumsi - terutama seputar keamanan. Pertama dan terpenting, kami berasumsi bahwa instans RDS tidak dapat diakses dari luar AWS. Kami juga berasumsi bahwa Anda memiliki aplikasi di EC2. Ini menyiratkan bahwa instans RDS dan infrastruktur Anda lainnya berbagi VPC atau ada akses yang dikonfigurasi di antara mereka, dengan satu atau lain cara. Singkatnya, kami berasumsi bahwa Anda dapat membuat instans EC2 baru dan itu akan memiliki akses (atau dapat dikonfigurasi untuk memiliki akses) ke instans RDS MySQL Anda.

Kami telah mengonfigurasi ClusterControl pada host aplikasi. Kami akan menggunakannya untuk mengelola instance MySQL EC2 kami.

Pengaturan Awal

Dalam kasus kami, instans RDS berbagi VPC yang sama dengan "aplikasi" kami (instance EC2 dengan IP 172.30.4.228) dan host yang akan menjadi target untuk proses migrasi (instance EC2 dengan IP 172.30.4.238). Sebagai aplikasi kita akan menggunakan benchmark tpcc-MySQL dijalankan dengan cara berikut:

./tpcc_start -h rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com -d tpcc1000 -u tpcc -p tpccpass -w 20 -r 60 -l 600 -i 10 -c 4

Rencana Awal

Kami akan melakukan migrasi menggunakan langkah-langkah berikut:

  1. Siapkan lingkungan target kami menggunakan ClusterControl - instal MySQL di 172.30.4.238
  2. Kemudian, instal ProxySQL, yang akan kita gunakan untuk mengatur lalu lintas kita pada saat failover
  3. Buang data dari instance RDS
  4. Muat data ke host target kami
  5. Menyiapkan replikasi antara instans RDS dan host target
  6. Beralih lalu lintas dari RDS ke host target

Menyiapkan Lingkungan Menggunakan ClusterControl

Dengan asumsi kami telah menginstal ClusterControl (jika tidak, Anda dapat mengambilnya dari:https://severalnines.com/download-clustercontrol-database-management-system), kami perlu menyiapkan host target kami. Kami akan menggunakan wizard penerapan dari ClusterControl untuk itu:

Menyebarkan Cluster Database di ClusterControl Menyebarkan Cluster Database di ClusterControl Menyebarkan Cluster Database di ClusterControl

Setelah ini selesai, Anda akan melihat cluster baru (dalam hal ini, hanya server tunggal Anda) dalam daftar cluster:

Kluster Basis Data di ClusterControl

Langkah selanjutnya adalah menginstal ProxySQL - mulai dari ClusterControl 1.4 Anda dapat melakukannya dengan mudah dari UI. Kami membahas proses ini secara rinci dalam posting blog ini. Saat menginstalnya, kami memilih host aplikasi (172.30.4.228) sebagai host untuk menginstal ProxySQL. Saat memasang, Anda juga harus memilih host untuk merutekan lalu lintas Anda. Karena kami hanya memiliki host “tujuan” di kluster, Anda dapat menyertakannya, tetapi kemudian diperlukan beberapa perubahan untuk mengalihkan lalu lintas ke instance RDS.

Jika Anda telah memilih untuk menyertakan host tujuan (dalam kasus kami adalah 172.30.4.238) dalam penyiapan ProxySQL, Anda akan melihat entri berikut di tabel mysql_servers:

mysql> select * from mysql_servers\G
*************************** 1. row ***************************
       hostgroup_id: 20
           hostname: 172.30.4.238
               port: 3306
             status: ONLINE
             weight: 1
        compression: 0
    max_connections: 100
max_replication_lag: 10
            use_ssl: 0
     max_latency_ms: 0
            comment: read server
*************************** 2. row ***************************
       hostgroup_id: 10
           hostname: 172.30.4.238
               port: 3306
             status: ONLINE
             weight: 1
        compression: 0
    max_connections: 100
max_replication_lag: 10
            use_ssl: 0
     max_latency_ms: 0
            comment: read and write server
2 rows in set (0.00 sec)

ClusterControl mengonfigurasi ProxySQL untuk menggunakan grup host 10 dan 20 untuk merutekan penulisan dan pembacaan ke server backend. Kami harus menghapus host yang saat ini dikonfigurasi dari grup host tersebut dan menambahkan instance RDS di sana. Namun, pertama-tama, kita harus memastikan bahwa pengguna monitor ProxySQL dapat mengakses instance RDS.

mysql> SHOW VARIABLES LIKE 'mysql-monitor_username';
+------------------------+------------------+
| Variable_name          | Value            |
+------------------------+------------------+
| mysql-monitor_username | proxysql-monitor |
+------------------------+------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'mysql-monitor_password';
+------------------------+---------+
| Variable_name          | Value   |
+------------------------+---------+
| mysql-monitor_password | monpass |
+------------------------+---------+
1 row in set (0.00 sec)

Kami perlu memberikan akses kepada pengguna ini ke RDS. Jika kita membutuhkannya untuk melacak jeda replikasi, pengguna harus memiliki hak istimewa 'REPLICATION CLIENT'. Dalam kasus kami, ini tidak diperlukan karena kami tidak memiliki instance RDS slave - 'USAGE' sudah cukup.

[email protected]:~# mysql -ppassword -h rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 210
Server version: 5.7.16-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE USER 'proxysql-monitor'@172.30.4.228 IDENTIFIED BY 'monpass';
Query OK, 0 rows affected (0.06 sec)

Sekarang saatnya mengkonfigurasi ulang ProxySQL. Kami akan menambahkan instance RDS ke grup host penulis (10) dan pembaca (20). Kami juga akan menghapus 172.30.4.238 dari grup host tersebut - kami hanya akan mengeditnya dan menambahkan 100 ke setiap grup host.

mysql> INSERT INTO mysql_servers (hostgroup_id, hostname, max_connections, max_replication_lag) VALUES (10, 'rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com', 100, 10);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO mysql_servers (hostgroup_id, hostname, max_connections, max_replication_lag) VALUES (20, 'rds2.cvsw8xpajw2b.us-east-1.rds.amazonaws.com', 100, 10);
Query OK, 1 row affected (0.00 sec)
mysql> UPDATE mysql_servers SET hostgroup_id=110 WHERE hostname='172.30.4.238' AND hostgroup_id=10;
Query OK, 1 row affected (0.00 sec)
mysql> UPDATE mysql_servers SET hostgroup_id=120 WHERE hostname='172.30.4.238' AND hostgroup_id=20;
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
mysql> SAVE MYSQL SERVERS TO DISK;
Query OK, 0 rows affected (0.07 sec)

Langkah terakhir yang diperlukan sebelum kita dapat menggunakan ProxySQL untuk mengarahkan lalu lintas kita adalah dengan menambahkan pengguna aplikasi kita ke ProxySQL.

mysql> INSERT INTO mysql_users (username, password, active, default_hostgroup) VALUES ('tpcc', 'tpccpass', 1, 10);
Query OK, 1 row affected (0.00 sec)
mysql> LOAD MYSQL USERS TO RUNTIME; SAVE MYSQL USERS TO DISK; SAVE MYSQL USERS TO MEMORY;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.00 sec)
mysql> SELECT username, password FROM mysql_users WHERE username='tpcc';
+----------+-------------------------------------------+
| username | password                                  |
+----------+-------------------------------------------+
| tpcc     | *8C446904FFE784865DF49B29DABEF3B2A6D232FC |
+----------+-------------------------------------------+
1 row in set (0.00 sec)

Catatan singkat - kami menjalankan "SAVE MYSQL USERS TO MEMORY;" hanya untuk memiliki hash kata sandi tidak hanya di RUNTIME tetapi juga di buffer memori yang berfungsi. Anda dapat menemukan detail lebih lanjut tentang mekanisme hashing kata sandi ProxySQL di dokumentasi mereka.

Kami sekarang dapat mengarahkan lalu lintas kami ke ProxySQL. Cara melakukannya tergantung pada pengaturan Anda, kami baru saja memulai ulang tpcc dan mengarahkannya ke ProxySQL.

Mengalihkan Lalu Lintas dengan ProxySQL

Pada titik ini, kami telah membangun lingkungan target yang akan kami migrasikan. Kami juga menyiapkan ProxySQL dan mengonfigurasinya untuk digunakan oleh aplikasi kami. Kami sekarang memiliki dasar yang baik untuk langkah selanjutnya, yaitu migrasi data yang sebenarnya. Di posting berikutnya, kami akan menunjukkan cara menyalin data dari RDS ke instance MySQL kita sendiri (berjalan di EC2). Kami juga akan menunjukkan cara mengalihkan lalu lintas ke instans Anda sendiri sementara aplikasi terus melayani pengguna, tanpa waktu henti.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan UNION dengan pola rekaman aktif codeigniter

  2. Bagaimana cara mengurangi jam dari datetime di MySQL?

  3. Jenis kesalahan sintaks tidak valid =MyISAM dalam DDL dihasilkan oleh Hibernate

  4. JSON_STORAGE_FREE() – Cari Tahu Berapa Banyak Ruang Penyimpanan yang Dikosongkan Setelah Pembaruan Dokumen JSON di MySQL

  5. Docker:Menggabungkan beberapa gambar