sql >> データベース >  >> RDS >> Mysql

クラウド内のMySQL-AmazonRDSからEC2インスタンスへのオンライン移行:パート1

    以前のブログでは、RDSforMySQLの使用を開始するのがいかに簡単であるかを見ました。これは、運用上のオーバーヘッドを気にせずにMySQLをデプロイして使用するための便利な方法です。ただし、パフォーマンスの低下や運用上の異常が発生した場合、ユーザーはAmazonのスタッフに完全に依存するため、トレードオフは制御の低下につながります。データディレクトリまたは物理バックアップにアクセスできないため、RDSからデータを移動するのが困難になります。データベースがRDSを超えてしまい、別のプラットフォームに移行することにした場合、これは大きな問題になる可能性があります。この2部構成のブログでは、RDSから独自のMySQLサーバーにオンラインで移行する方法を紹介しています。

    EC2を使用して独自のMySQLサーバーを実行します。これは、独自のプライベートデータセンターへのより複雑な移行の最初のステップになる可能性があります。 EC2を使用すると、データにアクセスできるため、xtrabackupを使用できます。 EC2ではSSHトンネルをセットアップすることもでき、オンプレミスインフラストラクチャとVPCの間にハードウェアVPN接続をセットアップする必要がなくなります。

    前提条件

    始める前に、特にセキュリティに関して、いくつかの仮定を立てる必要があります。まず第一に、RDSインスタンスはAWSの外部からアクセスできないと想定しています。また、EC2にアプリケーションがあることを前提としています。これは、RDSインスタンスとインフラストラクチャの残りの部分のいずれかがVPCを共有しているか、いずれかの方法でそれらの間にアクセスが構成されていることを意味します。つまり、新しいEC2インスタンスを作成でき、MySQL RDSインスタンスにアクセスできる(またはアクセスできるように設定できる)と想定しています。

    アプリケーションホストでClusterControlを構成しました。これを使用して、EC2MySQLインスタンスを管理します。

    初期設定

    この場合、RDSインスタンスは同じVPCを「アプリケーション」(IP 172.30.4.228のEC2インスタンス)および移行プロセスのターゲットとなるホスト(IP 172.30.4.238のEC2インスタンス)と共有します。アプリケーションとして、次の方法で実行されるtpcc-MySQLベンチマークを使用します。

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

    初期計画

    次の手順を使用して移行を実行します。

    1. ClusterControlを使用してターゲット環境をセットアップします-172.30.4.238にMySQLをインストールします
    2. 次に、フェイルオーバー時にトラフィックを管理するために使用するProxySQLをインストールします
    3. RDSインスタンスからデータをダンプします
    4. データをターゲットホストにロードします
    5. RDSインスタンスとターゲットホスト間のレプリケーションを設定します
    6. RDSからターゲットホストへのトラフィックの切り替え

    ClusterControlを使用して環境を準備する

    ClusterControlがインストールされていると仮定すると(https://severalnines.com/download-clustercontrol-database-management-systemから取得できない場合)、ターゲットホストをセットアップする必要があります。そのために、ClusterControlのデプロイメントウィザードを使用します:

    ClusterControlでのデータベースクラスターの展開 ClusterControlでのデータベースクラスターの展開 ClusterControlでのデータベースクラスターの展開

    これが完了すると、クラスターリストに新しいクラスター(この場合は単一のサーバーのみ)が表示されます。

    ClusterControlのデータベースクラスター

    次のステップは、ProxySQLをインストールすることです。ClusterControl1.4から、UIから簡単にインストールできます。このプロセスについては、このブログ投稿で詳しく説明しました。インストール時に、ProxySQLをインストールするホストとしてアプリケーションホスト(172.30.4.228)を選択しました。インストールするときは、トラフィックをルーティングするホストも選択する必要があります。クラスタには「宛先」ホストしかないため、それを含めることができますが、トラフィックをRDSインスタンスにリダイレクトするにはいくつかの変更が必要です。

    ProxySQLセットアップに宛先ホスト(この場合は172.30.4.238)を含めることを選択した場合、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は、ホストグループ10および20を使用して書き込みと読み取りをバックエンドサーバーにルーティングするようにProxySQLを構成しました。現在構成されているホストをそれらのホストグループから削除し、そこにRDSインスタンスを追加する必要があります。ただし、最初に、ProxySQLのモニターユーザーが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)

    このユーザーにRDSへのアクセスを許可する必要があります。レプリケーションラグを追跡するために必要な場合、ユーザーは「REPLICATIONCLIENT」権限を持っている必要があります。この場合、スレーブRDSインスタンスがないため、これは必要ありません。「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)

    次に、ProxySQLを再構成します。 RDSインスタンスをライター(10)とリーダー(20)の両方のホストグループに追加します。また、これらのホストグループから172.30.4.238を削除します。これらを編集して、各ホストグループに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)

    ProxySQLを使用してトラフィックをリダイレクトする前に必要な最後のステップは、アプリケーションユーザーを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)

    クイックノート-「SAVEMYSQLUSERSTOMEMORY」を実行しました。 RUNTIMEだけでなく、ワーキングメモリバッファでもパスワードをハッシュ化するだけです。 ProxySQLのパスワードハッシュメカニズムの詳細については、ドキュメントをご覧ください。

    これで、トラフィックをProxySQLにリダイレクトできます。その方法はセットアップによって異なります。tpccを再起動してProxySQLを指定しました。

    ProxySQLを使用したトラフィックのリダイレクト

    この時点で、移行先のターゲット環境を構築しました。また、ProxySQLを準備し、アプリケーションが使用できるように構成しました。これで、次のステップである実際のデータ移行の基盤が整いました。次の投稿では、RDSから独自のMySQLインスタンス(EC2で実行)にデータをコピーする方法を紹介します。また、アプリケーションがダウンタイムなしでユーザーにサービスを提供し続けている間に、トラフィックを独自のインスタンスに切り替える方法についても説明します。


    1. OracleDBAリアルタイムの質問

    2. Rails 3 ActiveRecord:関連付けをカウントして並べ替え

    3. 最適化のしきい値–データのグループ化と集約、パート3

    4. 外部キー条件のPostgreSQLチェック制約