1 TIDB 简介
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
TIDB 的五大核心特性:
一键水平扩容或者缩容
得益于 TiDB 存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。
金融级高可用
数据采用多副本存储,数据副本通过 Multi-Raft 协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略满足不同容灾级别的要求。
实时 HTAP
提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
云原生的分布式数据库
专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。
兼容 MySQL 5.7 协议和 MySQL 生态
兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。
2 环境说明
本期文章主要记录TIDB的部署运维,本篇幅主要是裸金属主机TIUP部署方式,下篇将进行k8s TiDB Operator的部署方式。
主机列表
IP | 主机名 | 配置 | 角色 |
---|---|---|---|
172.16.5.105 | tidb-01 | centos 7.9 4c + 8G + 80G(sys) + 500G(data) | pd_servers、tidb_servers、monitoring_servers、grafana_servers、alertmanager_servers |
172.16.5.106 | tidb-02 | 4c + 8G + 80G(sys) + 500G(data) | pd_servers、tidb_servers |
172.16.5.107 | tidb-03 | 4c + 8G + 80G(sys) + 500G(data) | pd_servers、tidb_servers |
172.16.5.108 | tidb-04 | 16c + 32G + 80G(sys) + 500G(data) | tikv_servers、cdc_servers |
172.16.5.109 | tidb-05 | 16c + 32G + 80G(sys) + 500G(data) | tikv_servers、cdc_servers |
172.16.5.110 | tidb-06 | 16c + 32G + 80G(sys) + 500G(data) | tikv_servers、cdc_servers |
172.16.5.111 | tidb-07 | 32c + 64G + 80G(sys) + 500G(data) | tiflash_servers |
TIDB的软硬件环境需求可以查看官方文档,这里参考的是开发及测试环境配置,如果是生产环境,配置能高就高一点。
3 系统初始化
3.1 数据盘格式化
建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。
1.查看数据盘
#fdisk -l
Disk dev/vdb: 536.9 GB
2.创建分区
#parted -s -a optimal /dev/vdb mklabel gpt -- mkpart primary ext4 1 -1
3.格式化文件系统
#mkfs.ext4 /dev/vdb1
4.查看数据盘分区 UUID
#lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
vda
└─vda1 ext4 c98d22a0-1a27-418e-91aa-d6181612a8be /
vdb
└─vdb1 ext4 24b4edf5-ad74-4f43-ac79-31fec6539b0f
复制
5.编辑 /etc/fstab 文件,添加 nodelalloc 挂载参数
#vi /etc/fstab
UUID=24b4edf5-ad74-4f43-ac79-31fec6539b0f /data1 ext4 defaults,nodelalloc,noatime 0 2
复制
6.挂载数据盘
#mkdir /data1 && mount -a
7.执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc,则表示已生效
#mount -t ext4
/dev/vdb1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
复制
由于使用的是阿里云ECS主机,无需关闭swap、防火墙及安装NTP服务。
3.2 系统参数调整
#关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo 'if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi' >> /etc/rc.d/rc.local
复制
#系统参数调整
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
复制
3.3 手动配置 SSH 互信及 sudo 免密码
1.以 root 用户依次登录到部署目标机器创建 tidb 用户并设置登录密码
useradd tidb && passwd tidb
2.执行以下命令,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾,即配置好 sudo 免密码
#visudo
tidb ALL=(ALL) NOPASSWD: ALL
复制
3.免密配置
TIUP主机tidb用户操作,这里使用172.16.5.105主机作为后续TIUP的部署主机
#su - tidb
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.5.105
ssh-copy-id -i ~/.ssh/id_rsa.pub 其余主机XXX
复制
3.4 安装 numactl 工具
NUMA 绑核是用来隔离 CPU 资源的一种方法,适合高配置物理机环境部署多实例使用。
通过 tiup cluster deploy 完成部署操作,就可以通过 exec 命令来进行集群级别管理工作。
yum -y install numactl
3.5 启动irqbalance服务
systemctl start irqbalance
systemctl enable irqbalance
复制
3.6 创建数据文件路径
mkdir -p /data1/tidb-deploy /data1/tidb-data
4 TIUP部署
TIDB主机172.16.5.105
4.1 安装TIUP
#su - tidb
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
source .bash_profile
tiup cluster
tiup --binary cluster
复制
4.2 配置集群拓扑文件
#vi topology.yaml
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/data1/tidb-deploy"
data_dir: "/data1/tidb-data"
server_configs: {}
pd_servers:
- host: 172.16.5.105
- host: 172.16.5.106
- host: 172.16.5.107
tidb_servers:
- host: 172.16.5.105
- host: 172.16.5.106
- host: 172.16.5.107
tikv_servers:
- host: 172.16.5.108
- host: 172.16.5.109
- host: 172.16.5.110
cdc_servers:
- host: 172.16.5.108
- host: 172.16.5.109
- host: 172.16.5.110
tiflash_servers:
- host: 172.16.5.110
monitoring_servers:
- host: 172.16.5.105
grafana_servers:
- host: 172.16.5.105
alertmanager_servers:
- host: 172.16.5.105
复制
4.3 TIDB部署
1.检查和自动修复集群存在的潜在风险
tiup cluster check ./topology.yaml --user tidb
tiup cluster check ./topology.yaml --apply --user tidb
复制
2.deploy部署TIDB集群
tiup cluster deploy tidb-test v5.2.1 ./topology.yaml --user tidb
复制
日志结尾输出会有 Deployed cluster tidb-test
successfully 关键词,表示部署成功
3.查看集群情况:tiup cluster list
4.检查集群情况:tiup cluster display tidb-test
(默认集群名为tidb-test)
5.启动集群:tiup cluster start tidb-test
6.再次检查集群情况:tiup cluster display tidb-test
,正常的话应该都是UP状态
7.查看dashboard地址:tiup cluster display tidb-test --dashboard
本次环境的dashboard为http://172.16.5.107:2379/dashboard/,默认账户密码为root,无密码直接登录,为保证安全,需配置root密码
4.4 配置TIDB root密码
1.通过mysql客户端登录tidb
没有mysql客户端的可以安装,yum install mysql -y
#mysql -P 4000 -h172.16.5.105 -uroot -p
SET PASSWORD FOR 'root'@'%' = '123456'
复制
root密码就是123456
下期将研究k8s TiDB Operator的部署方式,欢迎关注转发~~
参考文献
https://docs.pingcap.com/zh/tidb/stable/overview