---
title: "Deploying a TiDB Cluster with TiUP"
version: "v2"
status: "GA"
description: "This hands-on lab demonstrates how to deploy a TiDB cluster using TiUP, a powerful cluster management tool for TiDB. TiUP simplifies the deployment process by providing a unified interface for deploying, scaling, and managing TiDB clusters. This lab shows you how to deploy a TiDB cluster using TiUP, including setting up the cluster topology and verifying the cluster's status."
---

# Deploying a TiDB Cluster with TiUP

## Overview

In this lab, you install the TiUP utility, deploy a TiDB cluster using TiUP, verify the running status of the TiDB cluster. Connect to the TiDB server, start/stop the TiDB cluster and then view the configuration file. The diagram below illustrates the deployment topology of the TiDB cluster.

   ![60%](https://lab-static.pingcap.com/quick-demo/demo_010_en.png)

### Duration

+ This lab should take you approximately 90 minutes to complete.

> [!TIP]
> Click **Start** to launch the lab environment.
> Once the environment is ready, select **Next** on the bottom toolbar to advance to **Module 1**.
> And, follow the step-by-step lab guide to connect to the hands-on environment and begin your tasks.

## Module 1: Install TiUP And Familiarize Yourself With The Lab Environment

### Step 1. Connect to the remote Linux machine

+ Click here - [Terminal 1](ssh://monitor1-ssh#1) to open a new terminal connected to the virtual machine assigned for your hands-on lab.

+ The banner after you logged in:

    ```output
     ,     #_
    ~\_  ####_        Amazon Linux 2
    ~~  \_#####\
    ~~     \###|      
    ~~       \#/ ___
    ~~       V~' '->
    ~~~         /    A newer version of Amazon Linux is available!
     ~~._.   _/
        _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
      _/m/'           https://aws.amazon.com/linux/amazon-linux-2023/
    ```

### Step 2. Get the lab resources information

+ Stay in `ec2-user` home directory, check the contents of the `hosts-env.sh` file for IP addresses information. Your output might be different as the `sample_output`:
   
   ```bash
   cat hosts-env.sh
   ```
   ```output
   export HOST_MONITOR1_PRIVATE_IP=10.90.4.19
   export HOST_MONITOR1_PUBLIC_IP=44.234.33.106
   export HOST_CM_PRIVATE_IP=10.90.4.19
   export HOST_CM_PUBLIC_IP=44.234.33.106
   export HOST_PD1_PRIVATE_IP=10.90.1.197
   export HOST_PD1_PUBLIC_IP=18.236.76.37
   export HOST_PD2_PRIVATE_IP=10.90.3.218
   export HOST_PD2_PUBLIC_IP=18.237.226.109
   export HOST_PD3_PRIVATE_IP=10.90.2.84
   export HOST_PD3_PUBLIC_IP=18.237.105.199
   export HOST_DB1_PRIVATE_IP=10.90.3.216
   export HOST_DB1_PUBLIC_IP=34.222.212.46
   export HOST_DB2_PRIVATE_IP=10.90.2.245
   export HOST_DB2_PUBLIC_IP=54.188.31.139
   export HOST_KV1_PRIVATE_IP=10.90.1.94
   export HOST_KV1_PUBLIC_IP=35.87.137.198
   export HOST_KV2_PRIVATE_IP=10.90.2.38
   export HOST_KV2_PUBLIC_IP=35.91.214.228
   export HOST_KV3_PRIVATE_IP=10.90.3.112
   export HOST_KV3_PUBLIC_IP=54.184.160.176
   export HOST_TIFLASH1_PRIVATE_IP=10.90.4.28
   export HOST_TIFLASH1_PUBLIC_IP=34.223.94.92
   ```

+ Set the node IP address variables on the Linux you connected to.
   ```bash
   source ./hosts-env.sh
   ```

+ You can also click the <kbd>Resources</kbd> tab at the top of this lab guide at any time to access all the lab resource information.

### Step 3. Download and install TiUP - the TiDB cluster management utility

+ Enter the following command at the terminal prompt to install the `tiup` utility. Note that `tiup` may or may not be pre-installed in your environment.
   
   ```bash
   curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
   ```

   ```output
   curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
     % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                    Dload  Upload   Total   Spent    Left  Speed
   100 5152k  100 5152k    0     0  14.8M      0 --:--:-- --:--:-- --:--:-- 14.8M
   Successfully set mirror to https://tiup-mirrors.pingcap.com
   Detected shell: bash
   Shell profile:  /home/ec2-user/.bash_profile
   Installed path: /home/ec2-user/.tiup/bin/tiup
   ===============================================
   Have a try:     tiup playground
   ===============================================
   ```

### Step 4. Setup TiUP environment variables

+ Enter the following command at the terminal prompt.
   
   ```bash
   source .bash_profile
   ```

### Step 5. Change the TiUP mirror to a local folder

+ Make sure the local TiUP mirror is set to the folder `tidb-community-server-${LAB:TIDB_VERSION}-linux-amd64` on the connected Linux. It had been already [cloned](https://docs.pingcap.com/tidb/stable/production-deployment-using-tiup) for this hands-on lab.

   ```bash
   tiup mirror set tidb-community-server-${LAB:TIDB_VERSION}-linux-amd64
   tiup mirror show
   ```
   ```output
   Successfully set mirror to /home/ec2-user/tidb-community-server-${LAB:TIDB_VERSION}-linux-amd64
   /home/ec2-user/tidb-community-server-${LAB:TIDB_VERSION}-linux-amd64
   ```

+ For more information on setting up a local TiUP mirror, please refer to the [TiUP documentation](https://docs.pingcap.com/tidb/stable/production-deployment-using-tiup). Now, the environment is ready for deploying a TiDB cluster, please proceed to the next practice.

### Step 6. Verify that the TiUP cluster component has been already installed by executing `tiup cluster`

+ Enter the following command at the terminal prompt and receive the results shown. Note that the `tiup cluster` command can install the `cluster` component from the configured TiUP mirror if it is not already installed. 
   
   ```bash
   tiup cluster
   ```
   ```output
   Checking updates for component cluster... Deploy a TiDB cluster for production

   Usage:
   tiup cluster [command]

   Available Commands:
   check       Perform preflight checks for the cluster.
   deploy      Deploy a cluster for production
   start       Start a TiDB cluster
   stop        Stop a TiDB cluster
   restart     Restart a TiDB cluster
   scale-in    Scale in a TiDB cluster
   scale-out   Scale out a TiDB cluster
   destroy     Destroy a specified cluster
   clean       (EXPERIMENTAL) Cleanup a specified cluster
   upgrade     Upgrade a specified TiDB cluster
   display     Display information of a TiDB cluster
   prune       Destroy and remove instances that is in tombstone state
   list        List all clusters
   audit       Show audit log of cluster operation
   import      Import an exist TiDB cluster from TiDB-Ansible
   edit-config Edit TiDB cluster config
   show-config Show TiDB cluster config
   reload      Reload a TiDB cluster's config and restart if needed
   patch       Replace the remote package with a specified package and restart the service
   rename      Rename the cluster
   enable      Enable a TiDB cluster automatically at boot
   disable     Disable automatic enabling of TiDB clusters at boot
   replay      Replay previous operation and skip successed steps
   template    Print topology template
   tls         Enable/Disable TLS between TiDB components
   meta        backup/restore meta information
   rotatessh   rotate ssh keys on all nodes
   help        Help about any command
   completion  Generate the autocompletion script for the specified shell

   Flags:
   -c, --concurrency int     max number of parallel tasks allowed (default 5)
      --format string       (EXPERIMENTAL) The format of output, available values are [default, json] (default "default")
   -h, --help                help for tiup
      --ssh string          (EXPERIMENTAL) The executor type: 'builtin', 'system', 'none'.
      --ssh-timeout uint    Timeout in seconds to connect host via SSH, ignored for operations that don't need an SSH connection. (default 5)
   -v, --version             version for tiup
      --wait-timeout uint   Timeout in seconds to wait for an operation to complete, ignored for operations that don't fit. (default 120)
   -y, --yes                 Skip all confirmations and assumes 'yes'

   Use "tiup cluster help [command]" for more information about a command.
   ```

### Step 7. Verify that the private/public keys had been already set up for you

+ Note that in this lab, the private/public keys pair was prepared by the lab environment. Note that you must prepare the private/public keys pair by using `ssh-keygen` by yourself in your own environment after the lab.

+ The private key is under `~/.ssh` directory and the permission of the private key file is read only. You will use this private key to deploy the TiDB cluster.
   
   ```bash
   ls -l /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem
   ```
   ```output
   -r-------- 1 ec2-user ec2-user 1674 May 25 04:09 /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem
   ```

+ The peering public key is in `~/.ssh/authorized_keys` file on every node in this lab, so the you can SSH connect to any node without password.

   ```bash
   cat ~/.ssh/authorized_keys | grep ${LAB:REGION_NAME}
   ```
   ```output
   ssh-rsa AAAAB3Nza..........FvuLk3f5/Wsdx7jdNrP pe-class-key-${LAB:REGION_NAME}
   ```

## Module 2: Deploy A TiDB Cluster

### Step 1. View the topology file

+ View the provided topology file `solution-topology-ten-nodes.yaml`, which is used to deploy the TiDB cluster. Note that the IP addresses shown in the `sample_output` will differ from yours.
   
   ```bash
   cat solution-topology-ten-nodes.yaml
   ```
   ```output
   global:
     user: "ec2-user"
     ssh_port: 22
     deploy_dir: "/tidb-deploy"
     data_dir: "/tidb-data"
     arch: "amd64"
   server_configs:
     pd:
       replication.location-labels: ["region","zone"]
       replication.max-replicas: 3
   pd_servers:
     - host: 10.90.3.184
       client_port: 2379
       peer_port: 2380
       advertise_client_addr: "http://35.88.150.142:2379"
       config:
         server.labels:
           region: ${LAB:REGION_NAME}
           zone: az1
     - host: 10.90.3.28
       client_port: 2379
       peer_port: 2380
       advertise_client_addr: "http://18.236.135.17:2379"
       config:
         server.labels:
           region: ${LAB:REGION_NAME}
           zone: az1
     - host: 10.90.3.247
       client_port: 2379
       peer_port: 2380
       advertise_client_addr: "http://34.219.57.252:2379"
       config:
         server.labels:
           region: ${LAB:REGION_NAME}
           zone: az1
   tidb_servers:
     - host: 10.90.1.164
       port: 4000
       status_port: 10080
       deploy_dir: /tidb-deploy/tidb-4000
       log_dir: /tidb-deploy/tidb-4000/log
     - host: 10.90.1.14
       port: 4000
       status_port: 10080
       deploy_dir: /tidb-deploy/tidb-4000
       log_dir: /tidb-deploy/tidb-4000/log
   tikv_servers:
     - host: 10.90.3.197
       port: 20160
       status_port: 20180
       config:
         server.labels:
           region: ${LAB:REGION_NAME}
           zone: az1
     - host: 10.90.3.39
       port: 20160
       status_port: 20180
       config:
         server.labels:
           region: ${LAB:REGION_NAME}
           zone: az1
     - host: 10.90.3.82
       port: 20160
       status_port: 20180
       config:
         server.labels:
           region: ${LAB:REGION_NAME}
           zone: az1
   tiflash_servers:
     - host: 10.90.4.194
       tcp_port: 9000
       flash_service_port: 3930
       deploy_dir: /tidb-deploy/tiflash-9000
       data_dir: /tidb-data/tiflash-9000
       log_dir: /tidb-deploy/tiflash-9000/log
   monitoring_servers:
     - host: 10.90.4.156
   grafana_servers:
     - host: 10.90.4.156
   alertmanager_servers:
     - host: 10.90.4.156
   ```

### Step 2. Install required packages

+ Make sure to install `numactl` on all cluster nodes (the task should be already completed in the classroom environment, so there is no need to actually execute the installation on all nodes.) Enter the following command at the terminal prompt to install `numactl` on `TiKV server 1` for example (type `yes` if prompt for `SSH`):
   
   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP}
   ```
   ```output
      ,     #_
      ~\_  ####_        Amazon Linux 2
     ~~  \_#####\
     ~~     \###|       
     ~~       \#/ ___
      ~~       V~' '->
       ~~~         /    A newer version of Amazon Linux is available!
         ~~._.   _/
            _/ _/       Amazon Linux 2023, GA and supported until 2028-03-15.
          _/m/'           https://aws.amazon.com/linux/amazon-linux-2023/
   ```
   ```bash
   sudo yum -y install numactl
   ```
   ```output
   Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
   amzn2-core                                                                                                                                 | 3.6 kB  00:00:00     
   60 packages excluded due to repository priority protections
   Package numactl-2.0.9-7.amzn2.x86_64 already installed and latest version
   Nothing to do
   ```

+ Log off from the `TiKV server 1` and return to the TiUP control machine's prompt: 
   
   ```bash
   exit
   ```

### Step 3. Check system requirements by using `tiup cluster check`

+ Check system settings for cluster deployment prerequisites. Enter the following command at the terminal prompt and receive the results shown. You will find that some items fail to pass the system check. We will address this issue in the next step.
   
   ```bash
   tiup cluster check ./solution-topology-ten-nodes.yaml \
    --user ec2-user \
    -i /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem
   ```
   ```output
   + Detect CPU Arch Name
     - Detecting node 10.90.2.90 Arch info ... ⠙ Shell: host=10.90.2.90, sudo=false, command=`uname -m`
     - Detecting node 10.90.2.231 Arch info ... ⠙ Shell: host=10.90.2.231, sudo=false, command=`uname -m`
     - Detecting node 10.90.2.138 Arch info ... ⠙ Shell: host=10.90.2.138, sudo=false, command=`uname -m`
     - Detecting node 10.90.2.242 Arch info ... ⠙ Shell: host=10.90.2.242, sudo=false, command=`uname -m`
   ...
   10.90.2.97   sysctl        Fail    fs.file-max = 376482, should be greater than 1000000
   10.90.2.97   sysctl        Fail    net.core.somaxconn = 4096, should be greater than 32768
   10.90.2.97   sysctl        Fail    net.ipv4.tcp_syncookies = 1, should be 0
   10.90.2.97   sysctl        Fail    vm.swappiness = 60, should be 0
   10.90.2.97   service       Pass    service firewalld not found, ignore
   10.90.2.97   command       Pass    numactl: policy: default
   10.90.2.97   timezone      Pass    time zone is the same as the first PD machine: UTC
   10.90.2.97   os-version    Pass    OS is Amazon Linux 2 
   10.90.2.97   memory        Pass    memory size is 4096MB
   10.90.2.97   limits        Fail    soft limit of 'nofile' for user 'ec2-user' is not set or too low
   10.90.2.97   limits        Fail    hard limit of 'nofile' for user 'ec2-user' is not set or too low
   10.90.2.97   limits        Fail    soft limit of 'stack' for user 'ec2-user' is not set or too low
   10.90.2.97   selinux       Pass    SELinux is disabled
   10.90.2.97   thp           Fail    THP is enabled, please disable it for best performance
   ```

### Step 4. Run the auto fix for the failed checks

+ Enter the following command at the terminal prompt and receive the results shown. 
   
   ```bash
   tiup cluster check ./solution-topology-ten-nodes.yaml \
    --user ec2-user \
    -i /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem \
    --apply
   ```
   ```output
   ...
   10.90.3.79   cpu-governor  Warn    Unable to determine current CPU frequency governor policy, auto fixing not supported
   10.90.3.79   sysctl        Fail    will try to set 'fs.file-max = 1000000'
   10.90.3.79   sysctl        Fail    will try to set 'net.core.somaxconn = 32768'
   10.90.3.79   sysctl        Fail    will try to set 'net.ipv4.tcp_syncookies = 0'
   10.90.3.79   sysctl        Fail    will try to set 'vm.swappiness = 0'
   + Try to apply changes to fix failed checks
     - Applying changes on 10.90.2.231 ... Done
     - Applying changes on 10.90.2.138 ... Done
     - Applying changes on 10.90.2.242 ... Done
     - Applying changes on 10.90.2.158 ... Done
     - Applying changes on 10.90.1.56 ... Done
     - Applying changes on 10.90.4.138 ... Done
     - Applying changes on 10.90.2.90 ... Done
     - Applying changes on 10.90.1.169 ... Done
     - Applying changes on 10.90.4.126 ... Done
     - Applying changes on 10.90.2.95 ... Done
   ```

### Step 5. Deploy a TiDB cluster named `tidb-demo`

+ Enter the following command at the terminal prompt and receive the results shown. We include `--yes` in the command. Without `--yes`, you will be prompted to check the cluster topology during the deployment. 
   
   ```bash
   tiup cluster deploy tidb-demo ${LAB:TIDB_VERSION} ./solution-topology-ten-nodes.yaml \
    --user ec2-user \
    -i /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem \
    --yes
   ```
   ```output
   + Detect CPU Arch Name
     - Detecting node 10.90.2.90 Arch info ... ⠙ Shell: host=10.90.2.90, sudo=false, command=`uname -m`
     - Detecting node 10.90.2.231 Arch info ... ⠙ Shell: host=10.90.2.231, sudo=false, command=`uname -m`
     - Detecting node 10.90.2.138 Arch info ... ⠙ Shell: host=10.90.2.138, sudo=false, command=`uname -m`
     - Detecting node 10.90.2.242 Arch info ... ⠙ Shell: host=10.90.2.242, sudo=false, command=`uname -m`
   ...
   Cluster `tidb-demo` deployed successfully, you can start it with command: `tiup cluster start tidb-demo --init`
   ```

## Module 3: Check The Status Of The Deployed TiDB Cluster

### Step 1. Check TiDB cluster status by using TiUP

+ On the TiUP Control Machine, check the clusters managed by TiUP.
   
   ```bash
   tiup cluster list
   ```
   ```output
   Name       User      Version  Path                                                     PrivateKey
   ----       ----      -------  ----                                                     ----------
   tidb-demo  ec2-user  v${LAB:TIDB_VERSION}   /home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo  /home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo/ssh/id_rsa
   ```

+ Check the status of the deployed TiDB cluster, all components are not running yet.
   
   ```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
   Grafana URL:        http://10.90.4.138:3000
   ID                 Role          Host         Ports                            OS/Arch       Status  Data Dir                      Deploy Dir
   --                 ----          ----         -----                            -------       ------  --------                      ----------
   10.90.4.138:9093   alertmanager  10.90.4.138  9093/9094                        linux/x86_64  Down    /tidb-data/alertmanager-9093  /tidb-deploy/alertmanager-9093
   10.90.4.138:3000   grafana       10.90.4.138  3000                             linux/x86_64  Down    -                             /tidb-deploy/grafana-3000
   10.90.2.138:2379   pd            10.90.2.138  2379/2380                        linux/x86_64  Down    /tidb-data/pd-2379            /tidb-deploy/pd-2379
   10.90.2.231:2379   pd            10.90.2.231  2379/2380                        linux/x86_64  Down    /tidb-data/pd-2379            /tidb-deploy/pd-2379
   10.90.2.90:2379    pd            10.90.2.90   2379/2380                        linux/x86_64  Down    /tidb-data/pd-2379            /tidb-deploy/pd-2379
   10.90.4.138:9090   prometheus    10.90.4.138  9090/12020                       linux/x86_64  Down    /tidb-data/prometheus-9090    /tidb-deploy/prometheus-9090
   10.90.1.169:4000   tidb          10.90.1.169  4000/10080                       linux/x86_64  Down    -                             /tidb-deploy/tidb-4000
   10.90.1.56:4000    tidb          10.90.1.56   4000/10080                       linux/x86_64  Down    -                             /tidb-deploy/tidb-4000
   10.90.4.126:9000   tiflash       10.90.4.126  9000/8123/3930/20170/20292/8234  linux/x86_64  N/A     /tidb-data/tiflash-9000       /tidb-deploy/tiflash-9000
   10.90.2.158:20160  tikv          10.90.2.158  20160/20180                      linux/x86_64  N/A     /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
   10.90.2.242:20160  tikv          10.90.2.242  20160/20180                      linux/x86_64  N/A     /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
   10.90.2.95:20160   tikv          10.90.2.95   20160/20180                      linux/x86_64  N/A     /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
   Total nodes: 12
   ```

### Step 2. Start the TiDB cluster

+ Start the TiDB cluster with standard startup mode (database root user with empty password). In this step, we do NOT use the `--init` option to generate a random password for the database root user.

   ```bash
   tiup cluster start tidb-demo
   ```
   ```output
   ...
   Started cluster `tidb-demo` successfully
   ```

+ Check the status of the started TiDB cluster. The URLs for TiDB Dashboard and Grafana are also displayed. Proceed to the next step. 

   ```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://34.222.39.121:2379/dashboard
   Grafana URL:        http://10.90.4.138:3000
   ID                 Role          Host         Ports                            OS/Arch       Status  Data Dir                      Deploy Dir
   --                 ----          ----         -----                            -------       ------  --------                      ----------
   10.90.4.138:9093   alertmanager  10.90.4.138  9093/9094                        linux/x86_64  Up      /tidb-data/alertmanager-9093  /tidb-deploy/alertmanager-9093
   10.90.4.138:3000   grafana       10.90.4.138  3000                             linux/x86_64  Up      -                             /tidb-deploy/grafana-3000
   10.90.2.138:2379   pd            10.90.2.138  2379/2380                        linux/x86_64  Up|L    /tidb-data/pd-2379            /tidb-deploy/pd-2379
   10.90.2.231:2379   pd            10.90.2.231  2379/2380                        linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
   10.90.2.90:2379    pd            10.90.2.90   2379/2380                        linux/x86_64  Up      /tidb-data/pd-2379            /tidb-deploy/pd-2379
   10.90.4.138:9090   prometheus    10.90.4.138  9090/12020                       linux/x86_64  Up      /tidb-data/prometheus-9090    /tidb-deploy/prometheus-9090
   10.90.1.169:4000   tidb          10.90.1.169  4000/10080                       linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
   10.90.1.56:4000    tidb          10.90.1.56   4000/10080                       linux/x86_64  Up      -                             /tidb-deploy/tidb-4000
   10.90.4.126:9000   tiflash       10.90.4.126  9000/8123/3930/20170/20292/8234  linux/x86_64  Up      /tidb-data/tiflash-9000       /tidb-deploy/tiflash-9000
   10.90.2.158:20160  tikv          10.90.2.158  20160/20180                      linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
   10.90.2.242:20160  tikv          10.90.2.242  20160/20180                      linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
   10.90.2.95:20160   tikv          10.90.2.95   20160/20180                      linux/x86_64  Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
   Total nodes: 12
   ```

### Step 3. Check cluster status with TiDB Dashboard and Grafana Dashboard

+ Use your browser to log into the [TiDB PD Dashboard](http://${LAB:HOST_PD1_PUBLIC_IP}:2379/dashboard), the username and password is the same as that of the TiDB `root` user. The password is empty if you followed the lab guide by choosing the standard startup. The home page displays the node information for the TiDB cluster.

+ You can also check the cluster status with the [Grafana Prometheus Dashboard](http://${LAB:HOST_MONITOR1_PUBLIC_IP}:3000). The default username and password for Grafana are both `admin`.

  ![40](https://lab-static.pingcap.com/quick-demo/Grafana_aa_001_20220615.png)

## Module 4: Connect To TiDB Instances

### Step 1. Connect to TiDB instance from the remove Linux

+ From the SSH session, connect to TiDB instance and modify the `root` user password. You should provide option `-p` if `root` has a password, otherwise you can omit the `-p` option.

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

### Step 2. Execute SQL query 

+ Verify the version of TiDB cluster.

  ```sql
  SELECT TIDB_VERSION(), VERSION(), NOW()\G
  ```
  ```output
  *************************** 1. row ***************************
  TIDB_VERSION(): Release Version: v8.1.1
  Edition: Community
  Git Commit Hash: a7df4f9845d5d6a590c5d45dad0dcc9f21aa8765
  Git Branch: HEAD
  UTC Build Time: 2024-08-22 05:50:03
  GoVersion: go1.21.13
  Race Enabled: false
  Check Table Before Drop: false
  Store: tikv
       VERSION(): 8.0.11-TiDB-v8.1.1
           NOW(): 2025-01-19 14:20:05
  1 row in set (0.00 sec)
  ```

### Step 3. Exit from mysql client to the Linux prompt

   ```sql
   EXIT;
   ```
   ```output
   Bye
   ```

## Module 5: Review TiDB Configuration Files

### Step 1. Review the topology configuration YAML

+ On the TiUP control machine, review the cluster topology and the locations of the configuration files. When you're done, type `:q!` to exit to the OS prompt on the Linux.

   ```bash
   tiup cluster edit-config tidb-demo
   ```
   ```output
   global:
     user: ec2-user
     ssh_port: 22
     ssh_type: builtin
     deploy_dir: /tidb-deploy
     data_dir: /tidb-data
     os: linux
     arch: amd64
     systemd_mode: system
   ...
   alertmanager_servers:
   - host: 10.90.4.138
     ssh_port: 22
     web_port: 9093
     cluster_port: 9094
     deploy_dir: /tidb-deploy/alertmanager-9093
     data_dir: /tidb-data/alertmanager-9093
     log_dir: /tidb-deploy/alertmanager-9093/log
     arch: amd64
     os: linux
   ```

### Step 2. Check TiDB server configuration directories on TiDB server 1

+ Connect to TiDB server 1 and list the configuration directories. Enter `yes` if prompted by `ssh`:
   
   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_DB1_PRIVATE_IP} ls -l /tidb-deploy/tidb-4000/
   ```
   ```output
   total 0
   drwxr-xr-x 2 ec2-user ec2-user 25 May 25 04:16 bin
   drwxr-xr-x 2 ec2-user ec2-user 23 May 25 04:16 conf
   drwxr-xr-x 3 ec2-user ec2-user 90 May 25 04:21 log
   drwxr-xr-x 2 ec2-user ec2-user 25 May 25 04:16 scripts
   ```

### Step 3. Check TiKV server configuration directories on TiKV server 1

+ Connect to TiKV server 1 and view the contents of the `TiKV server` deployment directory. Enter `yes` if prompted by `ssh`:
   
   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP} ls -l /tidb-deploy/
   ```
   ```output
   total 0
   drwxr-xr-x 6 ec2-user ec2-user 55 May 25 04:16 monitor-9100
   drwxr-xr-x 6 ec2-user ec2-user 55 May 25 04:16 tikv-20160
   ```

+ Connect to TiKV server 1 and view the contents of the `TiKV server` configuration directory. 

   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP} ls -l /tidb-deploy/tikv-20160/
   ```
   ```output
   total 0
   drwxr-xr-x 2 ec2-user ec2-user 25 May 25 04:16 bin
   drwxr-xr-x 2 ec2-user ec2-user 23 May 25 04:16 conf
   drwxr-xr-x 2 ec2-user ec2-user 45 May 25 04:20 log
   drwxr-xr-x 2 ec2-user ec2-user 25 May 25 04:16 scripts
   ```

+ Connect to TiKV server 1 and view the contents of the `TiKV server` data directory. 

   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP} ls -l /tidb-data/
   ```
   ```output
   total 0
   drwxr-xr-x 2 ec2-user ec2-user   6 May 25 04:16 monitor-9100
   drwxr-xr-x 6 ec2-user ec2-user 164 May 25 04:20 tikv-20160
   ```

   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_KV1_PRIVATE_IP} ls -l /tidb-data/tikv-20160/
   ```
   ```output
   total 1048672
   drwxr-xr-x 2 ec2-user ec2-user        134 May 25 04:20 db
   drwxr-xr-x 4 ec2-user ec2-user         33 May 25 04:20 import
   -rw-r--r-- 1 ec2-user ec2-user      20330 May 25 04:20 last_tikv.toml
   -rw-r--r-- 1 ec2-user ec2-user          0 May 25 04:20 LOCK
   -rw-r--r-- 1 ec2-user ec2-user          0 May 25 04:20 raftdb.info
   drwxr-xr-x 2 ec2-user ec2-user         82 May 25 04:20 raft-engine
   -rw-r--r-- 1 ec2-user ec2-user      75538 May 25 04:20 rocksdb.info
   drwxr-xr-x 2 ec2-user ec2-user          6 May 25 04:21 snap
   -rw-r--r-- 1 ec2-user ec2-user 1073741824 May 25 04:20 space_placeholder_file
   ```

### Step 4. Check Placement Driver server configuration directories on PD server 1

+ Connect to Placement Driver server 1, view the contents of the `PD server` configuration files directory. Enter `yes` if prompted by `ssh`.
   
   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_PD1_PRIVATE_IP} ls -l /tidb-deploy/
   ```
   ```output
   total 0
   drwxr-xr-x 6 ec2-user ec2-user 55 May 25 04:16 monitor-9100
   drwxr-xr-x 6 ec2-user ec2-user 55 May 25 04:16 pd-2379
   ```

   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_PD1_PRIVATE_IP} ls -l /tidb-deploy/pd-2379/
   ```
   ```output
   total 0
   drwxr-xr-x 2 ec2-user ec2-user 23 May 25 04:16 bin
   drwxr-xr-x 2 ec2-user ec2-user 21 May 25 04:16 conf
   drwxr-xr-x 2 ec2-user ec2-user 41 May 25 04:20 log
   drwxr-xr-x 2 ec2-user ec2-user 23 May 25 04:16 scripts
   ```

+ Connect to Placement Driver server 1, view the contents of the `PD server` data files directory.
   
   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_PD1_PRIVATE_IP} ls -l /tidb-data/
   ```
   ```output
   total 0
   drwxr-xr-x 2 ec2-user ec2-user  6 May 25 04:16 monitor-9100
   drwxr-xr-x 5 ec2-user ec2-user 57 May 25 04:20 pd-2379
   ```

   ```bash
   ssh -i ~/.ssh/pe-class-key-${LAB:REGION_NAME}.pem ec2-user@${HOST_PD1_PRIVATE_IP} ls -l /tidb-data/pd-2379/
   ```
   ```output  
   total 0
   drwxr-xr-x 2 ec2-user ec2-user 85 May 25 04:20 hot-region
   drwx------ 4 ec2-user ec2-user 29 May 25 04:20 member
   drwxr-xr-x 2 ec2-user ec2-user 85 May 25 04:20 region-meta
   ```

### Step 5. Stop the TiDB cluster
   
   ```bash
   tiup cluster stop tidb-demo --yes
   ```
   ```output
   + [ Serial ] - SSHKeySet: privateKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo/ssh/id_rsa, publicKey=/home/ec2-user/.tiup/storage/cluster/clusters/tidb-demo/ssh/id_rsa.pub
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.95
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.90
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.158
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.1.169
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.1.56
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.4.126
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.4.138
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.4.138
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.4.138
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.138
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.242
   + [Parallel] - UserSSH: user=ec2-user, host=10.90.2.231
   + [ Serial ] - StopCluster
   ...
   Stopped cluster `tidb-demo` successfully
   ```

+ Exit the remote Linux

  ```bash
  exit
  ```

## Conclusion

In the world of distributed SQL database management, efficient handling of cluster components is essential. TiUP, an integral part of the TiDB ecosystem crafted to bring simplicity and agility to cluster management tasks. Since its introduction with TiDB 4.0, TiUP has revolutionized how users engage with TiDB cluster operations, enabling them to manage and execute tasks with remarkably minimal effort.

```hbsptform
{
  "ui": {
    "titleLevel": 3
  },
  "portalId": "4466002",
  "formId": "89fa8368-eba1-4b84-b91e-eb9eb6613ddf",
  "region": "na1",
  "sfdcCampaignId": "701RC00000VqCODYA3"
}
```