作者:尹裕皓
原文来源: tidb.net/blog/c45d84…
【是否原创】是
【首发渠道】TiDB 社区
【正文】
本文档参考官方文档和官方视频,并结合实际自己部署实验中遇到的情况整理而来
本文用于记录TiDB的部署
准备工作
系统要求:
请提前确认系统版本是否符合要求
具体配置要求详见官方文档: www.bookstack.cn/read/tidb-5…
Linux 操作系统平台 | 版本 |
---|---|
Red Hat Enterprise Linux | 7.3 及以上 |
CentOS | 7.3 及以上 |
Oracle Enterprise Linux | 7.3 及以上 |
Ubuntu LTS | 16.04 及以上 |
个人测试至少3个节点
测试开发服务器至少4个节点,如需tiflash和ticdc功能建议6个节点
生产至少需要9个节点,如需tiflash和ticdc功能则至少13个节点
挂载磁盘
本步骤的前提为有额外的磁盘可以挂载。生产库和有条件的测试库需按本步骤设置,没有额外磁盘的测试机则跳过本步
使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 TiUP 安装时检测无法通过;noatime 是可选建议参数。
注意:
使用 lsblk 命令查看分区的设备号:对于 nvme 磁盘,生成的分区设备号一般为 nvme0n1p1;对于普通磁盘(例如 /dev/sdb),生成的的分区设备号一般为 sdb1。
如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。
以 /dev/nvme0n1p1 数据盘为例,具体操作步骤如下:
fdisk -l
Disk /dev/nvme0n1: 1000 GB
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
mkfs.ext4 /dev/nvme0n1p1
本例中 nvme0n1p1 的 UUID 为 c51eb23b-195c-4061-92a9-3fad812cc12f
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 237b634b-a565-477b-8371-6dff0c41f5ab /boot
├─sda2 swap f414c5c0-f823-4bb1-8fdf-e531173a72ed
└─sda3 ext4 547909c1-398d-4696-94c6-03e43e317b60 /
sr0
nvme0n1
└─nvme0n1p1 ext4 c51eb23b-195c-4061-92a9-3fad812cc12f
vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
mkdir /data1 && mount -a
mount -t ext4
/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
关闭swap
echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
检查及安装NTP服务
centos7 rhel7 服务器有chronyd服务,会自动同步ntp信息,跳过本设置步骤
TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性
systemctl status ntpd.service
ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago
ntpstat
- 如果输出 synchronised to NTP server,表示正在与 NTP 服务器正常同步:
synchronised to NTP server (85.199.214.101) at stratum 2
time correct to within 91 ms
polling server every 1024 s
- 以下情况表示 NTP 服务未正常同步:
unsynchronised
- 以下情况表示 NTP 服务未正常运行:
Unable to talk to NTP daemon. Is it running?
检查和配置操作系统优化参数
在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:
关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。
得到类似下方结果:
==Current active profile: balanced== 表示当前操作系统的 tuned 策略使用 balanced,建议在当前策略的基础上添加操作系统优化配置。
tuned-adm list
Available profiles:
- balanced - General non-specialized tuned profile
- desktop - Optimize for the desktop use-case
- hpc-compute - Optimize for HPC compute workloads
- latency-performance - Optimize for deterministic performance at the cost of increased power consumption
- network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- powersave - Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest - Optimize for running inside a virtual guest
- virtual-host - Optimize for running KVM guests
Current active profile: balanced
获取磁盘唯一标识ID_SERIAL
有多个盘需执行多次,下方以sdb为例
获取磁盘挂载信息使用fdisk -ls
- 执行命令:
udevadm info --name=/dev/sdb | grep ID_SERIAL
- 得到下方结果:
E: ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81
填写如下内容:
mkdir /etc/tuned/balanced-tidb-optimal/
vi /etc/tuned/balanced-tidb-optimal/tuned.conf
> 注意将ID_SERIAL值替换为你查出来的
[main]
include=balanced
[cpu]
governor=performance
[vm]
transparent_hugepages=never
[disk]
devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81)
elevator=noop
> include=balanced 表示在现有的 balanced 策略基础上添加操作系统优化配置
tuned-adm profile balanced-tidb-optimal
cat /sys/kernel/mm/transparent_hugepage/enabled
结果应为:always madvise [never]
磁盘也可能是vd[bc],需自行用 fdisk -ls 确认
cat /sys/block/sd[bc]/queue/scheduler
结果应为:
[noop] deadline cfq
[noop] deadline cfq
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.
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 "vm.swappiness = 0">> /etc/sysctl.conf
sysctl -p
cat >/etc/security/limits.conf
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
EOF
手动配置 SSH 互信及 sudo 免密码
useradd tidb && passwd tidb
visudo
tidb ALL=(ALL) NOPASSWD: ALL
su - tidb
ssh-keygen -t rsa
10.0.1.1为其他部署节点ip,请自行替换,并依次将公钥复制到所有节点
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.1.1
ssh 10.0.1.1
[tidb@10.0.1.1 ~]$
安装 numactl 工具
本段主要介绍如果安装 NUMA 工具。在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署 TiDB 或者 TiKV。NUMA 绑核工具的使用,主要为了防止 CPU 资源的争抢,引发性能衰退。
注意:
NUMA 绑核是用来隔离 CPU 资源的一种方法,适合高配置物理机环境部署多实例使用。
通过 tiup cluster deploy 完成部署操作,就可以通过 exec 命令来进行集群级别管理工作。
- 方法1:通过 TiUP 的 cluster 执行完 exec 命令来完成批量安装(推荐)
本方法需要先安装tiup组件,如使用本方法,请先跳转到下一步,安装完tiup后再回来执行本步
将 tidb-test 集群所有目标主机通过 sudo 权限执行安装命令
tiup cluster exec tidb-test --sudo --command "yum -y install numactl"
推荐使用第一种方法,不需要手动到各节点,只需要在中控机一条命令即可
- 方法2:登录到各节点进行安装(以 CentOS Linux release 7.7.1908 (Core) 为例)
sudo yum -y install numactl
部署TiUP组件
使用普通用户登录 中控机 ,以 tidb 用户为例,后续安装 TiUP 及集群管理操作均通过该用户完成
su - tidb
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
tiup工具安装好以后会有如下提示:
/home/tidb/.bash_profile has been modified to add tiup to PATH
open a new terminal or source /home/tidb/.bash_profile to use it
根据提示source生效环境变量即可:
source /home/tidb/.bash_profile
确认 TiUP 工具是否安装:
which tiup
得到如下结果即为安装成功:
~/.tiup/bin/tiup
部署playground单机测试环境
本步骤为单机,仅用于了解tidb的架构和简单使用
安装开发|测试|生产环境请跳过本步
执行安装命令:
tiup playground
得到 CLUSTER START SUCCESSFULLY
的结果即表示安装成功,示例如下:
Waiting for tiflash instances ready
127.0.0.1:3930 ... Done
CLUSTER START SUCCESSFULLY, Enjoy it ^-^
To connect TiDB: mysql --comments --host 127.0.0.1 --port 4000 -u root -p (no password)
To view the dashboard: http://127.0.0.1:2379/dashboard
PD client endpoints: [127.0.0.1:2379]
To view the Prometheus: http://127.0.0.1:9090
To view the Grafana: http://127.0.0.1:3000
tiflash quit: signal: killed
Logging debug to /home/tidb/.tiup/data/SqQnv40/tiflash-0/log/tiflash.log
Logging errors to /home/tidb/.tiup/data/SqQnv40/tiflash-0/log/tiflash_error.log
此时需保留本窗口(不能退出),另开新窗口连接tidb实例,可按照安装完成后的提示实验所有功能
实验结束后结束掉部署窗口进程即可(control + c)
登录方式:
默认无密码
tiup client
or
mysql --host 127.0.0.1 --port 4000 -u root -p
部署TiDB集群
本步骤均在中控机的tidb账号下操作
安装 TiUP cluster 组件
tiup cluster
安装完成后会得到tiup cluster的相关命令提示
2. 如果已经安装,则更新 TiUP cluster 组件至最新版本:
tiup update --self && tiup update cluster
预期输出 “Update successfully!”
如需查看当前cluster版本,则执行如下语句
tiup --binary cluster
初始化集群拓扑文件
tiup cluster template > topology.yaml
注意:
混合部署场景也可以使用 tiup cluster template --full > topology.yaml 生成的建议拓扑模板,跨机房部署场景可以使用 tiup cluster template --multi-dc > topology.yaml 生成的建议拓扑模板。
文件生成以后编辑对应节点信息即可,本步骤生成的为一个模板文档,建议直接复制第2步的信息来新建文档。
2. 编辑拓扑文档
vi topology.yaml
填入以下内容
各节点信息请根据实际情况调整
本拓扑不包含tiflsh和ticdc,如需要请自行添加节点
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb/tidb-deploy"
data_dir: "/tidb/tidb-data"
pd_servers:
- host: 172.24.74.67
- host: 172.24.74.68
- host: 172.24.74.69
tidb_servers:
- host: 172.24.74.67
- host: 172.24.74.68
- host: 172.24.74.69
tikv_servers:
- host: 172.24.74.67
- host: 172.24.74.68
- host: 172.24.74.69
monitoring_servers:
- host: 172.24.74.67
grafana_servers:
- host: 172.24.74.68
alertmanager_servers:
- host: 172.24.74.68
检查和自动修复集群存在的潜在风险
请保证所有Fail项目修复后再进行下一步操作
tiup cluster check ./topology.yaml --user tidb
tiup cluster check ./topology.yaml --apply --user tidb
安装集群
通过 TiUP cluster 部署的集群名称为 tidb-test
可以通过执行tiup list tidb
来查看TiUP支持的最新可用版本
tiup cluster deploy tidb-test v5.0.0 ./topology.yaml --user tidb
预期日志结尾输出会有 Cluster
tidb-test deployed successfully
关键词,表示部署成功
可看到目前已安装的集群信息
tiup cluster list
tiup cluster display tidb-test
确认所有节点,目前的状态应该都是Down或者N/A,类似下方信息
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
172.24.74.68:9093 alertmanager 172.24.74.68 9093/9094 linux/x86_64 Down /tidb/tidb-data/alertmanager-9093 /tidb/tidb-deploy/alertmanager-9093
172.24.74.68:3000 grafana 172.24.74.68 3000 linux/x86_64 Down - /tidb/tidb-deploy/grafana-3000
172.24.74.67:2379 pd 172.24.74.67 2379/2380 linux/x86_64 Down /tidb/tidb-data/pd-2379 /tidb/tidb-deploy/pd-2379
172.24.74.68:2379 pd 172.24.74.68 2379/2380 linux/x86_64 Down /tidb/tidb-data/pd-2379 /tidb/tidb-deploy/pd-2379
172.24.74.69:2379 pd 172.24.74.69 2379/2380 linux/x86_64 Down /tidb/tidb-data/pd-2379 /tidb/tidb-deploy/pd-2379
172.24.74.67:9090 prometheus 172.24.74.67 9090 linux/x86_64 Down /tidb/tidb-data/prometheus-9090 /tidb/tidb-deploy/prometheus-9090
172.24.74.67:4000 tidb 172.24.74.67 4000/10080 linux/x86_64 Down - /tidb/tidb-deploy/tidb-4000
172.24.74.68:4000 tidb 172.24.74.68 4000/10080 linux/x86_64 Down - /tidb/tidb-deploy/tidb-4000
172.24.74.69:4000 tidb 172.24.74.69 4000/10080 linux/x86_64 Down - /tidb/tidb-deploy/tidb-4000
172.24.74.67:20160 tikv 172.24.74.67 20160/20180 linux/x86_64 N/A /tidb/tidb-data/tikv-20160 /tidb/tidb-deploy/tikv-20160
172.24.74.68:20160 tikv 172.24.74.68 20160/20180 linux/x86_64 N/A /tidb/tidb-data/tikv-20160 /tidb/tidb-deploy/tikv-20160
172.24.74.69:20160 tikv 172.24.74.69 20160/20180 linux/x86_64 N/A /tidb/tidb-data/tikv-20160 /tidb/tidb-deploy/tikv-20160
Total nodes: 12
tiup cluster start tidb-test
预期结果输出 Started cluster
tidb-test
successfully 标志启动成功
tiup cluster display tidb-test
预期结果应所有节点都为
Up
状态
mysql -uroot -p -h172.24.74.67 -P4000
默认无密码,需首次进入后设置
扩容节点
扩容前请按照【准备工作】调试好新节点的各项配置
扩容tidb,tikv,pd,ticdc节点
vi scale-out.yaml
文件名可自定义
填写如下内容:(这里包含了所有信息,需要新增哪种节点复制哪种节点信息即可)
# tidb
tidb_servers:
- host: 172.24.74.71
ssh_port: 22
port: 4000
status_port: 10080
deploy_dir: /data/deploy/install/deploy/tidb-4000
log_dir: /data/deploy/install/log/tidb-4000
# tikv
tikv_servers:
- host:172.24.74.71
ssh_port:22
port:20160
status_port:20180
deploy_dir:/data/deploy/install/deploy/tikv-20160
data_dir:/data/deploy/install/data/tikv-20160
log_dir:/data/deploy/install/log/tikv-20160
# pd
pd_servers:
- host:172.24.74.71
ssh_port:22
name: pd-1
client_port:2379
peer_port:2380
deploy_dir:/data/deploy/install/deploy/pd-2379
data_dir:/data/deploy/install/data/pd-2379
log_dir:/data/deploy/install/log/pd-2379
#ticdc
cdc_servers:
- host:172.24.74.71
- host:172.24.74.69
实验得知:仅host为必填项,其余参数均可继承全局参数
ticdc节点在测试环境可1个节点,在生产环境应至少2个节点
tiup cluster scale-out tidb-test scale-out.yaml
tiup cluster display tidb-test
扩容tiflash节点
tiflash仅支持tidb5.0+,如版本不匹配请先升级tidb集群
tiup ctl pd -u 172.24.74.71:2379 config set enable-placement-rules true
172.24.74.71:2379是任意pd节点的ip和端口
vi scale-out.yaml
文件名可自定义
填写如下内容:
tiflash_servers:
- host:172.24.74.71
在测试环境可1个节点,在生产环境应至少2个节点
tiup cluster scale-out tidb-test scale-out.yaml
tiup cluster display tidb-test
缩容节点
缩容tidb,tikv,pd,ticdc节点
tiup cluster display tidb-test
得到集群信息
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.7.0/tiup-cluster display tidb-test
Cluster type: tidb
Cluster name: tidb-test
Cluster version: v5.0.0
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://172.24.74.68:2379/dashboard
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
172.24.74.68:9093 alertmanager 172.24.74.68 9093/9094 linux/x86_64 Up /tidb/tidb-data/alertmanager-9093 /tidb/tidb-deploy/alertmanager-9093
172.24.74.71:8300 cdc 172.24.74.71 8300 linux/x86_64 Up /tidb/tidb-data/cdc-8300 /tidb/tidb-deploy/cdc-8300
172.24.74.68:3000 grafana 172.24.74.68 3000 linux/x86_64 Up - /tidb/tidb-deploy/grafana-3000
172.24.74.67:2379 pd 172.24.74.67 2379/2380 linux/x86_64 Up|L /tidb/tidb-data/pd-2379 /tidb/tidb-deploy/pd-2379
172.24.74.68:2379 pd 172.24.74.68 2379/2380 linux/x86_64 Up|UI /tidb/tidb-data/pd-2379 /tidb/tidb-deploy/pd-2379
172.24.74.69:2379 pd 172.24.74.69 2379/2380 linux/x86_64 Up /tidb/tidb-data/pd-2379 /tidb/tidb-deploy/pd-2379
172.24.74.71:2379 pd 172.24.74.71 2379/2380 linux/x86_64 Up /tidb/tidb-data/pd-2379 /tidb/tidb-deploy/pd-2379
172.24.74.67:9090 prometheus 172.24.74.67 9090 linux/x86_64 Up /tidb/tidb-data/prometheus-9090 /tidb/tidb-deploy/prometheus-9090
172.24.74.67:4000 tidb 172.24.74.67 4000/10080 linux/x86_64 Up - /tidb/tidb-deploy/tidb-4000
172.24.74.68:4000 tidb 172.24.74.68 4000/10080 linux/x86_64 Up - /tidb/tidb-deploy/tidb-4000
172.24.74.69:4000 tidb 172.24.74.69 4000/10080 linux/x86_64 Up - /tidb/tidb-deploy/tidb-4000
172.24.74.71:4000 tidb 172.24.74.71 4000/10080 linux/x86_64 Up - /tidb/tidb-deploy/tidb-4000
172.24.74.71:9000 tiflash 172.24.74.71 9000/8123/3930/20170/20292/8234 linux/x86_64 Down /tidb/tidb-data/tiflash-9000 /tidb/tidb-deploy/tiflash-9000
172.24.74.67:20160 tikv 172.24.74.67 20160/20180 linux/x86_64 Up /tidb/tidb-data/tikv-20160 /tidb/tidb-deploy/tikv-20160
172.24.74.68:20160 tikv 172.24.74.68 20160/20180 linux/x86_64 Up /tidb/tidb-data/tikv-20160 /tidb/tidb-deploy/tikv-20160
172.24.74.69:20160 tikv 172.24.74.69 20160/20180 linux/x86_64 Up /tidb/tidb-data/tikv-20160 /tidb/tidb-deploy/tikv-20160
172.24.74.71:20160 tikv 172.24.74.71 20160/20180 linux/x86_64 Disconnected /tidb/tidb-data/tikv-20160 /tidb/tidb-deploy/tikv-20160
Total nodes: 17
例如本次要缩容ticdc节点,获取到的id就是 172.24.74.71:8300
tiup cluster scale-in tidb-test --node 172.24.74.71:8300
tiup cluster display tidb-test
缩容tiflash节点
alter table test.yyh set tiflash replica 0;
tiflash的同步需要手动指定,所以大部分情况只会同步需要的部分表,同步方法详见tiflash的部署
本次以test.yyh为例
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA ='test'and TABLE_NAME ='yyh'
tiup cluster display tidb-test
得到id后通过id执行缩容
tiup cluster scale-in tidb-test --node 172.24.74.69:9000
tiup cluster display tidb-test
升级TiDB集群(在线升级)
注意:
升级后版本无法回退,请慎重升级!
注意:
升级过程会对集群性能造成影响,请在最闲时操作!
注意:
在升级的过程中不要执行 DDL 请求,否则可能会出现行为未定义的问题。
tiup update --self
tiup --version
tiup update cluster
tiup cluster --version
tiup cluster edit-config tidb-test
没有改过默认参数则不需要调整,可跳过本步骤
如4.0升级到5.0,有些自己设置的参数可能会有部分参数不支持新版本,详见 官方文档
tiup cluster check tidb-test --cluster
如果全部正常将得到
All regions are healthy.
的结果
如有问题请先修复后再进行下一步操作
可通过
tiup list tidb
来查询可用版本
tiup cluster upgrade tidb-test v5.1.0
tiup cluster display tidb-test
清理TiDB集群(危险)
本步骤为高风险操作,需慎重
已开始运行的生产环境严禁使用
- 清理数据
tiup cluster clean tidb-tet --data
- 清理日志
tiup cluster clean tidb-tet --log
- 全部清理
tiup cluster clean tidb-tet --all
销毁TiDB集群(危险)
本步骤为高风险操作,需慎重
已开始运行的生产环境严禁使用
tiup cluster destroy tidb-test