Vitess as a Service:Vitessのフル・マネージド・サービスを試す(導入編)
注意:本記事の内容は所属企業とは全く関係がありません。個人の趣味です。
Kubernetes Advent Calendar 2019 - Qiita 15日目です。
Vitessとは
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アカウントでログインします(便利)。
続いて Create New Account で以下を入力していきます。
- アカウント名
- Billing Information
- Apply Coupons
Billing Information / Apply CouponsはSkipすることができるので、今回はSkipしていきます。$0.07/hr までは無料で利用することが可能です(Getting Started Credits)。
ログインするとこのようなページへ。早速Create Clusterしたくなるページ。
Create your first cluster
"Create Cluster"をクリック。ここではクラスタ名と使用するCloudサービス、Regionを選択します。
現在Regionは以下に対応しているようです。今後増えていくのでしょう。Tokyoにも来るといいですね。
Create Database
続いてDatabaseを作成していきます。画面遷移することなく手順が示されるため、とても分かりやすいです。
"Create Database"をクリックすると、以下の入力が求められます。
- Database Name:データベース名を入力
- Deployment Type:Deployment Typeを選択(今回はGCPを選択したため、Single Regionしか選べませんでした。)
- Instance Configuration:CPU、RAM、Storageなどサイズを選びます。今回はdefaultのまま。
- Number of instances:レプリカ数、Read-Only数を選択します。レプリカ数は3以上にすることで High Availabilityにチェックが付きますが、今回は1のまま。
- Sharding:シャードの数を指定します。せっかくなので今回は2を指定してみます。
金額は0.604/hrとでています。即座に金額がわかって親切ですね。最後に"Create Database"をクリックして少し待つと以下の画面が表示されます。
裏側では恐らくPlanetScaleが管理するKubernetes上にMySQLのコンテナやVitessのコンポーネント(vtgate等)がデプロイされ、Ingressが作成されているようです。ほんの数分で完了します。
作成したデータベース名を選択すると、"Overview"タブからデータベースの情報を確認することができます。
さらにこのページから"Schema"を作成したり、"Sharding Scheme(vSchema)"を作成することができます。
右上の"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つのインスタンスが見えています。
”Backup”タブでは、バックアップの取得状況が確認できます。
12時間ごとに自動的にレギュラーバックアップが取得されるようです。 Vitessではタブレットを追加作成するとき、バックアップから作成されるため、確実に使えるバックアップを用意する必要があります。
長くなったので今回はここまでにします。次は実際にデータを入れて、スケールのテストなどしてみたいと思います。
終わりに
Vitessは、YouTube、Square、Slack、Githubなどグローバルにサービスを提供する企業が利用している印象を受けます。
これらグローバル企業の多くは研究開発費やエンジニアの数もすさまじく、クラウドに頼らずともon-premiseで運用できてしまうことが多いですが、やはり絶対的に楽です。クラウド。今回試してみて、あの苦労は何だったのだと思いました。
Vitessもクラウドサービス化されることで導入の敷居を下げ、より幅広い企業に利用されていくことを期待しています。
がんばれVitess!