暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

生产环境TiDB 5.0集群部署

DBA的辛酸事儿 2021-08-12
1602

最近是沉迷于TiDB,无法自拔,从TiDB集群部署到集群压测、高可用测试、再到参数调优,最后到线上业务从MySQL迁移到TiDB,整个过程下来,感觉整个学习成本还是比较高,不管是TiDB还是分布式数据库,要学习的内容还是非常的多;本文主要分享生产环境部署TiDB v5.0.3版本集群过程,供大家参考学习;

废话不多说,直接开整~

  一、TiDB集群拓扑规划

实例个数IP
TiDB310.30.128.1
10.30.128.2
10.30.128.3
PD310.30.128.1
10.30.128.2
10.30.128.3
TiKV510.30.128.4
10.30.128.5
10.30.128.6
10.30.128.7
10.30.128.8
Tiflash110.30.128.9
Monitoring & Grafana&alertmanager110.30.128.10
中控110.30.128.11
说明:TiDB Server节点和PD采用混合部署方式,如果资源足够,可以考虑单独部署;

  二、TiDB 环境与系统配置检查

1、在 TiKV 部署目标机器上添加数据盘 EXT4 文件系统挂载参数
生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。
2、检测及关闭系统 swap
TiDB 运行需要有足够的内存,并且不建议使用 swap 作为内存不足的缓冲,这会降低性能。因此建议永久关闭系统 swap,并且不要使用 swapoff -a 方式关闭,否则重启机器后该操作会失效。
建议执行以下命令关闭系统 swap:
    echo "vm.swappiness = 0">> etc/sysctl.conf
    swapoff -a
    sysctl -p
    复制
    3、检测及安装 NTP 服务
    TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。
    4、检查和配置操作系统优化参数
    在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:
    (1)关闭透明大页(即 Transparent Huge Pages,缩写为THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
    执行以下命令查看透明大页的开启状态。
      cat sys/kernel/mm/transparent_hugepage/enabled
      [always] madvise never 表示透明大页处于启用状态,需要关闭。
      复制
      关闭透明大页
        echo never > sys/kernel/mm/transparent_hugepage/enabled
        echo never > sys/kernel/mm/transparent_hugepage/defrag
        复制
        (2)将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
        执行以下命令查看数据目录所在磁盘的 I/O 调度器。
          cat sys/block/sd[bc]/queue/scheduler
          复制
          noop [deadline] cfq 表示磁盘的 I/O 调度器使用 deadline,需要进行修改。
          执行以下命令验证数据目录所在磁盘的 I/O 调度器。
            cat sys/block/sd[bc]/queue/scheduler
            复制
            (3)为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。
            执行以下命令查看 cpufreq 模块选用的节能策略。
              cpupower frequency-info --policy
              analyzing CPU 0:
              Unable to determine current policy
              复制
              如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy。
              创建 CPU 节能策略配置服务。
                cat  >> etc/systemd/system/cpupower.service << EOF
                [Unit]
                Description=CPU performance
                [Service]
                Type=oneshot
                ExecStart=/usr/bin/cpupower frequency-set --governor performance
                [Install]
                WantedBy=multi-user.target
                EOF
                复制
                执行以下命令修改 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
                  sysctl -p
                  复制
                  执行以下命令配置用户的 limits.conf 文件
                    cat << EOF >>/etc/security/limits.conf
                    tidb soft nofile 1000000
                    tidb hard nofile 1000000
                    tidb soft stack 32768
                    tidb hard stack 32768
                    EOF
                    复制
                    5、安装 numactl 工具
                    在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署 TiDB 或者 TiKV。NUMA 绑核工具的使用,主要为了防止 CPU 资源的争抢,引发性能衰退。
                      yum -y install numactl
                      复制
                      6、SSH 互信及 sudo 免密码
                      (1)以 root 用户依次登录到部署目标机器创建 tidb 用户并设置登录密码。
                        useradd tidb && echo 'tidb' | passwd --stdin tidb
                        复制
                        (2)执行以下命令,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾,即配置好 sudo 免密码。
                          visudo
                          tidb ALL=(ALL) NOPASSWD: ALL
                          复制
                          (3)以 tidb 用户登录到中控机,执行以下命令。按提示输入部署目标机器 tidb 用户密码,执行成功后即创建好 SSH 互信,其他机器同理。新建的 tidb 用户下没有 .ssh 目录,需要执行生成 rsa 密钥的命令来生成 .ssh 目录。
                          如果要在中控机上部署 TiDB 组件,需要为中控机和中控机自身配置互信。
                            ssh-keygen
                            ssh-copy-id -i ~/.ssh/id_rsa.pub 10.30.xx.xx
                            复制
                            (4)以 tidb 用户登录中控机,通过 ssh 的方式登录目标机器 IP。如果不需要输入密码并登录成功,即表示 SSH 互信配置成功。
                              ssh 10.30.128.1
                              复制
                              (5)以 tidb 用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到 root 用户,表示 tidb 用户 sudo 免密码配置成功。
                                sudo -su root
                                复制

                                  三、集群部署

                                1、拓扑模板
                                集群初始化配置文件可以通过 TiUP 工具在中控机上面创建 YAML 格式配置文件topology.yaml:
                                (1)配置文件
                                  # # Global variables are applied to all deployments and used as the default value of
                                  # # # the deployments if a specific deployment value is missing.
                                  global:
                                  user: "tidb"
                                  ssh_port: 22
                                  deploy_dir: "/data/tidb-deploy"
                                  data_dir: "/data/tidb-data"


                                  monitored:
                                  node_exporter_port: 9100
                                  blackbox_exporter_port: 9115


                                  server_configs:
                                  tidb:
                                  log.slow-threshold: 300
                                  tikv:
                                  readpool.storage.use-unified-pool: false
                                  readpool.coprocessor.use-unified-pool: true
                                  pd:
                                  replication.enable-placement-rules: true
                                  tiflash:
                                  profiles.default.max_memory_usage: 0
                                  profiles.default.max_memory_usage_for_all_queries: 0


                                  pd_servers:
                                  - host: 10.30.128.1
                                  - host: 10.30.128.2
                                  - host: 10.30.128.3


                                  tidb_servers:
                                  - host: 10.30.128.1
                                  - host: 10.30.128.2
                                  - host: 10.30.128.3


                                  tikv_servers:
                                  - host: 10.30.128.4
                                  - host: 10.30.128.5
                                  - host: 10.30.128.6
                                  - host: 10.30.128.7
                                  - host: 10.30.128.8
                                  tiflash_servers:
                                  - host: 10.30.128.9
                                  data_dir: /data/tiflash/data
                                  deploy_dir: /data/tiflash/deploy


                                  monitoring_servers:
                                  - host: 10.30.128.10


                                  grafana_servers:
                                  - host: 10.30.128.10


                                  alertmanager_servers:
                                  - host: 10.30.128.10
                                  复制
                                  2、使用 TiUP 部署 TiDB 集群
                                  (1)离线部署 TiUP 组件
                                  在 官方下载页面 选择对应版本的 TiDB server 离线镜像包(包含 TiUP 离线组件包)
                                  (2)部署离线环境 TiUP 组件
                                  将离线包发送到目标集群的中控机后,执行以下命令安装 TiUP 组件:
                                    tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz && \
                                    sh tidb-community-server-${version}-linux-amd64/local_install.sh && \
                                    source /home/tidb/.bash_profile
                                    复制
                                    local_install.sh 脚本会自动执行 tiup mirror set tidb-community-server-${version}-linux-amd64 命令将当前镜像地址设置为 tidb-community-server-${version}-linux-amd64。
                                    (3)执行部署命令
                                    执行 deploy 命令前,先使用 check 及 check –apply 命令,检查和自动修复集群存在的潜在风险:
                                      tiup cluster check ./topology.yaml --user tidb 
                                      tiup cluster check ./topology.yaml --apply --user tidb
                                      复制
                                      然后执行 deploy 命令部署 TiDB 集群:
                                        tiup cluster deploy tidb-prod001 v5.0.3 ./topology.yaml --user tidb
                                        复制
                                        预期日志结尾输出会有 Deployed cluster `tidb-prod001` successfully 关键词,表示部署成功。
                                        (5)查看 TiUP 管理的集群情况
                                          $ tiup cluster list
                                          Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.5.2/tiup-cluster list
                                          Name User Version Path PrivateKey
                                          ---- ---- ------- ---- ----------
                                          tidb-prod001 tidb v5.0.3 /home/tidb/.tiup/storage/cluster/clusters/tidb-prod001 /home/tidb/.tiup/storage/cluster/clusters/tidb-prod001/ssh/id_rsa
                                          复制
                                          (6)启动集群
                                            $ tiup cluster start tidb-prod001
                                            复制
                                            预期结果输出 Started cluster `tidb-prod001` successfully 标志启动成功。
                                            (7)查看集群的运行状态

                                            (8)验证集群运行状态
                                            a、通过 http://10.30.128.10:3000/ 登录 Grafana 监控,默认用户名及密码为 admin/admin
                                            点击 Overview 监控页面检查 TiDB 端口和负载监控信息。

                                            b、登录数据库执行简单 DML/DDL 操作和查询 SQL 语句
                                              mysql -u root -h 10.30.128.1 -P 4000
                                              mysql> select tidb_version()\G
                                              *************************** 1. row ***************************
                                              tidb_version(): Release Version: v5.0.3
                                              Edition: Community
                                              Git Commit Hash: 0b5c1546892b3b4195485303c70f30492c4b1d71
                                              Git Branch: heads/refs/tags/v5.0.3
                                              UTC Build Time: 2021-07-01 15:45:42
                                              GoVersion: go1.13
                                              Race Enabled: false
                                              TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
                                              Check Table Before Drop: false
                                              1 row in set (0.00 sec)
                                              复制

                                              部署的流程大概就先介绍怎么多吧,后续会不阶段的分享一些TiDB相关知识以及一些问题处理方法等,当然也会和MySQL进行对比,SQL语法,执行计划、优化器、事务等等;


                                              关联阅读:
                                              聊聊TiDB的那些事?

                                              文章转载自DBA的辛酸事儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                              评论