## モジュール 1: TiDBクラスターのパラメータを初期化します

このモジュールでは、受講者はTiDBクラスターをデプロイし、後のモジュールで使用するために3つのPLACEMENT POLICYを作成します。本モジュールでは、SQLの配置ルールの機能を使用します。SQLの配置ルールに関する詳細は、以下のリンクをご参照ください：<https://docs.pingcap.com/ja/tidb/stable/placement-rules-in-sql/>

### 手順 1. TiUP コントロールマシンに接続する

+ ここをクリック - [ターミナル 1](ssh://monitor1-ssh#1) で、ハンズオン演習用に割り当てられた仮想マシンに接続された新しいターミナルを開きます。

### 手順 2. クラスタトポロジーのYAMLを確認します

+ 提供されたトポロジーファイル `nine-nodes.yaml` を確認します。このファイルは TiDB クラスターのデプロイに使用され、`server_configs` の下に`pd` があります。`replication.location-labels` が `["region","host"]` に設定されていることから、この TiDB クラスターは 2 層のトポロジー構造を定義していることがわかります。順に `region` と `host` です。

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

  ```output
  ...
    arch: "amd64"
  server_configs:
    pd:
      replication.location-labels: ["region","host"]
      replication.max-replicas: 3
  pd_servers:
  ...
  ```

+ 提供されたトポロジーファイル `nine-nodes.yaml` を確認し、`tikv_servers` の下にある 3 つの TiKV ノードの `config` の下に `server.labels` があります。3 つの TiKV ノードにはそれぞれ異なる 3 つのラベルが設定されており、`region1`、`region2`、`region3` となっています。

  ```output
  ...
  tikv_servers:
    - host: 10.90.1.136
      port: 20160
      status_port: 20180
      config:
        server.labels: { region: "region1", host: "tikv1" }
        ...
    - host: 10.90.1.54
      port: 20160
      status_port: 20180
      config:
        server.labels: { region: "region2", host: "tikv2" }
        ...
    - host: 10.90.1.84
      port: 20160
      status_port: 20180
      config:
        server.labels: { region: "region3", host: "tikv3" }
  ...
  ```

+ 提供されたトポロジーファイル `nine-nodes.yaml` を確認し、`tikv_servers` の下にある 3 つの TiKV ノードの `config` の下に `in-memory-engine.` で始まる項目があります。以下のことがわかります：
  + `region1` の TiKV ノードの `in-memory-engine.enable` は `false` であり、`region2` と `region3` の TiKV ノードの `in-memory-engine.enable` は `true` です。これは `region1` の TiKV ノードが TiKV MVCC インメモリエンジン機能を有効にしていないことを示しており、`region2` と `region3` の TiKV ノードは TiKV MVCC インメモリエンジン機能を有効にしています。
  + TiKV MVCC インメモリエンジン機能が有効な状態で、`region1`、`region2`、`region3` の TiKV の `in-memory-engine.capacity` はすべて `1GiB` であり、TiKV MVCC インメモリエンジンが使用できるメモリのサイズは `1GiB` であることを示しています。
  + TiKV MVCC インメモリエンジン機能が有効な状態で、`in-memory-engine.mvcc-amplification-threshold` は、Region をロードする際の MVCC 読み出しの増幅の閾値を示しています。`region1` と `region2` の TiKV はそれぞれ `5` に設定されており、`region3` の TiKV は `100` に設定されています。
  + TiKV MVCC インメモリエンジン機能が有効な状態で、`region1`、`region2`、`region3` の TiKV の `in-memory-engine.load-evict-interval` は `2m` であり、これは TiKV MVCC インメモリエンジンがリクエストの統計情報に基づいて自動的にデータをロードする時間間隔が 2 分であることを示しています。

  ```output
  ...
  tikv_servers:
    - host: 10.90.1.136
      port: 20160
      status_port: 20180
      config:
        server.labels: { region: "region1", host: "tikv1" }
        in-memory-engine.capacity: 1GiB
        in-memory-engine.enable: false
        in-memory-engine.mvcc-amplification-threshold: 5
        in-memory-engine.load-evict-interval: 2m
    - host: 10.90.1.54
      port: 20160
      status_port: 20180
      config:
        server.labels: { region: "region2", host: "tikv2" }
        in-memory-engine.capacity: 1GiB
        in-memory-engine.enable: true
        in-memory-engine.mvcc-amplification-threshold: 5
        in-memory-engine.load-evict-interval: 2m
    - host: 10.90.1.84
      port: 20160
      status_port: 20180
      config:
        server.labels: { region: "region3", host: "tikv3" }
        in-memory-engine.capacity: 1GiB
        in-memory-engine.enable: true
        in-memory-engine.mvcc-amplification-threshold: 100
        in-memory-engine.load-evict-interval: 2m
  ...
  ```

+ 提供されたトポロジーファイル `nine-nodes.yaml` に基づき、TiKV クラスターのトポロジー図を以下に示します：

  ![IME_Topology.png 70%](https://lab-static.pingcap.com/images/2025/8/18/ab10f088aef5e642b32818f086bb4650822e3622.png)

### 手順 3. 新しい TiDB クラスタを作成する

+ 次のコードブロックのコマンドは、一連の操作を順番に実行します。これらは、1. [TiUPミラー](https://docs.pingcap.com/tidb/stable/production-deployment-using-tiup)設定の変更、2. システム設定の確認、3. 失敗したチェックの修正、4. TiDBクラスタのデプロイ、最後に5. TiDBクラスタの起動です。完了するまでに約3分かかります。

  ```bash
  tiup mirror set tidb-community-server-${LAB: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
  tiup cluster deploy tidb-demo ${LAB:TIDB_VERSION} ./nine-nodes.yaml \
    --user ec2-user \
    -i /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem \
    --yes
  tiup cluster start tidb-demo
  sleep 5;
  tiup cluster display tidb-demo
  ```

  ```output
  A new version of cluster is available:  -> v1.16.1

      To update this component:   tiup update cluster
      To update all components:   tiup update --all

  The component `cluster` version  is not installed; downloading from repository.
  ...
  [ec2-user@ip-10-90-4-47 ~]$ tiup cluster display tidb-demo
  Cluster type:       tidb
  Cluster name:       tidb-demo
  Cluster version:    v8.5.1
  Deploy user:        ec2-user
  SSH type:           builtin
  Dashboard URL:      http://54.250.180.235:2379/dashboard
  Grafana URL:        http://10.90.4.47:3000
  ID                 Role          Host         Ports        OS/Arch       Status  Data Dir                      Deploy Dir
  --                 ----          ----         -----        -------       ------  --------                      ----------
  10.90.4.47:9093    alertmanager  10.90.4.47   9093/9094    linux/x86_64  Up      /tidb-data/alertmanager-9093  /tidb-deploy/alertmanager-9093
  10.90.4.47:3000    grafana       10.90.4.47   3000         linux/x86_64  Up      -                             /tidb-deploy/grafana-3000
  10.90.2.129:2379   pd            10.90.2.129  2379/2380    linux/x86_64  Up|L    /tidb-data/pd-2379            /tidb-deploy/pd-2379
  10.90.2.203:2379   pd            10.90.2.203  2379/2380    linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
  10.90.2.254:2379   pd            10.90.2.254  2379/2380    linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
  10.90.4.47:9090    prometheus    10.90.4.47   9090/12020   linux/x86_64  Up      /tidb-data/prometheus-9090    /tidb-deploy/prometheus-9090
  10.90.1.194:4000   tidb          10.90.1.194  4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
  10.90.1.40:4000    tidb          10.90.1.40   4000/10080   linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
  10.90.3.147:20160  tikv          10.90.3.147  20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
  10.90.3.49:20160   tikv          10.90.3.49   20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
  10.90.3.51:20160   tikv          10.90.3.51   20160/20180  linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
  Total nodes: 11
  ```

### 手順 4. パラメータを初期化します

+ TiDBサーバーインスタンスに接続します。

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} --port 4000 -u root
  ```

  ```output
  mysql> 
  ```

+ `tidb_gc_life_time` を 24 時間に設定し、MVCC スナップショットが 24 時間以内に削除されないことを保証します。

  ```sql
  SET GLOBAL tidb_gc_life_time='1440m';
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_life_time';
  ```

  ```output
  mysql> SET GLOBAL tidb_gc_life_time='1440m';
  Query OK, 0 rows affected (0.01 sec)

  mysql> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_life_time';
  +-------------------+---------+
  | Variable_name     | Value   |
  +-------------------+---------+
  | tidb_gc_life_time | 24h0m0s |
  +-------------------+---------+
  1 row in set (0.00 sec)
  ```

+ 各 TiKV ノードの TiKV MVCC インメモリエンジン機能が有効になっているか確認します。

  ```sql
  SHOW CONFIG WHERE type='tikv' AND name='in-memory-engine.enable';
  ```

  ```output
  mysql> SHOW CONFIG WHERE type='tikv' AND name='in-memory-engine.enable';
  +------+-------------------+-------------------------+-------+
  | Type | Instance          | Name                    | Value |
  +------+-------------------+-------------------------+-------+
  | tikv | 10.90.3.147:20160 | in-memory-engine.enable | true  |
  | tikv | 10.90.3.51:20160  | in-memory-engine.enable | true  |
  | tikv | 10.90.3.49:20160  | in-memory-engine.enable | false |
  +------+-------------------+-------------------------+-------+
  3 rows in set (0.04 sec)
  ```

+ 後の手順で使用するために 3 つの PLACEMENT POLICY を作成します。SQLの配置ルールに関する詳細は、以下のリンクをご参照ください：<https://docs.pingcap.com/ja/tidb/stable/placement-rules-in-sql/>
  + PLACEMENT POLICY `IME_R1` は、テーブルの LEADER 役割の Region をすべて `region1` の TiKV ノードに配置し、`region2` と `region3` の TiKV ノードには FOLLOWER 役割の Region を配置します。
  + PLACEMENT POLICY `IME_R2` は、テーブルの LEADER 役割の Region をすべて `region2` の TiKV ノードに配置し、`region1` と `region3` の TiKV ノードには FOLLOWER 役割の Region を配置します。
  + PLACEMENT POLICY `IME_R3` は、テーブルの LEADER 役割の Region をすべて `region3` の TiKV ノードに配置し、`region1` と `region2` の TiKV ノードには FOLLOWER 役割の Region を配置します。

  ```sql
  DROP PLACEMENT POLICY IF EXISTS IME_R1;
  DROP PLACEMENT POLICY IF EXISTS IME_R2;
  DROP PLACEMENT POLICY IF EXISTS IME_R3;
  CREATE PLACEMENT POLICY IME_R1 PRIMARY_REGION="region1" REGIONS="region1,region2,region3";
  CREATE PLACEMENT POLICY IME_R2 PRIMARY_REGION="region2" REGIONS="region1,region2,region3";
  CREATE PLACEMENT POLICY IME_R3 PRIMARY_REGION="region3" REGIONS="region1,region2,region3";
  SHOW PLACEMENT;
  ```

  ```output
  mysql>  DROP PLACEMENT POLICY IF EXISTS IME_R1;
  Query OK, 0 rows affected, 1 warning (0.00 sec)

  mysql>   DROP PLACEMENT POLICY IF EXISTS IME_R2;
  Query OK, 0 rows affected, 1 warning (0.00 sec)

  mysql>   DROP PLACEMENT POLICY IF EXISTS IME_R3;
  Query OK, 0 rows affected, 1 warning (0.01 sec)

  mysql> CREATE PLACEMENT POLICY IME_R1 PRIMARY_REGION="region1" REGIONS="region1,region2,region3";
  Query OK, 0 rows affected (0.52 sec)

  mysql> CREATE PLACEMENT POLICY IME_R2 PRIMARY_REGION="region2" REGIONS="region1,region2,region3";
  Query OK, 0 rows affected (0.51 sec)

  mysql> CREATE PLACEMENT POLICY IME_R3 PRIMARY_REGION="region3" REGIONS="region1,region2,region3";
  Query OK, 0 rows affected (0.52 sec)

  mysql> SHOW PLACEMENT;
  +---------------+------------------------------------------------------------+------------------+
  | Target        | Placement                                                  | Scheduling_State |
  +---------------+------------------------------------------------------------+------------------+
  | POLICY IME_R1 | PRIMARY_REGION="region1" REGIONS="region1,region2,region3" | NULL             |
  | POLICY IME_R2 | PRIMARY_REGION="region2" REGIONS="region1,region2,region3" | NULL             |
  | POLICY IME_R3 | PRIMARY_REGION="region3" REGIONS="region1,region2,region3" | NULL             |
  +---------------+------------------------------------------------------------+------------------+
  3 rows in set (0.01 sec)
  ```

+ クライアント接続を切断します。

  ```sql
  EXIT
  ```

  ```output
  mysql> EXIT
  Bye
  ```

### 手順 5. 監視の準備をします

+ ユーザー名「admin」とパスワード「admin」で [Grafana ダッシュボード](http://${LAB:HOST_MONITOR1_PUBLIC_IP}:3000) にログインします。このステップ以降は、監視ページを開いたままにし、監視時間の範囲を直近5分または15分に設定し、リフレッシュレートを5秒に変更することを推奨します。

  ![70%](https://lab-static.pingcap.com/images/2025/7/24/9c787410ab425dd7eb7e7297cc46711ec63ccc22.png)

+ ここまでで、TiDB クラスターの準備が整いましたので、TiKV MVCC インメモリエンジン機能の学習を開始することができます。
