专栏首页SEian.G学习记录生产环境TiDB 5.0集群部署

生产环境TiDB 5.0集群部署

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

废话不多说,直接开整~

一、TiDB集群拓扑规划

实例

个数

IP

TiDB

3

10.30.128.1

10.30.128.2

10.30.128.3

PD

3

10.30.128.1

10.30.128.2

10.30.128.3

TiKV

5

10.30.128.4

10.30.128.5

10.30.128.6

10.30.128.7

10.30.128.8

Tiflash

1

10.30.128.9

Monitoring & Grafana&alertmanager

1

10.30.128.10

中控

1

10.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语法,执行计划、优化器、事务等等;

本文分享自微信公众号 - DBA的辛酸事儿(dbabitter),作者:SEian.G

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【DB资讯1】迈向企业级核心场景的 TiDB 5.0

    随着 2021 年春天的来临和 PingCAP 年满 6 周岁纪念日的到来,TiDB 5.0 迎来正式 GA。经过近一年紧锣密鼓的开发和打磨,TiDB 5.0 ...

    小麦苗DBA宝典
  • 迈向企业级核心场景的 TiDB 5.0

    随着 2021 年春天的来临和 PingCAP 年满 6 周岁纪念日的到来,TiDB 5.0 迎来正式 GA。经过近一年紧锣密鼓的开发和打磨,TiDB 5.0 ...

    PingCAP
  • 国产数据库|TiDB 5.0 快速体验

    TiDB 是平凯星辰 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactio...

    JiekeXu之路
  • TiDB在X86和ARM混合平台下的离线部署和升级

    在之前我们团队发布了TiDB基于X86和ARM混合部署架构的文章:TiDB 5.0 异步事务特性体验——基于X86和ARM混合部署架构,最近有朋友问到离线模式下...

    HOHO
  • Elasticsearch 生产环境集群部署最佳实践

    在生产环境搭建或维护 Elasticsearch 集群和个人搭建集群的小打小闹有非常大的不同。

    铭毅天下
  • 003.Elasticsearch-6.6.0生产环境集群部署指南

    ES是很消耗内存的,消耗的不是JVM的内存,一般来说ES用的JVM Heap还是比较少的,主要是使用机器的物理内存,ES底层基于Lucene,Lucene是基于...

    CoderJed
  • TiDB 5.0 跨中心部署能力初探 | 揭秘 TiDB 5.0 事务分布式授时模块

    TiDB 5.0 发布在即,在这个大版本更新中提升 TiDB 集群的跨中心部署能力是我们重要的一个着力点。其中,新的分布式本地事务能力及其对应的授时服务改造是基...

    PingCAP
  • TiDB 5.1 发版,打造更流畅的企业级数据库体验

    自 TiDB 5.0 发布以来,陆续在金融、互联网 & 新经济、物流等行业用户的生产环境得到应用,收获不少用户的积极评价:

    PingCAP
  • PingCAP 发布 TiDB 5.0 里程碑版本 构建一栈式数据服务平台

    2021 年 4 月 25 日——领先的企业级开源分布式数据库厂商 PingCAP 正式发布面向企业级核心场景的 TiDB 5.0 版本。TiDB 5.0 在性...

    PingCAP
  • OpenStack集群部署—集群环境

    院长技术
  • 从0到1部署一套TiDB本地集群

    适用场景:利用本地 Mac 或者单机 Linux 环境快速部署 TiDB 集群。可以体验 TiDB 集群的基本架构,以及 TiDB、TiKV、PD、监控等基础组...

    jinjunzhu
  • 涂鸦智能选型 TiKV 的心路历程

    本文来自涂鸦智能的刘筠松在 PingCAP DevCon 2021 上的分享,包括 TiDB 在 IoT 领域,特别是在智能家居行业的使用。

    PingCAP
  • 从零部署TiDB集群

    朋友圈,关注的公众号经常出现各个公司开始用TiDB的案例和各种技术分享。对TiDB蛮有兴趣,这几天终于可以尝试接触 TiDB,第一步当然是安装和部署。过程还是蛮...

    用户1278550
  • 构建实时数仓 - 当 TiDB 偶遇 Pravega

    数据仓库是公司数据发展到一定规模后必然需要提供的一种基础服务,也是“数据智能”建设的基础环节。早期数仓多为离线模式,主要处理的是 T+1 的数据,随着互联网时代...

    PingCAP
  • 刘寅:TiDB 工具链和生态

    大家下午好,我叫刘寅。在 PingCAP 主要负责 TiDB 商业工具产品开发,也在做公司 SRE 方面的事情。今天下午我分享的主题是介绍下 TiDB 的周边工...

    PingCAP
  • TiDB 在金融行业关键业务场景的实践(下篇)

    TiDB 作为一款高效稳定的开源分布式数据库,在国内外的银行、证券、保险、在线支付和金融科技行业得到了普遍应用,并在约 20 多种不同的金融业务场景中支撑着用户...

    PingCAP
  • 使用 TiDB 构建实时应用

    本文由 PingCAP 研发工程师雷宇分享,主要从宏观角度分析 TiDB 究竟能做什么,创造什么样的价值,以及研发过程中的一些设计立足点。 文章将从四个部分分享...

    PingCAP
  • TiDB 5.0 VS MySQL 8.0 性能对比测试

    TiDB正式线上前,总是要对TiDB做个压测来为后续的业务接入做评估依旧;本次针对TiDB 5.0以及MySQL 8.0在同等规格配置下,性能做一个对比,尽管来...

    SEian.G
  • VueJs生产环境部署

      VueJs为客户端语言,所以部署的时候是不需要基于nodejs或其他服务器运行环境,只需要像其他静态站点的方式发布就可以了,下面介绍一下VueJs具体发布的...

    Java中文社群-磊哥

扫码关注云+社区

领取腾讯云代金券