ワンクリックで既存のRDSからPOLARDBを作成する

こんにちは、SBCエンジニアのZです。

今回もまた Alibaba Cloud ApsaraDB for POLARDB の紹介となります。

Alibaba Cloud ApsaraDB for POLARDB のデータベースクラスタを作成するには三つの方法があります。

  • ・新規購入

  • ・RDSからクローン

  • ・RDSからマイグレーション


それぞれの詳細なやり方を以下で記述します。


1、新規購入

下記購入ページのイメージのように、Create Type(作成種類)の選択肢からデフォルトのDefault Create Type を選択し、他は通常のプロダクトを購入するときと同様に、リージョン、スペック、ネットワークなど選択して、購入すれば、新規のクラスタが作成されます。

f:id:sbc_zmm:20200108170341p:plain

2、RDSからクローン

すでに作成済みのRDSから全く同じ構成のデータベースをPOLARDBで作成する方法です。

データベース構成はもちろん、パラメータなどの設定は全く同じです。

ただし、注意したいのは、こちらの方法について、制限があります。

  • ・まず、ストレージエンジンが InnoDB の RDS for MySQL5.6のみ対応されています

  • ・また、TDE(データベースプロキシ)とSSLが無効であること

  • ・管理者権限アカウントが必要

クローン機能を試してみます。

まず既存のRDS for MySQL5.6がクローン対象かどうかを確認します。

バージョン確認:

MySQL [dba1]> show variables like '%version%';
+--------------------------------+-----------------------+
| Variable_name                  | Value                 |
+--------------------------------+-----------------------+
| innodb_version                 | 5.6.16                |
| protocol_version               | 10                    |
| slave_type_conversions         |                       |
| tls_version                    | TLSv1,TLSv1.1,TLSv1.2 |
| tokudb_version                 | 7.5.6                 |
| version                        | 5.6.16-log            |
| version_comment                | Source distribution   |
| version_compile_compiler       | GNU                   |
| version_compile_compiler_major | 4                     |
| version_compile_compiler_minor | 8                     |
| version_compile_machine        | x86_64                |
| version_compile_os             | Linux                 |
+--------------------------------+-----------------------+
12 rows in set (0.00 sec)

エンジンがInnoDBであること:

MySQL [dba1]> show variables like '%engine%';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| default_storage_engine     | InnoDB |
| default_tmp_storage_engine | InnoDB |
| storage_engine             | InnoDB |
+----------------------------+--------+
3 rows in set (0.00 sec)

SSL:

MySQL [dba1]> show status like '%ssl%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| Com_show_processlist            | 0     |
| Com_rds_show_actual_processlist | 0     |
| Ssl_accept_renegotiates         | 0     |
| Ssl_accepts                     | 0     |
| Ssl_callback_cache_hits         | 0     |
| Ssl_cipher                      |       |
| Ssl_cipher_list                 |       |
| Ssl_client_connects             | 0     |
| Ssl_connect_renegotiates        | 0     |
| Ssl_ctx_verify_depth            | 0     |
| Ssl_ctx_verify_mode             | 0     |
| Ssl_default_timeout             | 0     |
| Ssl_finished_accepts            | 0     |
| Ssl_finished_connects           | 0     |
| Ssl_server_not_after            |       |
| Ssl_server_not_before           |       |
| Ssl_session_cache_hits          | 0     |
| Ssl_session_cache_misses        | 0     |
| Ssl_session_cache_mode          | NONE  |
| Ssl_session_cache_overflows     | 0     |
| Ssl_session_cache_size          | 0     |
| Ssl_session_cache_timeouts      | 0     |
| Ssl_sessions_reused             | 0     |
| Ssl_used_session_cache_entries  | 0     |
| Ssl_verify_depth                | 0     |
| Ssl_verify_mode                 | 0     |
| Ssl_version                     |       |
+---------------------------------+-------+
27 rows in set (0.00 sec)

無効化状態であることがわかります。

データベースプロキシ機能:

f:id:sbc_zmm:20200109110457p:plain

プロキシ機能も有効化されていません。

クローンできる条件に満たしていますので、クローン作成に進みます。

購入する時にCreate Type(作成種類)の選択肢からClone from RDS を選択すると、クローンできる対象のRDSインスタンスが選択できます。

f:id:sbc_zmm:20200108170419p:plain

POLARDBのノードスペックを選択し、そのまま購入を進みます。 f:id:sbc_zmm:20200109112958p:plain

購入完了後、数分が経つと、POLARDBのコンソールにRDSからクローンしたPOLARDBクラスタが使用できるようになります。

できたPOLARDBの中身を確認してみますと、

ホワイトリストはソース RDS と同じ設定になっていです: f:id:sbc_zmm:20200109131840p:plain

アカウントも作成済みです: f:id:sbc_zmm:20200109132038p:plain

データベース及びテーブルなどももちろん全部クローンできていました: f:id:sbc_zmm:20200109132112p:plain

MySQL [dba1]> show tables;
+----------------+
| Tables_in_dba1 |
+----------------+
| departments    |
| dept_emp       |
| dept_manager   |
| employees      |
| salaries       |
+----------------+
5 rows in set (0.00 sec)

3、RDSからマイグレーション

こちらの方法も既存RDSデータベースから複製する方法です、さらにRDSの増量データもPOLARDBに同期できます。 さらに、万が一マイグレーションが失敗した場合、元のRDSにロールバックすることもできます。

注意事項として、クローン作成と同じく、

  • ・ストレージエンジンが InnoDB の RDS for MySQL5.6のみ対応

  • ・TDE(データベースプロキシ)とSSLが無効であること

  • ・管理者権限アカウントが必要

こちらのマイグレーション機能も検証してみましょう。 購入画面もクローン作成と同じく、Create Type(作成種類)の選択肢からMigration from RDS を選択すると、ソースRDSインスタンスが選択できます。 f:id:sbc_zmm:20200109134903p:plain

クローン作成よりマイグレーション作成タスクのほうが時間かかる感じですね。

POLARDB データベースクラスタが作成できた後、POLARDBの管理コンソールで確認してみます。

ホワイトリスト、アカウント、データはクローンと同じくできています、 さらに、通常の管理画面よりマイグレーション管理メニューが増えています。 f:id:sbc_zmm:20200109143544p:plain

今の状態だと、POLARDBはまだ読み取り用のみで、ソースRDSの側からの更新を同期するしかできないです。 RDSでデータ更新をやってみます:

MySQL [dba1]> show tables;
+----------------+
| Tables_in_dba1 |
+----------------+
| departments    |
| dept_emp       |
| dept_manager   |
| employees      |
| salaries       |
+----------------+
5 rows in set (0.00 sec)

productというテーブルを追加します:

MySQL [dba1]> CREATE TABLE product (
    ->     id     INT             NOT NULL COMMENT 'PK',
    ->     price       INT             NOT NULL,
    ->     store_num   INT            NOT NULL,
    ->     in_store_date     DATE      NOT NULL
    -> );
Query OK, 0 rows affected (0.00 sec)

MySQL [dba1]> show tables;
+----------------+
| Tables_in_dba1 |
+----------------+
| departments    |
| dept_emp       |
| dept_manager   |
| employees      |
| product        |
| salaries       |
+----------------+
6 rows in set (0.00 sec)

POLARDBで同じテーブルが増えてることを確認できます:

MySQL [dba1]> show tables;
+----------------+
| Tables_in_dba1 |
+----------------+
| departments    |
| dept_emp       |
| dept_manager   |
| employees      |
| product        |
| salaries       |
+----------------+
6 rows in set (0.00 sec)

マイグレーション管理メニューでSwitch(切り替え)ボタンを押すと、ソースRDSとPOLARDBの役が切り替えられます。 f:id:sbc_zmm:20200109153952p:plain

f:id:sbc_zmm:20200109154029p:plain 切り替え終了後、管理コンソールからRead Writeになったことがわかります: f:id:sbc_zmm:20200109154053p:plain

今の状態で、POLARDB側ではデータ書き込めるようになりました:

MySQL [dba1]> INSERT INTO `product` VALUES
    -> (1001,5000,'100','2020-01-01');
Query OK, 1 row affected (0.01 sec)

MySQL [dba1]> SELECT * from product;
+------+-------+-----------+---------------+
| id   | price | store_num | in_store_date |
+------+-------+-----------+---------------+
| 1001 |  5000 |       100 | 2020-01-01    |
+------+-------+-----------+---------------+
1 row in set (0.01 sec)

その代わり、ソースRDS側ではデータ更新できなくなっているはず:

MySQL [dba1]> SELECT * from product;
+------+-------+-----------+---------------+
| id   | price | store_num | in_store_date |
+------+-------+-----------+---------------+
| 1001 |  5000 |       100 | 2020-01-01    |
+------+-------+-----------+---------------+
1 row in set (0.00 sec)

MySQL [dba1]> INSERT INTO `product` VALUES
    -> (1002,5000,'100','2020-01-02');

ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement

これでうまくRDSからPOLARDBにマイグレーションできました。 最後はマイグレーション終了ボタンを押せばマイグレーション終了です。

f:id:sbc_zmm:20200109154853p:plain

f:id:sbc_zmm:20200109154826p:plain

f:id:sbc_zmm:20200109190853p:plain

Read onlyになったソースRDSを同期切り離して、コンールからマイグレーションメニューが消えます。 f:id:sbc_zmm:20200117100530p:plain

RDSからPOLARDBへのマイグレーションが完了です。

終わりに

以上で、既存のRDSからPOLARDBへ移行する機能の検証でした。 RDSからPOLARDBに移行する際にはそんなに苦労しなくてもいいと思います。