これは、なにをしたくて書いたもの?
MySQL互換の分散データベースであるTiDBを少し試してみたいなと思いまして。
TiDB: The Advanced Distributed SQL Database
今回は、あまりなにも考えずにUbuntu Linux 22.04 LTSにインストールしてみます。
TiDB
TiDBは、PingCAPが開発しているオープンソースでMySQL互換のデータベースです。
TiDB: The Advanced Distributed SQL Database
TiDBのトップページを見ると、以下を特徴にしているようです。
- 水平方向のスケーリング
- 高可用性
- 自動フェイルオーバーとセルフヒーリング
- 強い一貫性
- 分散データに対するグローバルなトランザクション
- ワークロードの混在
- MySQL互換
- マルチクラウド
- オープンソース
- 堅牢なセキュリティ
提供形態としては、以下の3つがあります。
- セルフホスティング
- DBaaS(フルマネージド)
- サーバーレス
自分は、基本的にはセルフホスティングで扱います。
ドキュメントはこちら。
TiDB Introduction | PingCAP Docs
環境
今回の環境は、こちら。Ubuntu Linux 22.04 LTSです。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy $ uname -srvmpio Linux 5.15.0-105-generic #115-Ubuntu SMP Mon Apr 15 09:52:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
TiDBをインストールする
まずは対応OSを見てみます。
Software and Hardware Recommendations / OS and platform requirements
基本的にはRed Hat Enterprise Linux互換のOSが推奨みたいですね。
Ubuntu Linuxでも動作することは書かれていますが、エンタープライズレベルの運用品質は保証しないそうです。
その後に続く必要リソースはまったく足りないのですが、まあ気にせずに今回は進めてみます。
こちらを見て進めればよさそうです。
Quick Start Guide for the TiDB Database Platform | PingCAP Docs
まずはTiUpというツールをインストールします。
$ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
インストールが終わると、こんな表示が出ます。
Successfully set mirror to https://tiup-mirrors.pingcap.com Detected shell: bash Shell profile: /home/xxxxx/.bashrc /home/vagrant/.bashrc has been modified to add tiup to PATH open a new terminal or source /home/xxxxx/.bashrc to use it Installed path: /home/xxxxx/.tiup/bin/tiup =============================================== Have a try: tiup playground ===============================================
シェルを新しく立ち上げるか、.bashrc
を読み込めばtiupコマンドが使えるようになります。
$ . .bashrc
バージョン確認。
$ tiup --version 1.15.0 v1.15.0-nightly-8 Go Version: go1.21.9 Git Ref: master GitHash: 2c38be765363cf699104a3f234513460d155add2
ローカルでTiDB、TiKV、PD、TiFlashのインスタンスをひとつずつ起動します。
※これらの構成要素についてはまた後に調べましょう
$ tiup playground
tiup playgroundはローカルでクラスターを立ち上げるコマンドのようです。なので、インストールというよりはQuickStart的に
ローカルでクラスターを起動するというのが今回やっていることですね。
今回は、TiDB 8.0.0のインストールを始めました。
Note: Version constraint is resolved to v8.0.0. If you'd like to use other versions:
起動すると、こんな表示が出ます。
🎉 TiDB Playground Cluster is started, enjoy! Connect TiDB: mysql --comments --host 127.0.0.1 --port 4000 -u root TiDB Dashboard: http://127.0.0.1:2379/dashboard Grafana: http://127.0.0.1:3000
ダッシュボード、Grafanaもついているようです。
接続もtiupコマンドで行うようです。
$ tiup client
初回はダウンロードが行われます。
プロンプトはこんな感じでした。
my:root@127.0.0.1:4000=>
バージョンを確認してみます。
my:root@127.0.0.1:4000=> select version(); version() -------------------- 8.0.11-TiDB-v8.0.0 (1 row)
データベースを作成してみます。
my:root@127.0.0.1:4000=> create database my_database; CREATE DATABASE my:root@127.0.0.1:4000=> use my_database;
テーブルを作成してデータの登録、取得の確認。
my:root@127.0.0.1:4000=> create table t1(c1 varchar(20)); CREATE TABLE my:root@127.0.0.1:4000=> insert into t1(c1) values('Hello World'); INSERT 1 my:root@127.0.0.1:4000=> select * from t1; c1 ------------- Hello World (1 row)
MySQLのクライアントツールでもアクセスできるみたいなので、インストールしておきましょう。
$ curl -LO https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb $ sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb $ sudo apt update $ sudo apt install mysql-shell mysql-client
なんとなく、通常のMySQLクライアントとMySQL Shellの両方をインストールしておきました。
接続。rootのパスワードは空です。
$ mysqlsh root:@localhost:4000 --sql
データベースを切り替えて、先ほど登録したテーブルとデータを確認。
MySQL localhost:4000 ssl SQL > use my_database; Default schema set to `my_database`. Fetching global names, object names from `my_database` for auto-completion... Press ^C to stop. MySQL localhost:4000 ssl my_database SQL > select * from t1; +-------------+ | c1 | +-------------+ | Hello World | +-------------+ 1 row in set (0.0029 sec)
OKですね。
ここで、tiup playgroundコマンドをCtrl-cで止めます。
ところで、現時点の安定版は7.5のようなのですが、8.0.0をインストールしていましたね。この差はなんなのでしょうか?
バージョンについては、こちらに記載があります。
TiDB Versioning | PingCAP Docs
こちらのページを見ると、どうやら8.0は開発マイルストーンリリース(DMR)のようです。
では、今度は7.5をインストールしてみることにします。
1度すべてのコンポーネントを削除。
$ tiup uninstall --all Uninstalled all components successfully!
tiup listで現在のコンポーネントのバージョンを確認。すべてのコンポーネントのバージョンを確認すると遅いので、TiDBに絞って
確認しました。
$ tiup list tidb
7.5系の最新バージョンは7.5.1のようなので、こちらを指定することにします。
$ tiup playground v7.5.1
ちなみに、TiDBの各コンポーネントはデフォルトでローカルにのみバインドするようなので、必要であれば以下のほうに--host
オプションを
指定します。
$ tiup playground v7.5.1 --host 0.0.0.0
--host
オプションだけではなく、--db.host
など細かく指定できるようなのでそちらはtiup playground --help
で確認しましょう。
ちなみに、今回--host 0.0.0.0
付きで実行したらこんな感じになりました。
🎉 TiDB Playground Cluster is started, enjoy! Connect TiDB: mysql --comments --host 192.168.121.182 --port 4000 -u root TiDB Dashboard: http://192.168.121.182:2379/dashboard Grafana: http://0.0.0.0:3000
見た感じ特定のIPアドレスにバインドされているように見えますが、実際にはすべてのネットワークインターフェースに対して
バインドされています。
接続して
$ tiup client
バージョン確認。
my:root@192.168.121.182:4000=> select version(); version() -------------------- 8.0.11-TiDB-v7.5.1 (1 row)
7.5.1なのですが、これを見て気づきましたが8.0.11というのはベースのMySQLのバージョンでしょうね。
最後にダッシュボードとGrafanaにログインして終わりにしましょう。
ダッシュボードは、http://[host]:2379/dashboard
にアクセスします。デフォルトのユーザー名はroot、パスワードは空です。
Grafanaは、http://[host]:3000
にアクセスします。デフォルトのユーザー名とパスワードは、両方ともadminです。
ログインすると、すぐにパスワードの変更を求められますけど。
最初はなにがあるかわかりにくいですが、トップフォルダーにアクセスするとテスト用のクラスターを認識していることがわかります。
展開するとこんな感じです。
作成されているダッシュボード。
ちなみに、コンソールには出力されていませんでしたがhttp://[host]:9090/
でPrometheusのダッシュボードにもアクセスできます。
こちらは認証不要です。
今回はこんなところでしょうか。
おわりに
MySQL互換の分散データベースであるTiDBを、Ubuntu Linux 22.04 LTS上でローカルにクラスターを起動してみました。
導入自体はTiUpで簡単にできるのですが、リソース少なめの環境で試していたら全然立ち上がらなくて苦労しました…。
まあ、そういう環境で使うものじゃないですよね…。
手持ちの環境がちょっと貧弱なのであまり使いこなせない気はしますが、少しずつ見ていけたらいいかなと思います。