## 模块 2: 启动读写业务负载

### 步骤 1：创建一个用于测试的表

+ 在[终端 2](ssh://monitor1-ssh#2) 中，连接到一个 TiDB 服务器实例，创建一个测试表，并退出到终端。

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} -P 4000 -uroot
  ```

  ```sql
  DROP TABLE IF EXISTS test.dummy;
  CREATE TABLE test.dummy (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(80), event JSON);
  EXIT;
  ```

### 步骤 2：应用 INSERT 负载

+ 在[终端 2](ssh://monitor1-ssh#2) 中，运行示例 Java 程序以启动 INSERT 负载。

+ 该程序连接到一个 TiDB 服务器实例，使用两个工作程序执行 INSERT 操作。如果所连接的 TiDB 服务器失去连接，程序将自动切换到另一个可用的 TiDB 服务器。输出将显示处理中 INSERT 请求的 TiDB 服务器的私有 IP 地址——应有两个。保持负载运行并继续下一步。

  ```bash
  cd scripts
  javac -cp .:misc/mysql-connector-java-5.1.36-bin.jar DemoJdbcEndlessInsertDummyCSP.java
  java -cp .:misc/mysql-connector-java-5.1.36-bin.jar DemoJdbcEndlessInsertDummyCSP
  ```

  ```output
  Worker 2 -> TiDB:Thu May 09 07:05:33 UTC 2024 at ${LAB:HOST_DB1_PRIVATE_IP}
  Worker 1 -> TiDB:Thu May 09 07:05:33 UTC 2024 at ${LAB:HOST_DB2_PRIVATE_IP}
  Worker 1 -> TiDB:Thu May 09 07:05:34 UTC 2024 at ${LAB:HOST_DB1_PRIVATE_IP}
  Worker 2 -> TiDB:Thu May 09 07:05:34 UTC 2024 at ${LAB:HOST_DB2_PRIVATE_IP}
  Worker 1 -> TiDB:Thu May 09 07:05:35 UTC 2024 at ${LAB:HOST_DB2_PRIVATE_IP}
  Worker 2 -> TiDB:Thu May 09 07:05:35 UTC 2024 at ${LAB:HOST_DB1_PRIVATE_IP}
  Worker 1 -> TiDB:Thu May 09 07:05:36 UTC 2024 at ${LAB:HOST_DB1_PRIVATE_IP}
  ...
  ```

### 步骤 3：应用示例查询负载

+ 在[终端 3](ssh://monitor1-ssh#3) 中，运行下面的脚本。脚本尝试连接到两个 TiDB 服务器实例执行查询。如果某个 TiDB 服务器失败或无法响应，脚本将自动切换到另一个可用实例。注意，TiDB 服务器实例只能在 1 秒内响应连接请求，这是类似于第 2 步中的 Java 程序的设置。输出将显示 test.dummy 表中的行数稳步增加。保持负载运行并继续下一步。

  ```bash
  qdb1(){
  mysql -h ${HOST_DB1_PRIVATE_IP} -P 4000 -uroot --connect-timeout 1 2>/dev/null << EOF
    SELECT COUNT(event) FROM test.dummy;
  EOF
  }

  qdb2(){
  mysql -h ${HOST_DB2_PRIVATE_IP} -P 4000 -uroot --connect-timeout 1 2>/dev/null << EOF
    SELECT COUNT(event) FROM test.dummy;
  EOF
  }

  query1(){
    echo;
    date;
    qdb1 || qdb2
    sleep 2;
  }

  query2(){
    echo;
    date;
    qdb2 || qdb1
    sleep 2;
  }

  while true; do
    query1;
    query2;
  done;
  ```

  ```output
  Mon May 13 05:27:33 UTC 2024
  COUNT(event)
  2608

  Mon May 13 05:27:35 UTC 2024
  COUNT(event)
  2612

  Mon May 13 05:27:37 UTC 2024
  COUNT(event)
  2616

  Mon May 13 05:27:39 UTC 2024
  COUNT(event)
  2620
  ...
  ```

### 步骤 4：验证 TiKV Region 副本设置已配置为三个

+ 返回[终端 1](ssh://monitor1-ssh#1)，验证 TiKV Region 副本设置是否配置为三个。这是 TiDB Cloud 能在数据中心级故障中存活的核心原因之一：当某个可用区故障导致一台 TiKV 失联时，其余两个副本仍可继续提供读写。

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} -P 4000 -uroot
  ```

  ```sql
  SHOW CONFIG WHERE type='pd' AND name='replication.max-replicas';
  EXIT
  ```

  ```output
  +------+---------------------+--------------------------+-------+
  | Type | Instance            | Name                     | Value |
  +------+---------------------+--------------------------+-------+
  | pd   | ${LAB:HOST_PD1_PUBLIC_IP}:2379   | replication.max-replicas | 3     |
  | pd   | ${LAB:HOST_PD2_PUBLIC_IP}:2379  | replication.max-replicas | 3     |
  | pd   | ${LAB:HOST_PD3_PUBLIC_IP}:2379 | replication.max-replicas | 3     |
  +------+---------------------+--------------------------+-------+
  3 rows in set (0.02 sec)
  Bye
  ```
