2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

TiDBは、分散型SQLデータベースであり、従来のリレーショナルデータベース(RDBMS)の使いやすさとNoSQLのスケーラビリティを兼ね備えています。この記事では、TiDBの基本概念、NewSQLとしての位置づけ、TiKVの役割、PD Clusterの説明、そしてTiDBの環境構築について詳しく説明します。

NewSQLとは?

NewSQLは、従来のRDBMSのACID特性とNoSQLのスケーラビリティを兼ね備えた新しいタイプのデータベースでTiDBもその一つです。NewSQLデータベースは、高スループットのトランザクション処理を分散環境で実現し、大規模なデータセットに対しても一貫したパフォーマンスを提供します。

NewSQLの特徴

  • ACID特性のトランザクション: NewSQLは、分散環境においても強い一貫性を保つトランザクションをサポートします。
  • 水平スケーラビリティ: データをシャーディングし、複数のノードに分散して保存することで、大規模なデータセットでも効率的に処理できます。
  • 高可用性: Raftプロトコルを使用したデータ複製と自動フェイルオーバーにより、高い可用性を実現しています。
  • 強い一貫性: 分散トランザクションをサポートし、一貫性のあるデータ処理を提供します。

TiDBの基本概念

TiDBはGoogle Cloud Spannerから多くのインスピレーションを受けており、特に分散トランザクションと水平スケーラビリティの実現方法において影響を受けています。

TiDBのアーキテクチャ

TiDBは主に以下の3つのコンポーネントから構成されています:

  1. TiDBサーバー: SQLレイヤーとして機能し、SQLクエリを解析、最適化、実行します。MySQLプロトコルと互換性があり、既存のMySQLクライアントやツールを使用できます。
  2. TiKV: 分散型キー・バリューストアであり、データのストレージを担当します。RocksDB上に構築されており、Raftプロトコルを使用してデータの複製と一貫性を保証します。
  3. PD(Placement Driver)クラスター: クラスタ管理とメタデータの管理を行い、データの分割と配置を制御します。

TiKVの解説

TiKVの役割

TiKVは、TiDBのデータストレージを担当する分散型キー・バリューストアです。以下が主な役割です:

  1. データストレージ: データをキー・バリュー形式で保存し、高速なデータアクセスを提供します。
  2. データ複製: Raftプロトコルを使用してデータの複製と一貫性を保証します。
  3. フォールトトレランス: ノード障害時に自動フェイルオーバー機能を提供し、高可用性を実現します。
  4. スケーラビリティ: ノードを追加することで、容易にスケールアウトが可能です。

TiKVのアーキテクチャ

TiKVは、データをリージョンと呼ばれる小さな単位に分割し、各リージョンは複数のTiKVノードに複製されます。PD(Placement Driver)がリージョンの配置と負荷分散を管理します。

PD Clusterの役割

PD(Placement Driver)はTiDBクラスターの「頭脳」として機能し、以下の重要な役割を果たします:

  1. メタデータの管理: クラスタ内のすべてのメタデータを管理し、データの配置やスプリット情報を保持します。
  2. スケジューリング: データのバランシングやリソースの最適化を行い、クラスタ全体のパフォーマンスを向上させます。
  3. リーダー選出: Raftプロトコルに基づいてリーダー選出を行い、データの一貫性と可用性を確保します。
  4. クラスタの監視と管理: クラスタのヘルスチェックを行い、障害発生時のリカバリを管理します。

TiDBの活用方法

アーキテクチャ例

TiDBをデータベース、S3やGoogle Cloud Storageをデータレイク、SnowflakeやBigQueryをデータウェアハウス(DWH)として使用し、その後にBIツールや機械学習(ML)を組み合わせるアーキテクチャを紹介します。

+--------------------------------------+
|              Clients                 |
+--------------------------------------+
              |       
              v       
+--------------------------------------+
|           TiDB Servers               |
+--------------------------------------+
              |       
              v       
+--------------------------------------+
|           PD Cluster                 |
+--------------------------------------+
              |       
              v       
+----------------------------+ +----------------------------+
|          TiKV Nodes        | |          TiKV Nodes        |
+----------------------------+ +----------------------------+
              |       
              v       
+--------------------------------------+
|         Data Transfer Tool           |
|         (e.g., Apache NiFi)          |
+--------------------------------------+
              |       
              v       
+--------------------------------------+
| Data Lake (Amazon S3, GCS, etc.)     |
+--------------------------------------+
              |       
              v       
+--------------------------------------+
|           ELT Tool (e.g., DBT)       |
+--------------------------------------+
              |       
              v       
+--------------------------------------+
|    Data Warehouse (Snowflake, BQ)    |
+--------------------------------------+
              |       
              v       
+----------------+ +------------------+
|  BI Tools      | |  ML Systems      |
| (Tableau, etc.)| | (TensorFlow,etc.)|
+----------------+ +------------------+

アーキテクチャの利点

  1. スケーラビリティ: 各コンポーネントが独立してスケールできるため、システム全体のスケーラビリティが高い。
  2. 柔軟性: 異なるツールやサービスを組み合わせることで、システムの柔軟性が向上。
  3. 高可用性: TiDB、S3、Snowflake、Google Cloud Storage、BigQueryなどのサービスは、高可用性とデータ冗長性を提供。
  4. リアルタイム性とバッチ処理の両立: TiDBでリアルタイム処理を行い、S3やGoogle Cloud StorageとSnowflakeやBigQueryでバッチ処理や高度な分析を行うことができる。

TiDBの簡単な環境構築手順について

1. TiUPのインストール

まず、TiUPをダウンロードしてインストールします。

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

次のメッセージが表示されたら、TiUPは正常にインストールされています。

Successfully set mirror to https://tiup-mirrors.pingcap.com
Detected shell: zsh
Shell profile:  /Users/user/.zshrc
/Users/user/.zshrc has been modified to add tiup to PATH
open a new terminal or source /Users/user/.zshrc to use it
Installed path: /Users/user/.tiup/bin/tiup
===============================================
Have a try:     tiup playground
===============================================

2. グローバル環境変数の設定

上記の出力に従い、シェルプロファイルを更新してTiUPを利用可能にします。この場合、~/.zshrcを使用します。

source ~/.zshrc

3. TiDBクラスターの起動

現在のセッションでクラスターを起動します。以下のコマンドを実行して、最新バージョンのTiDBクラスターを起動します。

tiup playground

または、特定のバージョンとインスタンス数を指定して起動することもできます。

tiup playground v8.1.0 --db 2 --pd 3 --kv 3

このコマンドは、指定されたバージョンのクラスターをローカルマシンにダウンロードして起動します。

4. クラスターのアクセス情報

クラスターが正常に起動すると、以下のようなアクセス情報が表示されます。

CLUSTER START SUCCESSFULLY, Enjoy it ^-^
To connect TiDB: mysql --comments --host 127.0.0.1 --port 4001 -u root -p (no password)
To connect TiDB: mysql --comments --host 127.0.0.1 --port 4000 -u root -p (no password)
To view the dashboard: http://127.0.0.1:2379/dashboard
PD client endpoints: [127.0.0.1:2379 127.0.0.1:2382 127.0.0.1:2384]
To view Prometheus: http://127.0.0.1:9090
To view Grafana: http://127.0.0.1:3000

5. TiDBのダッシュボードへのアクセス

TiDBが正常に起動していることを確認するために、以下のURLにアクセスします。

6. TiDBへのアクセス

TiUP Playgroundがバックグラウンドで実行されていることを確認した後、新しいターミナルウィンドウを開き、以下のコマンドを実行してMySQLクライアントからTiDBに接続します。

mysql --host 127.0.0.1 --port 4000 -u root

動作確認とテスト

データベースとテーブルの作成、データの挿入、クエリ

TiDBに接続した後、以下のコマンドを実行してデータベースとテーブルを作成し、データを挿入してクエリを実行します。

-- データベースの作成、テーブルの作成、データの挿入を同時に実行
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com');

スクリーンショット 2024-06-16 17.11.23.png

-- データのクエリ
SELECT * FROM users;

スクリーンショット 2024-06-16 17.12.00.png

ダッシュボードについて

[TiDB] ダッシュボードでは、クラスターの全体的なステータス、各コンポーネントのヘルスチェック、パフォーマンスメトリクス、トランザクションの詳細、SQLクエリの実行状況などをリアルタイムで監視できます。これにより、クラスターのパフォーマンス最適化やトラブルシューティングが容易になります。

[Prometheus] ダッシュボードでは、クラスターの詳細なメトリクス(例:CPU使用率、メモリ使用量、I/O統計など)を収集・表示します。これにより、リソースの使用状況を監視し、パフォーマンスのボトルネックを特定できます。

[Grafana] ダッシュボードでは、Prometheusから収集したメトリクスを視覚化し、カスタムダッシュボードを作成して、より詳細なデータ分析が可能です。

※以下はTiDBダッシュボードから見えるUIの例です。
スクリーンショット 2024-06-16 17.13.40.png

7. クラスターのクリーンアップ

テストデプロイ後にクラスターをクリーンアップします。サービスを停止するにはControl+Cを押します。サービスが停止したら、次のコマンドを実行します。

tiup clean --all

これにより、クラスターに関連するすべてのデータが削除されます。

まとめ

TiDBは、MySQL互換の分散型SQLデータベースであり、スケーラビリティと高可用性を提供します。NewSQLとして、従来のRDBMSの利便性とNoSQLのスケーラビリティを兼ね備えています。この記事で紹介したアーキテクチャを活用することで、データベース、データレイク、データウェアハウスを効果的に組み合わせたシステムを構築できます。さらに、Dockerを使用した簡単な環境構築手順により、すぐにTiDBを試すことができます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?