そこはかとなく

見て聞いて触ったことの技術メモ

Vitess as a Service:Vitessのフル・マネージド・サービスを試す(導入編)

注意:本記事の内容は所属企業とは全く関係がありません。個人の趣味です。

Kubernetes Advent Calendar 2019 - Qiita 15日目です。

Vitessとは

f:id:scoto:20191213184712p:plain

Vitessを皆さんはご存知でしょうか?

CNCFが2019/11/5にVitessのGraduateを発表し、 さらにCloudNativeCon 2019 SanDiegoでもKeynoteに取り上げられたこともあり注目度・認知度が上がってきているのではないでしょうか。

Vitessは一行で説明すると"MySQLの水平スケーリングを実現するためのデータベースクラスタリングシステム"です。

Vitessの大きな特徴は、Cloud Native Databaseと紹介されることがある通り、Kubernetesを当初からサポートし、etcd、gRPC、Prometheusを含む他の多くのCloud Native Projectsと統合して利用することで、ベンダーロックインされることなく、MySQLをシャーディングにより(無限に?)スケールさせて利用できる点です。

この記事ではVitessのアーキテクチャ紹介は致しません。 アーキテクチャや特徴に興味のある方は、以前Vitessについてまとめた資料を御覧ください。2018年作成のため少し古いです。

Vitess のパフォーマンスと運用性を検証してみた
Kubernetesが超強力な分散RDBに vitessの真価を大検証してみた (JapanContainerDays v18.12)

これらの資料を作成した頃は、Helmが用意されていなかったり、マニュアルも正確でないことがあり、エラー内容もわからないままにトライアンドエラーを繰り返し、躓いてはSlackで質問し本当に大変でした。(今は改善しつつあります!)

Vitess as a Service:PlanetScale CNDb

さて、この記事で本題として取り上げたいのはPlanetScale社が提供する"Vitess as a Service"である"PlanetScale CNDb"です。

PlanetScaleは、2018年にVitessのオープンソースプロジェクトの共同管理者によって設立されました。以下のサービスを提供しています(抜粋)。

  • Open Source Vitess:Vitessの9ヵ月の限定的なサポート(恐らく導入コンサル的なもの?)
  • PlanetScale Enterprise:Vitessの長期サポート3年とSLA保証
  • PlanetScale CNDb:Kubernetesを前提としたVitessのフル・マネージドなサービス提供

Vitessのフル・マネージド……すごい。ということで試してみました。

ログイン

https://console.planetscale.com/login からログインします。私はGoogleアカウントでログインします(便利)。 f:id:scoto:20191213185025p:plain

続いて Create New Account で以下を入力していきます。

  1. アカウント名
  2. Billing Information
  3. Apply Coupons

Billing Information / Apply CouponsはSkipすることができるので、今回はSkipしていきます。$0.07/hr までは無料で利用することが可能です(Getting Started Credits)。

ログインするとこのようなページへ。早速Create Clusterしたくなるページ。 f:id:scoto:20191213190219p:plain

Create your first cluster

"Create Cluster"をクリック。ここではクラスタ名と使用するCloudサービス、Regionを選択します。

f:id:scoto:20191213190836p:plain
create cluster

現在Regionは以下に対応しているようです。今後増えていくのでしょう。Tokyoにも来るといいですね。

Create Database

続いてDatabaseを作成していきます。画面遷移することなく手順が示されるため、とても分かりやすいです。 f:id:scoto:20191213191150p:plain

"Create Database"をクリックすると、以下の入力が求められます。

  1. Database Name:データベース名を入力
  2. Deployment Type:Deployment Typeを選択(今回はGCPを選択したため、Single Regionしか選べませんでした。)
  3. Instance Configuration:CPU、RAM、Storageなどサイズを選びます。今回はdefaultのまま。
  4. Number of instances:レプリカ数、Read-Only数を選択します。レプリカ数は3以上にすることで High Availabilityにチェックが付きますが、今回は1のまま。
  5. Sharding:シャードの数を指定します。せっかくなので今回は2を指定してみます。

f:id:scoto:20191214175321p:plain f:id:scoto:20191214175347p:plain f:id:scoto:20191214175420p:plain

金額は0.604/hrとでています。即座に金額がわかって親切ですね。最後に"Create Database"をクリックして少し待つと以下の画面が表示されます。

f:id:scoto:20191214175912p:plain

裏側では恐らくPlanetScaleが管理するKubernetes上にMySQLのコンテナやVitessのコンポーネント(vtgate等)がデプロイされ、Ingressが作成されているようです。ほんの数分で完了します。

作成したデータベース名を選択すると、"Overview"タブからデータベースの情報を確認することができます。 f:id:scoto:20191214180017p:plain

さらにこのページから"Schema"を作成したり、"Sharding Scheme(vSchema)"を作成することができます。 f:id:scoto:20191214181339p:plain f:id:scoto:20191214181519p:plain

右上の"Connect"をクリックすると、以下のようにvtgateへの接続するためのコマンドが表示されます。

mysql --host 34.XX.XX.XX --port 3306 --user vtgate-testdb-user --password=XXXXXXX

コマンドを打つと、vtgate経由でServer version:5.5.10-Vitess MySQL Community Serverへの接続が確認できます。

# mysql --host 34.XX.XX.XX --port 3306 --user vtgate-testdb-user --password=XX
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.10-Vitess MySQL Community Server (GPL)

Copyright (c) 2000, 2019, 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> SHOW TABLES FROM testdb;
+---------------------+
| Tables_in_vt_testdb |
+---------------------+
| user1               |
| user2               |
+---------------------+
2 rows in set (0.06 sec)

"Instances"タブでは、各シャードの状態が確認できます。今回はShardを2つ作成しているので2つのインスタンスが見えています。

f:id:scoto:20191215112125p:plain

”Backup”タブでは、バックアップの取得状況が確認できます。 f:id:scoto:20191215112238p:plain

12時間ごとに自動的にレギュラーバックアップが取得されるようです。 Vitessではタブレットを追加作成するとき、バックアップから作成されるため、確実に使えるバックアップを用意する必要があります。

長くなったので今回はここまでにします。次は実際にデータを入れて、スケールのテストなどしてみたいと思います。

終わりに

Vitessは、YouTube、Square、Slack、Githubなどグローバルにサービスを提供する企業が利用している印象を受けます。

これらグローバル企業の多くは研究開発費やエンジニアの数もすさまじく、クラウドに頼らずともon-premiseで運用できてしまうことが多いですが、やはり絶対的に楽です。クラウド。今回試してみて、あの苦労は何だったのだと思いました。

Vitessもクラウドサービス化されることで導入の敷居を下げ、より幅広い企業に利用されていくことを期待しています。

がんばれVitess!