sql >> Databáze >  >> RDS >> Mysql

MySQL v cloudu – Online migrace z Amazon RDS na EC2 Instance:Část první

V našem předchozím blogu jsme viděli, jak snadné je začít s RDS pro MySQL. Je to pohodlný způsob nasazení a používání MySQL bez obav z provozní režie. Kompromisem je však omezená kontrola, protože uživatelé jsou v případě špatného výkonu nebo provozních anomálií zcela závislí na personálu Amazonu. Žádný přístup k datovému adresáři nebo fyzickým zálohám ztěžuje přesun dat z RDS. To může být velký problém, pokud vaše databáze přeroste RDS a vy se rozhodnete migrovat na jinou platformu. Tento dvoudílný blog vám ukáže, jak provést online migraci z RDS na váš vlastní server MySQL.

EC2 budeme používat ke spuštění našeho vlastního serveru MySQL. Může to být první krok pro složitější migrace do vašich vlastních soukromých datových center. EC2 vám poskytuje přístup k vašim datům, takže lze použít xtrabackup. EC2 vám také umožňuje nastavit SSH tunely a odstraňuje požadavek na nastavení hardwarových VPN připojení mezi vaší místní infrastrukturou a VPC.

Předpoklady

Než začneme, musíme udělat několik předpokladů – zejména ohledně bezpečnosti. Za prvé a především předpokládáme, že instance RDS není přístupná zvenčí AWS. Předpokládáme také, že máte aplikaci v EC2. To znamená, že buď instance RDS a zbytek vaší infrastruktury sdílejí VPC, nebo je mezi nimi nakonfigurován přístup, tak či onak. Stručně řečeno, předpokládáme, že můžete vytvořit novou instanci EC2 a ta bude mít přístup (nebo ji lze nakonfigurovat tak, aby měla přístup) k vaší instanci MySQL RDS.

Na hostiteli aplikace jsme nakonfigurovali ClusterControl. Použijeme jej ke správě naší instance EC2 MySQL.

Počáteční nastavení

V našem případě instance RDS sdílí stejné VPC s naší „aplikací“ (instance EC2 s IP 172.30.4.228) a hostitelem, který bude cílem procesu migrace (instance EC2 s IP 172.30.4.238). Jako aplikaci použijeme benchmark tpcc-MySQL provedený následujícím způsobem:

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

Počáteční plán

Provedeme migraci pomocí následujících kroků:

  1. Nastavte naše cílové prostředí pomocí ClusterControl – nainstalujte MySQL na 172.30.4.238
  2. Potom nainstalujte ProxySQL, který budeme používat ke správě našeho provozu v době převzetí služeb při selhání
  3. Vypište data z instance RDS
  4. Načtěte data do našeho cílového hostitele
  5. Nastavte replikaci mezi instancí RDS a cílovým hostitelem
  6. Přepnout provoz z RDS na cílového hostitele

Příprava prostředí pomocí ClusterControl

Za předpokladu, že máme nainstalovaný ClusterControl (pokud jej nemáte, můžete si jej stáhnout z:https://severalnines.com/download-clustercontrol-database-management-system), musíme nastavit našeho cílového hostitele. Použijeme k tomu průvodce nasazením od ClusterControl:

Nasazení databázového klastru v ClusterControl Nasazení databázového klastru v ClusterControl Nasazení databázového klastru v ClusterControl

Jakmile to uděláte, uvidíte v seznamu clusterů nový cluster (v tomto případě pouze váš jediný server):

Cluster databáze v ClusterControl

Dalším krokem bude instalace ProxySQL - počínaje ClusterControl 1.4 to můžete udělat snadno z uživatelského rozhraní. Tento proces jsme podrobně popsali v tomto příspěvku na blogu. Při instalaci jsme vybrali hostitele naší aplikace (172.30.4.228) jako hostitele pro instalaci ProxySQL. Při instalaci musíte také vybrat hostitele, na který chcete směrovat provoz. Protože v clusteru máme pouze našeho „cílového“ hostitele, můžete jej zahrnout, ale pak je potřeba provést několik změn k přesměrování provozu na instanci RDS.

Pokud jste se rozhodli zahrnout cílového hostitele (v našem případě to bylo 172.30.4.238) do nastavení ProxySQL, uvidíte v tabulce mysql_servers následující položky:

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 nakonfiguroval ProxySQL tak, aby používal hostitelské skupiny 10 a 20 ke směrování zápisů a čtení na backendové servery. Budeme muset odebrat aktuálně nakonfigurovaného hostitele z těchto hostitelských skupin a přidat tam instanci RDS. Nejprve však musíme zajistit, aby uživatel monitoru ProxySQL měl přístup k instanci 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)

Musíme tomuto uživateli udělit přístup k RDS. Pokud jej potřebujeme ke sledování zpoždění replikace, uživatel by musel mít oprávnění ‚REPLICATION CLIENT‘. V našem případě to není potřeba, protože nemáme podřízenou instanci RDS – bude stačit ‚USAGE‘.

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

Nyní je čas překonfigurovat ProxySQL. Chystáme se přidat instanci RDS do hostitelských skupin zapisovače (10) i čtenáře (20). Z těchto hostitelských skupin také odstraníme 172.30.4.238 – pouze je upravíme a do každé hostitelské skupiny přidáme 100.

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)

Posledním krokem, který je nutný, než budeme moci používat ProxySQL k přesměrování našeho provozu, je přidat uživatele naší aplikace do 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)

Rychlá poznámka – provedli jsme „ULOŽIT UŽIVATELE MYSQL DO MEMORY;“ pouze proto, aby bylo heslo zahašováno nejen v RUNTIME, ale také ve vyrovnávací paměti pracovní paměti. Další podrobnosti o mechanismu hašování hesel ProxySQL naleznete v jejich dokumentaci.

Nyní můžeme přesměrovat náš provoz na ProxySQL. Jak to udělat, závisí na vašem nastavení, právě jsme restartovali tpcc a nasměrovali ho na ProxySQL.

Přesměrování provozu pomocí ProxySQL

V tuto chvíli jsme vybudovali cílové prostředí, do kterého budeme migrovat. Připravili jsme také ProxySQL a nakonfigurovali jej pro použití v naší aplikaci. Nyní máme dobrý základ pro další krok, kterým je skutečná migrace dat. V dalším příspěvku vám ukážeme, jak zkopírovat data z RDS do naší vlastní instance MySQL (běžící na EC2). Ukážeme vám také, jak přepnout provoz na vlastní instanci, zatímco aplikace budou nadále sloužit uživatelům, bez prostojů.


  1. Jaký je rozdíl mezi BIT a TINYINT v MySQL?

  2. Použití seskupení podle dvou polí a počítání v SQL

  3. PostgreSQL:přetypovaný řetězec k datu DD/MM/RRRR

  4. Jak vrátím náhodná čísla jako sloupec v SQL Server 2005?