在开发环境使用tiup安装tidb集群(代码片段)

雅冰石 雅冰石     2023-02-27     642

关键词:

TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP cluster 是 TiUP 提供的使用 Golang 编写的集群管理组件,通过 TiUP cluster 组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级 TiDB 集群;管理 TiDB 集群参数。

目前 TiUP 可以支持部署 TiDB、TiFlash、TiDB Binlog、TiCDC,以及监控系统。

一 实验环境

本文实验环境如下:

这里将Tiup,监控,grafana,告警灯都部署在PD上。

这里只是模拟在开发环境安装tidb,因此未配置PD,TiDB等组件的高可用。

二 前提准备

2.1 软硬件要求

2.1.1 Linux 操作系统版本要求

 2.1.2 软件配置要求

 2.1.3 服务器建议配置

2.1.3.1 开发及测试环境

 2.1.3.2 生产环境

 2.1.4 网络要求

TiDB 作为开源分布式 NewSQL 数据库,其正常运行需要网络环境提供如下的网络端口配置要求,管理员可根据实际环境中 TiDB 组件部署的方案,在网络侧和主机侧开放相关端口:

组件

默认端口

说明

TiDB

4000

应用及 DBA 工具访问通信端口

TiDB

10080

TiDB 状态信息上报通信端口

TiKV

20160

TiKV 通信端口

TiKV

20180

TiKV 状态信息上报通信端口

PD

2379

提供 TiDB 和 PD 通信端口

PD

2380

PD 集群节点间通信端口

TiFlash

9000

TiFlash TCP 服务端口

TiFlash

8123

TiFlash HTTP 服务端口

TiFlash

3930

TiFlash RAFT 服务和 Coprocessor 服务端口

TiFlash

20170

TiFlash Proxy 服务端口

TiFlash

20292

Prometheus 拉取 TiFlash Proxy metrics 端口

TiFlash

8234

Prometheus 拉取 TiFlash metrics 端口

Pump

8250

Pump 通信端口

Drainer

8249

Drainer 通信端口

CDC

8300

CDC 通信接口

Prometheus

9090

Prometheus 服务通信端口

Node_exporter

9100

TiDB 集群每个节点的系统信息上报通信端口

Blackbox_exporter

9115

Blackbox_exporter 通信端口,用于 TiDB 集群端口监控

Grafana

3000

Web 监控服务对外服务和客户端(浏览器)访问端口

Alertmanager

9093

告警 web 服务端口

Alertmanager

9094

告警通信端口

2.2 环境与系统配置

2.2.1 主机名

要求各服务器的主机名必须是唯一的,不能重复。

2.2.2 服务器的root密码

要求各服务器的root密码必须一样,且允许root用户能被直连及远程连接服务器。

2.2.3 确保能创建用户

后面安装tidb时会自动创建一个用户名为tidb的用户,因此需要确保能正常创建用户。

① 查看下列文件的属性,确保没有输出i属性

lsattr /etc/passwd

lsattr /etc/group

lsattr /etc/shadow

lsattr /etc/gshadow

如果有输出包含i的内容,如:

----ia---------- /etc/passwd

需要取消i属性:

chattr +ia /etc/passwd

chattr +ia /etc/group

chattr +ia /etc/shadow

chattr +ia /etc/gshadow

② 如果操作系统有限制,不让普通用户远程连接,需要修改/etc/ssh/sshd_config 文件,在AllowUsers 后添加tidb,示例:

AllowUsers  root tidb

#重启ssh

service sshd restart

2.2.4 在TiKV部署目标机器上添加数据盘EXT4文件系统挂载参数

生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。这个配置方案为最佳实施方案,其可靠性、安全性、稳定性已经在大量线上场景中得到证实。

使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 TiUP 安装时检测无法通过;noatime 是可选建议参数。

以 /dev/nvme0n1 数据盘为例,具体操作步骤如下:

1.查看数据盘

fdisk -l

Disk /dev/sdb: 100 GB

2.创建分区

parted -s -a optimal /dev/sdb  mklabel gpt -- mkpart primary ext4 1 -1

3.格式化文件系统

mkfs.ext4 /dev/sdb1

4.查看数据盘分区 UUID。

[root@TiKV-01 ~]# lsblk  -f

NAME    FSTYPE      LABEL UUID                                   MOUNTPOINT

sda                                                                      

├─sda1          xfs               277245ad-186f-48b2-875c-e6a6bd0a5f15   /boot

├─sda2          LVM2_member       Ybd6tt-EU1m-S8uR-yWyd-HcVM-9sQf-Jpivlc

│ ├─centos-root xfs               f48033ba-6022-4789-be8e-36e96b0f5772   /

│ └─centos-swap swap              3ee6432f-45d2-44c6-97dd-0607b15150b4   [SWAP]

└─sda3          LVM2_member       diClbq-qgiT-xadx-yNkG-iI9q-HSN3-w279Q3

  └─centos-root xfs               f48033ba-6022-4789-be8e-36e96b0f5772   /

sdb                                                                      

└─sdb1          ext4              3ebc8d3d-4e63-4deb-ada4-c9ff91c1c710  

本例中 sdb1 的 UUID 为 3ebc8d3d-4e63-4deb-ada4-c9ff91c1c710。

5.编辑 /etc/fstab 文件,添加 nodelalloc 挂载参数。

vi /etc/fstab

UUID=3ebc8d3d-4e63-4deb-ada4-c9ff91c1c710 /data ext4 defaults,nodelalloc,noatime 0 2

  1. 挂载数据盘

mkdir /data && \\

mount -a

7.执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc,则表示已生效。

mount -t ext4

/dev/sdb1 on /data type ext4 (rw,noatime,nodelalloc,data=ordered)

2.2.5 检测及关闭系统swap

TiDB 运行需要有足够的内存,并且不建议使用 swap 作为内存不足的缓冲,这会降低性能。因此建议永久关闭系统 swap,并且不要使用 swapoff -a 方式关闭,否则重启机器后该操作会失效。

建议执行以下命令关闭系统 swap:

echo "vm.swappiness = 0">> /etc/sysctl.conf

swapoff -a

sysctl -p

2.2.6 检测及关闭目标部署机器的防火墙

因为在 TiDB 集群中,需要将节点间的访问端口打通才可以保证读写请求、数据心跳等信息的正常的传输。在普遍线上场景中,数据库到业务服务和数据库节点的网络联通都是在安全域内完成数据交互。如果没有特殊安全的要求,建议将目标节点的防火墙进行关闭。否则建议按照端口使用规则,将端口信息配置到防火墙服务的白名单中。

systemctl stop firewalld

systemctl disable firewalld

2.2.7 检测及安装NTP服务

TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。目前解决授时的普遍方案是采用 NTP 服务,可以通过互联网中的 pool.ntp.org 授时服务来保证节点的时间同步,也可以使用离线环境自己搭建的 NTP 服务来解决授时。

配置ntp时钟同步可参考配置ntp时钟同步(tar包方式安装ntp)_雅冰石的专栏-CSDN博客_ntp tar包安装
若已有服务端环境,则只需在客户端安装下ntp,并执行下‘2.3 配置客户端’即可。

2.2.8 配置操作系统优化参数

在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:

  • 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。
  • 将存储介质的 I/O 调度器设置为 noop。
  • 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。

2.2.8.1 使用tuned配置系统优化参数

2.2.8.1.1 查看磁盘的唯一标识ID_SERIAL

udevadm info --name=/dev/sdb | grep ID_SERIAL

E: ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81

E: ID_SERIAL_SHORT=6d0946606d79f90025f3e09a0c1f9e81

--注意

如果多个磁盘都分配了数据目录,需要多次执行以上命令,记录所有磁盘各自的唯一标识。

2.2.8.1.2 创建新的tuned策略

mkdir /etc/tuned/balanced-tidb-optimal/

vi /etc/tuned/balanced-tidb-optimal/tuned.conf

[main]

include=balanced

[cpu]

governor=performance

[vm]

transparent_hugepages=never

[disk]

devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81)

elevator=noop

2.2.8.1.3 应用新调整的配置文件

tuned-adm profile balanced-tidb-optimal

2.2.8.1.4 验证

① 验证透明大页的状态。

cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

② 验证数据目录所在磁盘的 I/O 调度器。

cat /sys/block/sd[bc]/queue/scheduler

[noop] deadline cfq

[noop] deadline cfq

③ 查看 cpufreq 模块选用的节能策略。

cpupower frequency-info --policy

analyzing CPU 0:

current policy: frequency should be within 1.20 GHz and 3.10 GHz.

              The governor "performance" may decide which speed to use within this range.

如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy。

2.2.8.2 修改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

2.2.8.3 配置用户的 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

2.2.9 安装numactl工具

在在线环境中,由于硬件配置通常高于要求,为了更好地规划硬件资源,可以在一台机器上部署多个 TiDB 或 TiKV 实例。在这种情况下,您可以使用 NUMA 工具来防止可能导致性能下降的 CPU 资源竞争。

yum -y install numactl

三 安装与启动

这里在PD服务器上使用TiUP部署TiDB 集群。

3.1 安装tiup

cd /usr/local

mkdir tidb

将离线包上传到中控机/usr/local/tidb下,执行以下命令安装 TiUP 组件:

tar xzvf tidb-community-server-v5.2.2-linux-amd64.tar.gz

sh tidb-community-server-v5.2.2-linux-amd64/local_install.sh

source /root/.bash_profile

输入tiup --help能看到数据库参数,表示安装成功。

3.2 在tiup服务器上安装sshpass

yum install sshpass -y

输入sshpass --help进行验证

3.3 初始化集群拓扑文件

vi /usr/local/tidb/topology.yaml

新增:

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"
  data_dir: "/tidb-data"
monitored:
  node_exporter_port: 9100
  blackbox_exporter_port: 9115
server_configs: 
  tidb:
    max-server-connections: 0
    log.slow-threshold: 300
    binlog.enable: false
    binlog.ignore-error: false
  tikv:    
    readpool.storage.use-unified-pool: false
    readpool.coprocessor.use-unified-pool: true
  pd:
    schedule.leader-schedule-limit: 4
    schedule.region-schedule-limit: 2048
    schedule.replica-schedule-limit: 64
  tiflash: 
    profiles.default.max_memory_usage: 0
    profiles.default.max_memory_usage_for_all_queries: 0
pd_servers:
  - host: 192.168.119.202
tidb_servers:
  - host: 192.168.119.200 
tikv_servers:
  - host: 192.168.119.203
    deploy_dir: "/data/tidb-deploy/tikv-20160"
    data_dir: "/data/tidb-data/tikv-20160"
    log_dir: "/data/tidb-deploy/tikv-20160/log"
  - host: 192.168.119.204
    deploy_dir: "/data/tidb-deploy/tikv-20160"
    data_dir: "/data/tidb-data/tikv-20160"
    log_dir: "/data/tidb-deploy/tikv-20160/log"
  - host: 192.168.119.208
    deploy_dir: "/data/tidb-deploy/tikv-20160"
    data_dir: "/data/tidb-data/tikv-20160"
    log_dir: "/data/tidb-deploy/tikv-20160/log"
tiflash_servers: 
  - host: 192.168.119.211
cdc_servers:
  - host: 192.168.119.209
monitoring_servers:
  - host: 192.168.119.202
grafana_servers:
  - host: 192.168.119.202
alertmanager_servers:
  - host: 192.168.119.202

/*

参数含义可参考通过 TiUP 部署 TiDB 集群的拓扑文件配置 | PingCAP Docs

log.slow-threshold: 300

单位是毫秒,当查询大于这个值,就会当做是一个慢查询,输出到慢查询日志。

*/

3.4 部署tidb集群

#检查和自动修复集群存在的潜在风险

tiup cluster check /usr/local/tidb/topology.yaml --apply --user root -p

#部署tidb集群

tiup cluster deploy MyTiDB v5.2.2 /usr/local/tidb/topology.yaml --user root -p

这里的MyTiDB是可自定义的集群名称

#查看tiup管理的集群情况

[root@PD ~]# tiup cluster list

Starting component `cluster`: /root/.tiup/components/cluster/v1.6.1/tiup-cluster list

Name    User  Version  Path                                         PrivateKey

----    ----  -------  ----                                         ----------

MyTiDB  tidb  v5.2.2   /root/.tiup/storage/cluster/clusters/MyTiDB  /root/.tiup/storage/cluster/clusters/MyTiDB/ssh/id_rsa

3.5 启动集群

tiup cluster start MyTiDB

3.6 验证集群状态

3.6.1 通过tiup检查集群状态

tiup cluster display MyTiDB

各节点 Status 状态信息为 Up 说明集群状态正常。

3.6.2 通过TiDB Dashboard 检查 TiDB 集群状态

通过 pd-ip:pd-port/dashboard) 登录 TiDB Dashboard,登录用户和口令为 TiDB 数据库 root 用户和口令。如果你修改过数据库的 root 密码,则以修改后的密码为准,默认密码为空。

示例:

 

四 连接tidb数据库

mysql -u root -h $tidb_server_host_IP_address -P 4000

#查看版本

MySQL [(none)]> select tidb_version()\\G;

*************************** 1. row ***************************

tidb_version(): Release Version: v5.2.2

Edition: Community

Git Commit Hash: da1c21fd45a4ea5900ac16d2f4a248143f378d18

Git Branch: heads/refs/tags/v5.2.2

UTC Build Time: 2021-10-20 06:08:33

GoVersion: go1.16.4

Race Enabled: false

TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306

Check Table Before Drop: false

1 row in set (0.003 sec)

#查看 TiKV store 状态、store_id、存储情况以及启动时间

MySQL [baidd]> select STORE_ID,ADDRESS,STORE_STATE,STORE_STATE_NAME,CAPACITY,AVAILABLE,UPTIME from INFORMATION_SCHEMA.TIKV_STORE_STATUS;

+----------+-----------------------+-------------+------------------+----------+-----------+---------------------+

| STORE_ID | ADDRESS               | STORE_STATE | STORE_STATE_NAME | CAPACITY | AVAILABLE | UPTIME              |

+----------+-----------------------+-------------+------------------+----------+-----------+---------------------+

|        1 | 192.168.119.208:20160 |           0 | Up               | 98.3GiB  | 87.75GiB  | 20h15m13.673247642s |

|        7 | 192.168.119.204:20160 |           0 | Up               | 98.3GiB  | 87.75GiB  | 20h12m58.318900937s |

|        2 | 192.168.119.203:20160 |           0 | Up               | 98.3GiB  | 87.75GiB  | 20h14m52.293411352s |

|      106 | 192.168.119.211:3930  |           0 | Up               | 94.98GiB | 94.98GiB  | 20h14m50.074671562s |

+----------+-----------------------+-------------+------------------+----------+-----------+---------------------+

--本篇文章主要参考了

TiDB 简介 | PingCAP Docs

tidb-使用tiup在线搭建tidb集群(代码片段)

一、TIUP简介前面介绍了单机版本的环境搭建以及如何在docker中搭建环境,前面就讲到官方建议使用TiUP来搭建管理整个集群环境,下面我们来体验下。TiUP是TiDB4.0版本引入的集群运维工具,TiUPcluster是TiUP提供的使用Golan... 查看详情

数据库必知必会:tidb(11)tidb数据库集群安装(代码片段)

...台中控机,然后通过中控机进行集群的安装及管理。单机环境上安装集群单机环境集群式将所有节点都安装在同一台服务器上。在集群中,PD实例需要有3个,TiKV实例需要有3个,其余的实例可以只保留1个。安装过程中,需要先安... 查看详情

tidb-tidb集群的扩容和缩容及tiup指令说明(代码片段)

一、TIUP工具简介前面介绍了使用TIUP搭建TIDB集群,本篇文章详细介绍下使用TIUP对集群进行扩容和缩容。在面对双十一这种流量突峰的场景,我们平常的TIDB集群有可能承受不住,因此需要提前进行扩容,例如增加ti... 查看详情

使用tiupcluster在单机上模拟生产环境部署步骤(代码片段)

一实验环境适用场景:希望用单台Linux服务器,体验TiDB最小的完整拓扑的集群,并模拟生产的部署步骤。本节介绍如何参照TiUP最小拓扑的一个YAML文件部署TiDB集群。准备一台部署主机,确保其软件满足需求:... 查看详情

使用tiupcluster在单机上模拟生产环境部署步骤(代码片段)

一实验环境适用场景:希望用单台Linux服务器,体验TiDB最小的完整拓扑的集群,并模拟生产的部署步骤。本节介绍如何参照TiUP最小拓扑的一个YAML文件部署TiDB集群。准备一台部署主机,确保其软件满足需求:... 查看详情

tiup部署tidb数据库集群

...试集群(Linux版本)适用场景:利用本地Mac或者单机Linux环境快速部署TiDB测试集群,体验TiDB集群的基本架构,以及TiDB、TiKV、PD、监控等基础组件的运行。1、创建tidb用户组及用户[root@tidbhome]#groupaddtidb[root@tidbhome]#useraddtidb-r-m-gtidb2... 查看详情

使用pingcapclinic诊断tidb集群(代码片段)

对于使用TiUP部署的TiDB集群和DM集群,PingCAPClinic诊断服务(以下简称为PingCAPClinic)可以通过Diag诊断客户端(以下简称为Diag)与ClinicServer云诊断平台(以下简称为ClinicServer)实现远程定位集群问题和本... 查看详情

猿创征文|国产数据库实战之tidb数据库快速入门(代码片段)

...介绍二、快速部署本地测试集群1.安装TiUP工具2.声明全局环境变量3.快速部署TiDB集群三、连接TiDB数据库1.新开一个session以访问TiDB数据库2.通过Mysql客户端连接TiDB数据库四、清理TiDB集群环境五、TiDB数据库的用户管理1.创建用户2.删... 查看详情

tidb的安装与使用(代码片段)

...ff0c;例如v4.0.0。此时,package.tar.gz就是一个独立的离线环境包。传到中控机上二.安装tiup工具进入中控机也就是package放置的机器,创建tidb用户,做sudo权限1.之后执行指令,进入package下shlocal_install.sh&&sourc... 查看详情

tidb-docker环境集群搭建(代码片段)

一、TIDBTIDB的介绍已经在我上篇博客中介绍了,并且介绍了单机版的TIDB安装。TIDB-分布式关系型数据库讲解https://blog.csdn.net/qq_43692950/article/details/121304249本文继续就TIDB的部署进行讲解,当然官方的文档也写的比较详细࿰... 查看详情

使用dockercompose安装tidb(代码片段)

参考文章:https://blog.csdn.net/weixin_33729196/article/details/86018480目标单机上通过DockerCompose快速一键部署一套TiDB测试集群前提条件1.centos版本在7.3以上,内存大于6G2.安装git3.安装docker4.安装docker-compose开始安装1.下载tidb-docker-c 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

...架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-compose1.下载tidb-docker-compose2.检查文件3.查看docker-compose.yml文件4.下载相关镜像5.部署TiDB集群6.检查T... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

...架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-compose1.下载tidb-docker-compose2.检查文件3.查看docker-compose.yml文件4.下载相关镜像5.部署TiDB集群6.检查T... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

...架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-compose1.下载tidb-docker-compose2.检查文件3.查看docker-compose.yml文件4.下载相关镜像5.部署TiDB集群6.检查T... 查看详情

tidb-使用tidbbinlog将日志同步至下游kafka中(代码片段)

...121597230注意:在做实验前,请确保已经配置好Kafka环境:不了解的可以参考下面一篇我的博客:消息中间件KafKa集群搭建与使用:https://blog.csdn.net/qq_43692950/article/details/110648852二、TiDBBinlog配置在上篇文章中,... 查看详情

tidb集群安装tidbdashboard

...TiDB文档-TiDBDashboard​​。本篇文章将介绍如何在Kubernetes环境下访问TiDBDashboard。通过创建Dashboard能快速查看集群出现的问题,建议开启。一、访问TiDBDashboard方法一、使用NodePortService进行访问1.1、创建NodePort的Service[root@k8s-mastertidb]... 查看详情

k8s开发环境搭建(代码片段)

​前言K8S是集群环境,如果在本地开发环境搭建集群就有点得不偿失了。所以根据实际开发情况,推荐大家使用Minikube在开发环境启动一个单例K8s。安装步骤1.安装kubectl工具是用于操作远程的命令行工具。brewinstallkubernetes... 查看详情

k8s开发环境搭建(代码片段)

​前言K8S是集群环境,如果在本地开发环境搭建集群就有点得不偿失了。所以根据实际开发情况,推荐大家使用Minikube在开发环境启动一个单例K8s。安装步骤1.安装kubectl工具是用于操作远程的命令行工具。brewinstallkubernetes... 查看详情