Alibaba Cloud の POLARDB を試してみる（１）MySQL 8.0 互換版起動編

Alibaba Cloud の **ApsaraDB for POLARDB** が 2019/08 ～ 09 にかけていくつかのリージョンで GA になったようなので、早速試してみました。

**（注）**2019/11/18 現在、日本版のアカウントでは ApsaraDB for POLARDB は使用できません（東京リージョンでも使用できません）。そのため、この記事では国際版アカウントで試しています。

# ApsaraDB for POLARDB とは

ざっくりいうと**「Alibaba Cloud 版の Amazon Aurora」**のようなものです。
MySQL・PostgreSQL といったオープンソースの RDBMS をベースとしながらも（ただし POLARDB には Oracle 互換版もあります）、処理性能およびストレージ容量がスケールしやすいような構造に拡張されています。

## Amazon Aurora と似ているところ

 - DB（SQL）ノードとストレージノードが別々の階層に分離されている
 - ストレージが Log Structured になっている
 - 複数の DB ノード（Writer / Reader インスタンス）が同じストレージ（ストレージクラスタ／データチャンク群）を共有する（共有型の分散ストレージ）

## Amazon Aurora と違うところ

 - ストレージ層に NVMe SSD、RoCE RDMA ネットワークを導入し、ハードウェアの力で I/O の高速化を図っている（Aurora は汎用的なハードウェアを使用）
 - ストレージは同一ゾーン内の 3 ノード（データチャンクサーバ）を 1 組としてデータを記録している（Aurora は 3 つのゾーンに合計 6 つ 1 組で記録）。ゾーン跨ぎはオプション
   - データ一貫性を保証するために Parallel-Raft プロトコルを使用。Aurora のように不整合が見つかった場合にゴシッププロトコルで修正を掛けるような仕組みはなさそう（？）
 - 前段のプロキシで Writer / Reader へのアクセスを振り分けている~~（MySQL 互換版のみ）~~
   - **2019/11/26 追記：**2019/11 現在、PostgreSQL 互換版でも Preview テストとしてプロキシ機能が提供されている模様
 - ~~オリジナルの OSS に対して手を加えている範囲が Aurora と比較して小さい模様（推測）。そのため~~ 2019/09 時点ですでに MySQL 8.0 互換版も存在している
   - **2019/11/26 追記：**[続き（２）](https://qiita.com/hmatsu47/items/da024a9de6236d761cdc)の記事を書くにあたり動作させてみたところ、サーバ変数の大量追加などを確認。プロキシとの協調動作などもあり、それなりに手が加わっている印象に変わった

[こちら](http://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/assets/img/3008/15659275602077_en-US.png)の図のようなアーキテクチャになっています。

## 参考リンク（公式マニュアル／ブログ等）

 - **[Architecture](https://www.alibabacloud.com/help/doc-detail/58766.htm)**
 - **[PolarDB Series (1): Get Started in 10 Minutes](https://www.alibabacloud.com/blog/594647)**
 - **[PolarDB Series (2): Improving Cost-Efficiency](https://www.alibabacloud.com/blog/594648)**
 - **[PolarDB Series (3): Elasticity and Scalability](https://www.alibabacloud.com/blog/594649)**
 - **[PolarDB Series (4): Physical and Logical Logs](https://www.alibabacloud.com/blog/594650)**
 - **[PolarDB Series (5): Session Read Consistency](https://www.alibabacloud.com/blog/594651)**
 - **[PolarDB: Deep Dive on Alibaba Cloud’s Next-Generation Database](https://www.alibabacloud.com/blog/578138)**
 - **[Alibaba Cloud PolarDB: 100TB Capacity & 6x Performance Improvement](https://www.alibabacloud.com/blog/578294)**
 - **[PolarDB: Alibaba Cloud's Relational Database Services Architecture](https://www.alibabacloud.com/blog/579134)**
 - **[A Brief History of Development of Alibaba Cloud PolarDB](https://www.alibabacloud.com/blog/a-brief-history-of-development-of-alibaba-cloud-polardb_594254)**
 - **[云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析](https://juejin.im/post/5da576c8f265da5b7244c17b)**

# MySQL 8.0 互換版を起動してみる

今回は国際版アカウントでクラスタを作成し、起動してみます。

## クラスタの作成

![polar01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/b72f4001-e829-91ee-f11a-8fb06346be91.png)

杭州リージョンに MySQL 8.0 のクラスタを、最低サイズである 2 コア 4GB × 2 で作成します。

ゾーン・VPC・Vswitch も選択します。

![polar02_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/090605d2-a431-665a-603f-680a7dc31bd9.png)

![polar02_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/607170d1-86a6-5a49-f33b-3cb6936a4d70.png)

![polar03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/df56d4ef-8546-a61e-cdc6-e383fb01b969.png)

![polar04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/5c932901-8e6e-bb37-34ec-d97a3c9c2763.png)

作成後、クラスタ名を`testdb`に変更します。

![polar05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/57af891d-35b8-6a9e-8c4c-b9a54524f59f.png)

## ホワイトリストの指定

作成されたクラスタを確認します。

![polar06_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/c15cc6aa-ed4c-0d07-9b64-c406c6db7eea.png)

![polar06_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/45bb698f-9361-8832-92bf-9695606cf150.png)

ホワイトリスト（アクセス元として許可する IP アドレス範囲）を指定します。

![polar06_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/2b4fd8d3-2e3b-56b2-4da2-3b9d7e0c61c8.png)

## 管理アカウントの作成

Privileged Account を作成します。

![polar07_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/fafdd053-61db-46c7-42f8-4bae7b47427e.png)

![polar07_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/d7f62ea0-c795-c36e-b16d-007c61c024ae.png)

## パラメータの設定

必要に応じて、データベース（クラスタ）のパラメータを設定します。
AWS のパラメータグループとは異なり、クラスタ毎に設定するようです。
また、変更不可のパラメータはコンソールに表示されないようです。

![polar08_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/0093fdad-7d1c-2f14-e36b-ec8e6c5e506b.png)

![polar08_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/d92c5101-e4ad-ca1b-5140-e129ea004aab.png)

![polar08_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/e48ac9a1-01f6-cf37-3531-6e4ee992a7f0.png)

![polar08_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/d338c0ef-8652-25d3-5f15-9087623c8fa4.png)

![polar08_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/cc2b4cbd-28bc-1332-1adb-15383af943cf.png)

![polar08_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/fcf7fcd0-f54b-bb96-85ea-e31a04f9c22d.png)

![polar08_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/792a64c8-ff96-db90-aee9-5200a0ddda46.png)

![polar08_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/0866b7b8-f844-6a14-b7c0-9d3dae754e7a.png)

![polar08_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/95e364ed-da12-7047-ff69-d2aa3046bc6b.png)

![polar08_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/cae8b33f-839b-9f3d-f617-4613571ab8b2.png)

![polar08_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/89d31dc1-d398-9d78-e07f-b2ec744ad346.png)

![polar08_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/9842ba82-44d2-f8ce-718f-5a006f79baa8.png)

![polar08_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/8f873952-64fe-9fc3-23f1-a7ab64c68e59.png)

# 接続してみる

同じ VPC にある ECS インスタンスから接続してみます。

![polar10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/3e874bbb-4a1d-9e2d-05d8-c40bc4fe6624.png)

ベースのバージョンは 8.0.13 のようです（2019/11/18 現在）。

# モニタリング

項目数は少ないですが、動作状況をグラフ表示することができます。

![polar09_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/52cd4006-5bfd-2d03-d8af-7ed014487cc2.png)

![polar09_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/d7f9fd50-a88f-7e29-deb0-aab0863a91cc.png)

そのほか、スロークエリの確認などができるようになっています。

※テスト用に作成した環境なので ID 等はそのまま表示しています（実環境では既に削除済）。

---

次回は MySQL 8.0 互換版~~とともに PostgreSQL 11 互換版も起動し、~~でバッファプール／共有バッファ周りの挙動を確かめてみる予定です。

**2019/11/24 追記：**
書きました。
 - **[Alibaba Cloud の POLARDB を試してみる（２）MySQL 8.0 互換版のバッファプールまわりを中心に](https://qiita.com/hmatsu47/items/da024a9de6236d761cdc)**