sql >> Database >  >> RDS >> Mysql

MySQL in de cloud - Online migratie van Amazon RDS naar EC2-instantie:deel één

In onze vorige blog zagen we hoe eenvoudig het is om met RDS voor MySQL aan de slag te gaan. Het is een handige manier om MySQL te implementeren en te gebruiken, zonder dat u zich zorgen hoeft te maken over operationele overhead. De afweging is echter verminderde controle, aangezien gebruikers volledig afhankelijk zijn van Amazon-personeel in het geval van slechte prestaties of operationele anomalieën. Geen toegang tot de gegevensmap of fysieke back-ups maakt het moeilijk om gegevens uit RDS te verplaatsen. Dit kan een groot probleem zijn als uw database RDS ontgroeit en u besluit naar een ander platform te migreren. Deze tweedelige blog laat je zien hoe je een online migratie van RDS naar je eigen MySQL-server doet.

We zullen EC2 gebruiken om onze eigen MySQL-server uit te voeren. Het kan een eerste stap zijn voor complexere migraties naar uw eigen private datacenters. EC2 geeft u toegang tot uw gegevens zodat xtrabackup kan worden gebruikt. EC2 stelt u ook in staat om SSH-tunnels in te stellen en verwijdert de vereiste voor het opzetten van hardware VPN-verbindingen tussen uw on-premises infrastructuur en VPC.

Aannames

Voordat we beginnen, moeten we een aantal aannames doen, vooral rond beveiliging. Eerst en vooral gaan we ervan uit dat de RDS-instantie niet toegankelijk is van buiten AWS. We gaan er ook vanuit dat je een aanvraag hebt in EC2. Dit houdt in dat ofwel de RDS-instantie en de rest van uw infrastructuur een VPC delen of dat er op de een of andere manier toegang is geconfigureerd tussen hen. Kortom, we gaan ervan uit dat u een nieuwe EC2-instantie kunt maken en dat deze toegang heeft (of kan worden geconfigureerd om toegang te hebben) tot uw MySQL RDS-instantie.

We hebben ClusterControl geconfigureerd op de applicatiehost. We gebruiken het om onze EC2 MySQL-instantie te beheren.

Eerste installatie

In ons geval deelt de RDS-instantie dezelfde VPC met onze "toepassing" (EC2-instantie met IP 172.30.4.228) en host die een doelwit zal zijn voor het migratieproces (EC2-instantie met IP 172.30.4.238). Als applicatie gaan we tpcc-MySQL benchmark gebruiken die op de volgende manier wordt uitgevoerd:

./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

Initieel plan

We gaan een migratie uitvoeren met behulp van de volgende stappen:

  1. Stel onze doelomgeving in met ClusterControl - installeer MySQL op 172.30.4.238
  2. Installeer vervolgens ProxySQL, die we zullen gebruiken om ons verkeer te beheren op het moment van failover
  3. Dump de gegevens van de RDS-instantie
  4. Laad de gegevens in onze doelhost
  5. Replicatie instellen tussen RDS-instantie en doelhost
  6. Schakel verkeer over van RDS naar doelhost

Omgeving voorbereiden met ClusterControl

Ervan uitgaande dat we ClusterControl hebben geïnstalleerd (als je dat niet doet, kun je het ophalen van:https://severalnines.com/download-clustercontrol-database-management-system), moeten we onze doelhost instellen. We zullen daarvoor de implementatiewizard van ClusterControl gebruiken:

Een databasecluster implementeren in ClusterControl Een databasecluster implementeren in ClusterControl Een databasecluster implementeren in ClusterControl

Zodra dit is gebeurd, ziet u een nieuw cluster (in dit geval alleen uw enkele server) in de clusterlijst:

Databasecluster in ClusterControl

De volgende stap is het installeren van ProxySQL - vanaf ClusterControl 1.4 kunt u dit eenvoudig vanuit de gebruikersinterface doen. We hebben dit proces in detail besproken in deze blogpost. Bij het installeren hebben we onze applicatiehost (172.30.4.228) gekozen als de host om ProxySQL te installeren. Tijdens de installatie moet u ook een host kiezen waarnaar uw verkeer moet worden geleid. Aangezien we alleen onze "bestemmings"-host in het cluster hebben, kunt u deze opnemen, maar dan zijn er enkele wijzigingen nodig om het verkeer om te leiden naar de RDS-instantie.

Als u ervoor heeft gekozen om de bestemmingshost (in ons geval 172.30.4.238) op te nemen in de ProxySQL-configuratie, ziet u de volgende vermeldingen in de 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 heeft ProxySQL geconfigureerd om hostgroepen 10 en 20 te gebruiken om schrijf- en leesbewerkingen naar de backend-servers te routeren. We zullen de momenteel geconfigureerde host uit die hostgroepen moeten verwijderen en de RDS-instantie daar moeten toevoegen. Maar eerst moeten we ervoor zorgen dat de monitorgebruiker van ProxySQL toegang heeft tot de RDS-instantie.

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)

We moeten deze gebruiker toegang verlenen tot RDS. Als we het nodig hebben om de replicatievertraging bij te houden, moet de gebruiker het recht 'REPLICATIECLIENT' hebben. In ons geval is het niet nodig omdat we geen slave RDS-instantie hebben - 'GEBRUIK' is voldoende.

[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)

Nu is het tijd om ProxySQL opnieuw te configureren. We gaan de RDS-instantie toevoegen aan zowel writer (10) als reader (20) hostgroepen. We zullen ook 172.30.4.238 uit die hostgroepen verwijderen - we zullen ze gewoon bewerken en 100 aan elke hostgroep toevoegen.

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)

De laatste stap die nodig is voordat we ProxySQL kunnen gebruiken om ons verkeer om te leiden, is het toevoegen van onze applicatiegebruiker aan 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)

Snelle opmerking - we hebben "SAVE MYSQL-GEBRUIKERS IN GEHEUGEN" uitgevoerd; alleen om het wachtwoord niet alleen in RUNTIME maar ook in de werkgeheugenbuffer te hashen. U kunt meer details over het wachtwoord-hashmechanisme van ProxySQL vinden in hun documentatie.

We kunnen ons verkeer nu omleiden naar ProxySQL. Hoe u dit moet doen, hangt af van uw instellingen, we hebben tpcc zojuist opnieuw opgestart en naar ProxySQL verwezen.

Verkeer omleiden met ProxySQL

Op dit moment hebben we een doelomgeving gebouwd waarnaar we zullen migreren. We hebben ook ProxySQL voorbereid en geconfigureerd voor gebruik door onze applicatie. We hebben nu een goede basis voor de volgende stap, namelijk de daadwerkelijke datamigratie. In het volgende bericht laten we u zien hoe u de gegevens uit RDS kopieert naar onze eigen MySQL-instantie (draaiend op EC2). We laten u ook zien hoe u verkeer naar uw eigen instantie kunt omschakelen terwijl applicaties gebruikers blijven bedienen, zonder downtime.


  1. Hoe groeipercentage week na week te berekenen in MySQL

  2. Succesvolle MySQL/MariaDB back-up- en herstelstrategieën

  3. Hoe het aantal rijen voor alle tabellen in een SQL SERVER-database op te halen

  4. Lopend totaal per groeps-SQL (Oracle)