作者:陈麒

原文来源: https://tidb.net/blog/0cacc3df

TiDB 集群部署

在单机上模拟部署生产环境集群

  • 适用场景:希望用单台 Linux 服务器,体验 TiDB 最小的完整拓扑的集群,并模拟生产环境下的部署步骤。

1. 准备环境

准备一台部署主机,确保其软件满足需求:

  • Linux 类机器:这里采用的是华为 Kylin V10 SP1 操作系统 HUAWEI,Kunpeng 920 CPU(4Cores)

<!---->

  • Linux 操作系统开放外网访问,用于下载 TiDB 及相关软件安装包
1.1 最小规模的 TiDB 集群拓扑规划

| 实例 | 个数 | IP | 配置 | | ------- | -- | ----------------------------------------- | ------------------------------------------------------------ | | PD | 1 | 192.168.0.131 | 默认端口 | | TiKV | 3 | 192.168.0.131 192.168.0.131 192.168.0.131 | 避免端口和目录冲突 | | TiDB | 1 | 192.168.0.131 | 默认端口 | | TiFlash | 1 | 192.168.0.131 | 默认端口 (这里不配置 TiFlash实例) | | Monitor | 1 | 192.168.0.131 | Grafana:3003 (默认3000)、 Prometheus:9099(默认9090),默认端口Ambari已占用 |

  • 拓扑文件配置模板:( topo.yaml )

    global:
     user: "tidb"
     ssh_port: 22
     ssh_type: builtin
     deploy_dir: "/data/tidb/tidb-deploy"
     data_dir: "/data/tidb/tidb-data"
     os: linux
    ​
    # # Monitored variables are applied to all the machines.
    monitored:
     node_exporter_port: 9100
     blackbox_exporter_port: 9115
     deploy_dir: /data/tidb/tidb-deploy/monitor-9100
     data_dir: /data/tidb/tidb-data/monitor-9100
     log_dir: /data/tidb/tidb-deploy/monitor-9100/log
    ​
    server_configs:
     tidb:
       log.slow-threshold: 3000
     tikv:
       readpool.storage.use-unified-pool: false
       readpool.coprocessor.use-unified-pool: true
     pd:
       replication.enable-placement-rules: true
       replication.location-labels: ["host"]
    ​
    pd_servers:
     - host: 192.168.0.131
       ssh_port: 22
       name: pd-192.168.0.131-2379
       client_port: 2379
       peer_port: 2380
       deploy_dir: /data/tidb/tidb-deploy/pd-2379
       data_dir: /data/tidb/tidb-data/pd-2379
       log_dir: /data/tidb/tidb-deploy/pd-2379/log
       arch: arm64
       os: linux
    
    tidb_servers:
     - host: 192.168.0.131
       ssh_port: 22
       port: 4000
       status_port: 10080
       deploy_dir: /data/tidb/tidb-deploy/tidb-4000
       log_dir: /data/tidb/tidb-deploy/tidb-4000/log
       arch: arm64
       os: linux
    ​
    tikv_servers:
     - host: 192.168.0.131
      ssh_port: 22
      port: 20160
      status_port: 20180
      deploy_dir: /data/tidb/tidb-deploy/tikv-20160
      data_dir: /data/tidb/tidb-data/tikv-20160
      log_dir: /data/tidb/tidb-deploy/tikv-20160/log
      config:
        server.labels:
          host: logic-host-1
      arch: arm64
      os: linux
    - host: 192.168.0.131
      ssh_port: 22
      port: 20161
      status_port: 20181
      deploy_dir: /data/tidb/tidb-deploy/tikv-20161
      data_dir: /data/tidb/tidb-data/tikv-20161
      log_dir: /data/tidb/tidb-deploy/tikv-20161/log
      config:
        server.labels:
          host: logic-host-2
      arch: arm64
      os: linux
    - host: 192.168.0.131
      ssh_port: 22
      port: 20162
      status_port: 20182
      deploy_dir: /data/tidb/tidb-deploy/tikv-20162
      data_dir: /data/tidb/tidb-data/tikv-20162
      log_dir: /data/tidb/tidb-deploy/tikv-20162/log
      config:
        server.labels:
          host: logic-host-3
      arch: arm64
      os: linux
    ​
    monitoring_servers:
     - host: 192.168.0.131
       ssh_port: 22
       port: 9099
       deploy_dir: /data/tidb/tidb-deploy/prometheus-9099
       data_dir: /data/tidb/tidb-data/prometheus-9099
       log_dir: /data/tidb/tidb-deploy/prometheus-9099/log
       external_alertmanagers: []
       arch: arm64
       os: linux
    ​
    grafana_servers:
     - host: 192.168.0.131
       ssh_port: 22
       port: 3003
       deploy_dir: /data/tidb/tidb-deploy/grafana-3003
       arch: arm64
       os: linux
       username: admin
       password: admin
       anonymous_enable: false
       root_url: ""
       domain: ""
    
1.2 部署主机软件和环境要求配置

根据 TiDB 软硬件环境配置建议优化系统配置,可直接执行脚本进行初始化硬件环境:

$ cat initTiDB.sh 
#!/bin/bash
​
close_swap() {
        echo "检测及关闭系统 swap"
        sudo echo "vm.swappiness = 0" >> /etc/sysctl.conf
        swapoff -a && swapon -a
        sysctl -p
        echo "系统 swap 已关闭"
}
​
close_firewall() {
        echo "关闭及检测目标部署机器的防火墙"
        sudo systemctl stop firewalld.service
        sudo systemctl disable firewalld.service
        sudo systemctl status firewalld.service
        echo "目标部署机器的防火墙已关闭"
}
​
ntp_service() {
        #read -p "Please input a ntp_server_ip:" ntp_server_ip
        #sudo systemctl stop ntpd.service
        #sudo ntpdate ${ntp_server_ip} 
        sudo systemctl restart ntpd.service
        sudo systemctl enable ntpd.service
        echo "检查ntp服务器的连通性"
        ntpq -p
}
​
csop() {
        echo "配置系统优化参数..."
        echo "查看当前操作系统的 tuned 策略"
        tuned-adm list
        echo "创建新的 tuned 策略"
        mkdir /etc/tuned/balanced-tidb-optimal/
        touch /etc/tuned/balanced-tidb-optimal/tuned.conf
​
        echo "[main]" > /etc/tuned/balanced-tidb-optimal/tuned.conf
        echo "include=balanced" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
        echo "[cpu]" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
        echo "governor=performance" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
        echo "[vm]" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
        echo "transparent_hugepages=never" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
        echo "[disk]" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
        echo "elevator=noop" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
        
        echo "新的 tuned 策略创建完成. 查看请执行 cat /etc/tuned/balanced-tidb-optimal/tuned.conf"
        echo "应用新的 tuned 策略"
        tuned-adm profile balanced-tidb-optimal
​
        echo "验证透明大页的状态: 是否为never"
        cat /sys/kernel/mm/transparent_hugepage/enabled
​
        echo "验证数据目录所在磁盘的 I/O 调度器:是否为noop "
        cat /sys/block/sd[bc]/queue/scheduler
​
        echo "查看 cpufreq 模块选用的节能策略: performance模式"
        cpupower frequency-info --policy
        echo "如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy"
        echo "配置系统参数优化完成..."
}
​
modify_sysctl() {
        echo "修改 sysctl 参数..."
        echo "fs.file-max = 1000000">> /etc/sysctl.conf
        echo "net.core.somaxconn = 32768">> /etc/sysctl.conf
        echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf
        echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf
        echo "vm.overcommit_memory = 1">> /etc/sysctl.conf
        echo "执行 sysctl -p 命令在不重启的情况下使配置生效"
        sysctl -p
        echo "修改 sysctl 参数完成..."
}
​
limits_conf() {
        echo "配置用户的 limits.conf 文件"
        echo "tidb           soft    nofile          1000000" >>/etc/security/limits.conf
        echo "tidb           hard    nofile          1000000" >>/etc/security/limits.conf
        echo "tidb           soft    stack          32768" >>/etc/security/limits.conf
        echo "tidb           hard    stack          32768" >>/etc/security/limits.conf
​
        echo "limits.conf 文件配置完成"
}
​
useradd_tidb() {
        echo "增加tidb用户"
        sudo useradd tidb
        sudo sh -c 'echo "tidb ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers'
        echo "password"
        sleep 6
        sudo passwd tidb
}
​
​
echo "TiDB 环境与系统配置检查开始..."
​
echo "1.close_swap Start"
close_swap
echo "close_swap End"
echo " "
​
echo "2.close_firewall Start"
close_firewall
echo "close_firewall End"
echo " "
​
echo "3.ntp_service Start"
ntp_service
echo "ntp_service End"
echo " "
​
echo "4.csop Start"
csop
echo "csop End"
echo " "
​
echo "5.modify_sysctl Start"
modify_sysctl
echo "modify_sysctl End"
echo " "
​
echo "6.limits_conf Start"
limits_conf
echo "limits_conf End"
echo " "
​
echo "7.useradd_tidb Start"
useradd_tidb
echo "useradd_tidb End"
echo " "
​
echo "TiDB 环境与系统配置检查完成......"

2. 实施部署

2.1 部署管理工具 TiUP
  • 下载并安装 (在线):

    curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
    
  • 声明全局环境变量:

    source /home/tidb/.bash_profile
    
  • 安装 TiUP 的 cluster 组件:

    tiup cluster
    tiup update --self && tiup update cluster
    
  • 注:由于模拟多机部署,需要通过 root 用户调大 sshd 服务的连接数限制:

    修改 /etc/ssh/sshd_config MaxSessions 调至 20。

    cat /etc/ssh/sshd_config | grep MaxSessions
    sudo vim /etc/ssh/sshd_config 
    # 查找 MaxSessions 并修改数量 ,默认是10 ,我个人修改为 30 了  
    :/MaxSessions # vim ESC模式下查找关键词
    
2.2 创建并启动集群
  • 提前规划:

  • 集群名称: tidbsingle

  • TiDB 版本: v5.0.0 ,可以通过 tiup list tidb 命令来查看当前支持部署的 TiDB 版本

  • TiDB 部署空间:该规模集群初始化时会占用 21.1G 左右磁盘空间,需要有基础保障。

  • 按照拓扑文件配置模板创建 topo.yaml 配置文件:

    su tidb
    touch topo.yaml
    
  • 执行部署前检查 (check)集群存在的潜在风险:

    tiup cluster check ./topo.yaml --user tidb
    
  • 执行部署前自动修复 (check --apply)集群存在的潜在风险:

    tiup cluster check ./topo.yaml --apply --user tidb
    
  • 上边两个步骤出现的一些潜在风险,在测试集群中可以不处理!

  • 值得一提的是:上面的检查会出现不支持麒麟系统的提示,可以不用管,官方人员说可以支持麒麟和鲲鹏系统,实验也是支持的。

  • 执行集群部署命令:

    tiup cluster deploy tidbsingle v5.0.0 ./topo.yaml --user tidb -p
    

按照引导来完成部署。

  • 这种模式的集群部署第一次需要执行以下方式进行初始化启动:

    tiup cluster start tidbsingle --init
    # 服务启动超时情况出现的话,先按照提示查看日志文件,根据 welcome 和 error 关键词定位异常;如果是单纯的超时可以多试几次
    

    第一次初始化启动会提示数据库 root 用户的初始密码;之后每次集群启动就不需要指定 --init

    # 集群启动
    tiup cluster start tidbsingle
    
2.3 访问集群
  • MySQL 客户端(黑屏模式)连接,因为 TiDB 兼容 MySQL ,这种模式当下流行且方便:

    mysql -h 192.168.0.131 -P 4000 -u root -p
    Enter password: 这里输入第一次初始化启动生成的密码!
    
  • 这里引入 数据库 root 用户的修改:

    # 使用 mysql 库
    use mysql;
    # select User,Host,authentication_string from mysql.user;
    # 修改密码为xxxxxxxxxx
    alter user 'root'@'%' identified by 'password';
    # 刷新
    flush privileges;
    # 退出连接
    exit
    
  • 数据库连接应用连接,按照 MySQL 模式进行连接配置:

<!---->

  • 因为这里采用的是云服务器,所以IP不一样是正常情况!

  • 访问 TiDB 的 Grafana 监控:

  • 通过 http://{ip}:3003/login 访问集群 Grafana 监控页面,默认用户名和密码在拓扑文件中设置均为 admin(默认)。

<!---->

2.4 管理集群
  • 执行以下命令确认当前已经部署的集群列表:

    tiup cluster list
    
  • 执行以下命令查看集群的拓扑结构和状态:

    tiup cluster display tidbsingle
    
  • 执行以下命令停止集群:

    tiup cluster stop tidbsingle
    
  • 执行以下命令销毁集群(数据全丢,注意执行条件):

    tiup cluster destroy tidbsingle 
    
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐