在开发环境使用 TiUP安装TiDB集群

Posted 雅冰石

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在开发环境使用 TiUP安装TiDB集群相关的知识,希望对你有一定的参考价值。

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

以上是关于在开发环境使用 TiUP安装TiDB集群的主要内容,如果未能解决你的问题,请参考以下文章

TIDB - 使用TIUP在线搭建TIDB集群

使用 TiUP cluster 在单机上模拟生产环境部署步骤

使用 TiUP cluster 在单机上模拟生产环境部署步骤

TiUP部署 TiDB 数据库集群

TIDB - TIDB集群的扩容和缩容及TIUP指令说明

数据库必知必会:TiDB(11)TiDB数据库集群安装