## モジュール 1: 3つのアベイラビリティゾーンに TiDB クラスタをデプロイする

### 手順 0. （オプション）TiDB の簡単な紹介

- 以下の図は、オンプレミスにデプロイされた TiDB の基本的なアーキテクチャを示しています。
- TiDB クラスタには 3 つの主要コンポーネントがあります: Placement Driver (PD) クラスタ、SQL レイヤークラスタ、およびストレージクラスタ。
- Placement Driver (PD) クラスタは TiDB の頭脳です。メタデータの管理、トランザクション用の Timestamp Oracle (TSO) の提供、データの配置場所の決定などを行います。
- SQL レイヤーはステートレスです。TiDB サーバーにはビジネスデータは保存されません。TiDB サーバーはクライアントからの SQL を受け付けて処理し、リレーショナルデータをキーバリューペアに変換します。
- ストレージレイヤーの TiKV は行ストレージです。TiKV では、データは Region（バージョン 8.5 からデフォルトで 256 MB）に分割され、各 Region はデフォルトで 3 回複製されて Raft グループを形成します。その後、Region は複数の TiKV ノードにスケジュールされ、高可用性（HA）を実現します。各 TiKV ノードでは、データは RocksDB によってディスクに永続化されます。
- ストレージレイヤーの TiFlash はカラムナストレージで、分析機能を提供します。TiFlash が有効になっている場合、TiDB クラスタは、より良いパフォーマンスのために、クエリ（またはクエリの一部）を TiFlash に送信するかどうかを自動的に決定します。TiFlash サーバーは TiDB クラスタではオプションです。ワークロードに分析クエリがない場合は、TiFlash サーバーをデプロイする必要はありません。
- 詳細については、TiDB の[ドキュメント](https://docs.pingcap.com/tidb/stable/tidb-architecture/)を参照してください。

![TiDBClusterArchitectureNormal_aa_001_20220506.png 85%](https://lab-static.pingcap.com/images/2025/12/30/c1b377be79b802bc06a4b40ad818c9aa16855450.png)

### 手順 1. 演習用仮想マシンにSSHでログインする

+ 以下のリンクをクリックして、演習用仮想マシンへの3つのSSH接続を開きます：
  + [ターミナル 1](ssh://monitor1-ssh#1)
  + [ターミナル 2](ssh://monitor1-ssh#2)
  + [ターミナル 3](ssh://monitor1-ssh#3)

+ これで3つのアクティブなターミナルセッションが利用可能になります。

### 手順 2. 複数のアベイラビリティゾーンにまたがるTiDBクラスタを起動します

+ [ターミナル 1](ssh://monitor1-ssh#1) で、プロビジョニングされたクラスタトポロジーのYAMLを確認します。

  ```bash
  cat nine-nodes.yaml
  ```

  ```output
  global:
      user: "ec2-user"
      ssh_port: 22
      deploy_dir: "/tidb-deploy"
      data_dir: "/tidb-data"
      arch: "amd64"
  server_configs:
      pd:
          replication.max-replicas: 3
  pd_servers:
    - host: ${LAB:HOST_PD1_PRIVATE_IP}
      client_port: 2379
      peer_port: 2380
      advertise_client_addr: "http://${LAB:HOST_PD1_PUBLIC_IP}:2379"
    - host: ${LAB:HOST_PD2_PRIVATE_IP}
      client_port: 2379
      peer_port: 2380
      advertise_client_addr: "http://${LAB:HOST_PD2_PUBLIC_IP}:2379"
    - host: ${LAB:HOST_PD3_PRIVATE_IP}
      client_port: 2379
      peer_port: 2380
      advertise_client_addr: "http://${LAB:HOST_PD3_PUBLIC_IP}:2379"
  tidb_servers:
    - host: ${LAB:HOST_DB1_PRIVATE_IP}
      port: 4000
      status_port: 10080
      deploy_dir: /tidb-deploy/tidb-4000
      log_dir: /tidb-deploy/tidb-4000/log
    - host: ${LAB:HOST_DB2_PRIVATE_IP}
      port: 4000
      status_port: 10080
      deploy_dir: /tidb-deploy/tidb-4000
      log_dir: /tidb-deploy/tidb-4000/log
  tikv_servers:
    - host: ${LAB:HOST_KV1_PRIVATE_IP}
      port: 20160
      status_port: 20180
    - host: ${LAB:HOST_KV2_PRIVATE_IP}
      port: 20160
      status_port: 20180
    - host: ${LAB:HOST_KV3_PRIVATE_IP}
      port: 20160
      status_port: 20180
  monitoring_servers:
    - host: ${LAB:HOST_MONITOR1_PRIVATE_IP}
  grafana_servers:
    - host: ${LAB:HOST_MONITOR1_PRIVATE_IP}
  alertmanager_servers:
    - host: ${LAB:HOST_MONITOR1_PRIVATE_IP}
  ```

+ TiDBクラスタをデプロイするためにシステム構成を修正します。

  ```bash
  tiup mirror set tidb-community-server-tidb_version-linux-amd64
  tiup cluster check nine-nodes.yaml \
    --user ec2-user \
    -i /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem \
    --apply
  ```

  ```output
  ...
  + Try to apply changes to fix failed checks
   - Applying changes on ${LAB:HOST_PD1_PRIVATE_IP} ... ⠧ Sysctl: host=${LAB:HOST_PD1_PRIVATE_IP} vm.swappiness = 0
  + Try to apply changes to fix failed checks
   - Applying changes on ${LAB:HOST_PD1_PRIVATE_IP} ... ⠇ Sysctl: host=${LAB:HOST_PD1_PRIVATE_IP} vm.swappiness = 0
  + Try to apply changes to fix failed checks
  + Try to apply changes to fix failed checks
   - Applying changes on ${LAB:HOST_PD1_PRIVATE_IP} ... Done
  + Try to apply changes to fix failed checks
   - Applying changes on ${LAB:HOST_PD1_PRIVATE_IP} ... Done
  + Try to apply changes to fix failed checks
   - Applying changes on ${LAB:HOST_PD1_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_PD3_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_KV2_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_DB1_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_PD2_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_KV1_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_KV3_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_DB2_PRIVATE_IP} ... Done
   - Applying changes on ${LAB:HOST_MONITOR1_PRIVATE_IP} ... Done
  ```

+ TiDBクラスタをデプロイします。

  ```bash
  tiup cluster deploy tidb-demo tidb_version ./nine-nodes.yaml \
    --user ec2-user \
    -i /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem \
    --yes
  ```

  ```output
  .
  .
  .
  Cluster `tidb-demo` deployed successfully, you can start it with command: `tiup cluster start tidb-demo --init`
  ```

+ デプロイされたTiDBクラスタを起動します。

  ```bash
  tiup cluster start tidb-demo
  ```

  ```output
  .
  .
  .
  Started cluster `tidb-demo` successfully
  ```

### 手順 3. TiDB クラスタのステータスを確認します

+ クラスタのキーコンポーネントは、3つのサブネット: 10.90.1.0/24, 10.90.2.0/24, 10.90.3.0/24にそれぞれ分散されています。

+ クラスタには3台のPDサーバ、3台のTiKVサーバ、および2台のTiDBサーバが含まれています。

+ サブネット10.90.1.0/24には、PDサーバ、TiDBサーバ、およびTiKVサーバがホストされていることを特に確認してください。

+ あなたの環境のIPアドレスやサンプル出力は異なるかもしれませんが、サブネット構成は一貫しています。

  ```bash
  tiup cluster display tidb-demo
  ```

  ```output
  Cluster type:       tidb
  Cluster name:       tidb-demo
  Cluster version:    v${LAB:TIDB_VERSION}
  Deploy user:        ec2-user
  SSH type:           builtin
  Dashboard URL:      http://${LAB:HOST_PD1_PUBLIC_IP}:2379/dashboard
  Grafana URL:        http://${LAB:HOST_MONITOR1_PRIVATE_IP}:3000
  ID                 Role          Host         Ports        OS/Arch       Status  Data Dir                      Deploy Dir
  --                 ----          ----         -----        -------       ------  --------                      ----------
  ${LAB:HOST_MONITOR1_PRIVATE_IP}:9093     alertmanager  ${LAB:HOST_MONITOR1_PRIVATE_IP}    9093/9094    linux/x86_64  Up      /tidb-data/alertmanager-9093  /tidb-deploy/alertmanager-9093
  ${LAB:HOST_MONITOR1_PRIVATE_IP}:3000     grafana       ${LAB:HOST_MONITOR1_PRIVATE_IP}    3000         linux/x86_64  Up      -                             /tidb-deploy/grafana-3000
  ${LAB:HOST_PD1_PRIVATE_IP}:2379   pd            ${LAB:HOST_PD1_PRIVATE_IP}  2379/2380    linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
  ${LAB:HOST_PD2_PRIVATE_IP}:2379    pd            ${LAB:HOST_PD2_PRIVATE_IP}   2379/2380    linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
  ${LAB:HOST_PD3_PRIVATE_IP}:2379   pd            ${LAB:HOST_PD3_PRIVATE_IP}  2379/2380    linux/x86_64  Up|L    /tidb-data/pd-2379            /tidb-deploy/pd-2379
  ${LAB:HOST_MONITOR1_PRIVATE_IP}:9090     prometheus    ${LAB:HOST_MONITOR1_PRIVATE_IP}    9090/12020   linux/x86_64  Up      /tidb-data/prometheus-9090    /tidb-deploy/prometheus-9090
  ${LAB:HOST_DB1_PRIVATE_IP}:4000   tidb          ${LAB:HOST_DB1_PRIVATE_IP}  4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
  ${LAB:HOST_DB2_PRIVATE_IP}:4000    tidb          ${LAB:HOST_DB2_PRIVATE_IP}   4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
  ${LAB:HOST_KV1_PRIVATE_IP}:20160   tikv          ${LAB:HOST_KV1_PRIVATE_IP}   20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
  ${LAB:HOST_KV2_PRIVATE_IP}:20160  tikv          ${LAB:HOST_KV2_PRIVATE_IP}  20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
  ${LAB:HOST_KV3_PRIVATE_IP}:20160  tikv          ${LAB:HOST_KV3_PRIVATE_IP}  20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
  Total nodes: 11
  ```
