Tidb实战部署[单节点部署][集群部署][Ansible集群部署]

TIDB简介

TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。
官方链接:https://pingcap.com/docs-cn/v3.0/overview/
单节点部署
不建议单节点,开发环境使用.
一、下载官方源
[root@iZ31lo2i2a80qcZ /]# cd tmp/ [root@iZ31lo2i2a80qcZ tmp]# wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz [root@iZ31lo2i2a80qcZ tmp]# wget http://download.pingcap.org/tidb-latest-linux-amd64.sha256 ///验证文件完整性/ [root@iZ31lo2i2a80qcZ tmp]# sha256sum -c tidb-latest-linux-amd64.sha256 tidb-latest-linux-amd64.tar.gz: OK#返回ok说明文件没问题 [root@iZ31lo2i2a80qcZ tmp]# tar -zxvf tidb-latest-linux-amd64.tar.gz [root@iZ31lo2i2a80qcZ tmp]# mv tidb-latest-linux-amd64/tidb-server [root@iZ31lo2i2a80qcZ /]# cd tidb-server/

二、分别启动tidb、pd、tikv服务
[root@iZ31la80qcZ tidb-server]# ./bin/pd-server --data-dir=/data/pd --log-file=/data/logs/pd.log & [root@iZ31la80qcZ tidb-server]# ps -ef|grep pd-serverroot11900 118120 14:12 pts/000:00:00 ./bin/pd-server --data-dir=/data/pd --log-file=/data/logs/pd.log root11916 118120 14:13 pts/000:00:00 grep --color=auto pd-server[root@iZ31lo2i2a80qcZ tidb-server]# ./bin/tikv-server --pd="127.0.0.1:2379" --data-dir=/data/tikv --log-file=/data/logs/tikv.log & [root@iZ31lo2i2a80qcZ tidb-server]#ps -ef|grep tikv-serverroot11920 11812 10 14:14 pts/000:00:02 ./bin/tikv-server --pd=127.0.0.1:2379 --data-dir=/data/tikv --log-file=/data/logs/tikv.log root12021 118120 14:14 pts/000:00:00 grep --color=auto tikv-server[root@iZ31lo2i2a80qcZ tidb-server]#./bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=/data/logs/tidb.log & [root@iZ31lo2i2a80qcZ tidb-server]# ps -ef|grep tidb-serverroot12025 118121 14:15 pts/000:00:00 ./bin/tidb-server --store=tikv --path=127.0.0.1:2379 --log-file=/data/logs/tidb.log root12063 118120 14:16 pts/000:00:00 grep --color=auto tidb-server

三、修改登录密码,开启远程连接权限务
[root@iZ31lo2i2a80qcZ tidb-server]# mysql -h 127.0.0.1 -P 4000 -u root

Welcome to the MySQL monitor.Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.7.25-TiDB-v4.0.0-alpha-1258-g8e88825f5 TiDB Server (Apache License 2.0), MySQL 5.7 compatible Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help; ' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.03 sec) mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; Query OK, 0 rows affected (0.02 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)

踩过的坑:单节点在数据库无连接时会自动关闭
Tidb实战部署[单节点部署][集群部署][Ansible集群部署]
文章图片

Ansible集群部署 一、环境准备
Host Hostname Tidb Pd Tikv Grafana CPU RAM
172.18.12.209 tidb-pd 4 4
172.18.12.210 tikv-1 2 2
172.18.12.211 tikv-2 2 2
172.18.12.212 Tikv-3 2 2
1、不同的机器需要在同一个内网中
2、主机的HostName不能为相同
[root@localhost ~]# hostnamectl set-hostname tidb-pd [root@localhost ~]# vi /etc/hosts127.0.0.1localhost tidb-pd localhost4 localhost4.localdomain4 ::1localhost localhost.localdomain localhost6 localhost6.localdomain6[root@localhost ~]# reboot [root@localhost ~]# hostnamectl set-hostname tidb-pd [root@localhost ~]# vi /etc/hosts127.0.0.1localhost tikv-1 localhost4 localhost4.localdomain4 ::1localhost localhost.localdomain localhost6 localhost6.localdomain6[root@localhost ~]# reboot [root@localhost ~]# hostnamectl set-hostname tidb-pd [root@localhost ~]# vi /etc/hosts127.0.0.1localhost tikv-2 localhost4 localhost4.localdomain4 ::1localhost localhost.localdomain localhost6 localhost6.[root@localhost ~]# reboot [root@localhost ~]# hostnamectl set-hostname tidb-pd [root@localhost ~]# vi /etc/hosts127.0.0.1localhost tikv-3 localhost4 localhost4.localdomain4 ::1localhost localhost.localdomain localhost6 localhost6.[root@localhost ~]# reboot

3、所有机器的SSH登录密码应为一致
4、分别挂载数据盘
创建分区表:
[root@localhost ~]# fdisk -l [root@localhost ~]# parted -s -a optimal /dev/sdb mklabel gpt -- mkpart primary ext4 1 -1 [root@localhost ~]# mkfs.ext4 /dev/sdb [root@localhost ~]# lsblk -f [root@localhost ~]# vi /etc/fstab UUID=25fbd496-b5bd-480f-8c2a-de4044f91074 /data1 ext4 defaults,nodelalloc,noatime 0 2 [root@localhost ~]# mkdir /data1 && mount -a [root@localhost ~]# mount -t ext4 /dev/sdb on /data1 type ext4 (rw,noatime,seclabel,nodelalloc,data=https://www.it610.com/article/ordered)

重复上述步骤分别挂载其他主机数据盘并格式化 三、Ansible部署tidb集群 1、在中控机上安装系统依赖包
[root@tidb-pd ~]# yum -y install epel-release git curl sshpass [root@tidb-pd ~]# yum -y install python2-pip [root@tidb-pd tidb-ansible]#pip install --upgrade pip

2、在中控机上创建 tidb 用户,并生成 SSH key
[root@tidb-pd ~]# useradd -m -d /home/tidb tidb [root@tidb-pd ~]# passwd tidb [root@tidb-pd ~]# visudo tidb ALL=(ALL) NOPASSWD: ALL [root@tidb-pd ~]# su - tidb [tidb@tidb-pd ~]$ ssh-keygen -t rsa

3、在中控机器上下载 TiDB Ansible
[tidb@tidb-pd ~]$ git clone -b v3.0.2 https://github.com/pingcap/tidb-ansible.git

4、在中控机上安装Ansible及依赖
[tidb@tidb-pd ~]$cd /home/tidb/tidb-ansible [tidb@tidb-pd tidb-ansible]$ sudo pip install -r ./requirements.txt

5、在中控机上配置部署机器 SSH 互信及 sudo 规则
[tidb@tidb-pd tidb-ansible]$ cd /home/tidb/tidb-ansible [tidb@tidb-pd tidb-ansible]$ vi hosts.ini [servers] 172.18.12.209 172.18.12.210 172.18.12.211 172.18.12.212[all:vars] username = tidb ntp_server = pool.ntp.org [tidb@tidb-pd tidb-ansible]$ ansible-playbook -i hosts.ini create_users.yml -u root -k

6、在部署目标机器上安装 NTP 服务
[tidb@tidb-pd tidb-ansible]$ cd /home/tidb/tidb-ansible [tidb@tidb-pd tidb-ansible]$ ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b

7、编辑 inventory.ini 文件,分配机器资源
以 tidb 用户登录中控机,编辑 /home/tidb/tidb-ansible/inventory.ini 文件为 TiDB 集群分配机器资源。一个标准的 TiDB 集群需要 6 台机器:2 个 TiDB 实例,3 个 PD 实例,3 个 TiKV 实例。
  • 至少需部署 3 个 TiKV 实例。
  • 不要将 TiKV 实例与 TiDB 或 PD 实例混合部署在同一台机器上。
  • 将第一台 TiDB 机器同时用作监控机。
[tidb@tidb-pd tidb-ansible]$ vim inventory.ini ## TiDB Cluster Part [tidb_servers] 172.18.12.209[tikv_servers] 172.18.12.210 172.18.12.211 172.18.12.212[pd_servers] 172.18.12.209[spark_master][spark_slaves][lightning_server][importer_server]## Monitoring Part # prometheus and pushgateway servers [monitoring_servers] 172.18.12.209[grafana_servers] 172.18.12.209# node_exporter and blackbox_exporter servers [monitored_servers] 172.18.12.209 172.18.12.210 172.18.12.211 172.18.12.212

8、调整 inventory.ini 文件中的变量
【Tidb实战部署[单节点部署][集群部署][Ansible集群部署]】部署目录通过 deploy_dir 变量控制,默认全局变量已设置为 /home/tidb/deploy,对所有服务生效。如数据盘挂载目录为 /data1,可设置为 /data1/deploy,样例如下:
## Global variables [all:vars] deploy_dir = /data1/deploy

9、启动集群
执行以下命令,如果所有 server 均返回 tidb,表示 SSH 互信配置成功: [tidb@tidb-pd tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami' 172.18.12.212 | CHANGED | rc=0 >> tidb172.18.12.211 | CHANGED | rc=0 >> tidb172.18.12.210 | CHANGED | rc=0 >> tidb172.18.12.209 | CHANGED | rc=0 >> Tidb执行以下命令,如果所有 server 均返回 root,表示 tidb 用户 sudo 免密码配置成功。 [tidb@tidb-pd tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami' -b 172.18.12.209 | CHANGED | rc=0 >> root172.18.12.211 | CHANGED | rc=0 >> root172.18.12.210 | CHANGED | rc=0 >> root172.18.12.212 | CHANGED | rc=0 >> Root执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机。 [tidb@tidb-pd tidb-ansible]$ ansible-playbook local_prepare.yml初始化系统环境,修改内核参数。 这里由于我的配置不够:cpu核心数(我的为单核心,官方需要8核心)。磁盘空间太小,内存太小等等会检测不通过,所以需要修改bootstrap.yml文件把检测任务注释掉,真正的生产环境中最痛通过所有的检测,否则会有性能问题。 - name: check system hosts: all any_errors_fatal: true roles: - check_system_static #- { role: check_system_optional, when: not dev_mode|default(false) }- name: tikv_servers machine benchmark hosts: tikv_servers gather_facts: false roles: #- { role: machine_benchmark, when: not dev_mode|default(false) } [tidb@tidb-pd tidb-ansible]$ ansible-playbook bootstrap.yml部署Tidb集群软件 [tidb@tidb-pd tidb-ansible]$ ansible-playbook deploy.yml启动Tidb集群 [tidb@tidb-pd tidb-ansible]$ ansible-playbook start.yml

10、测试集群
Tidb实战部署[单节点部署][集群部署][Ansible集群部署]
文章图片

安装mysql客户端
安装源 [root@tidb-pd tidb-ansible]# rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm可以通过yum搜索 [root@tidb-pd tidb-ansible]# yum search mysql-community 安装客户端 [root@tidb-pd tidb-ansible]# yum -y install mysql-community-client.x86_64

修改tidb登录密码
[root@tidb-pd tidb-ansible]# mysql -u root -h 127.0.0.1 -P 4000 mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456'; mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; mysql> flush privileges;

Tidb实战部署[单节点部署][集群部署][Ansible集群部署]
文章图片

单节点组成集群 一、环境准备 1、硬件需求
Host Hostname Tidb Pd Tikv Grafana CPU RAM
172.18.12.209 tidb-pd 4 4
172.18.12.210 tikv-1 2 2
172.18.12.211 tikv-2 2 2
172.18.12.212 Tikv-3 2 2
2、端口需求
组件 端口 协议 描述
TiDB 4000 TCP 应用程序的通信端口和DBA工具
TiDB 10080 TCP 通信端口TiDB报告状态
TiKV 20160 TCP TiKV通信端口
Pd 2379 TCP 之间的通信端口TiDB和PD
Pd 2380 TCP 集群中的节点间通信端口PD
3、关闭系统交换分区
[root@localhost /]# fdisk -l 磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000a8b94设备 BootStartEndBlocksIdSystem /dev/sda1*20482099199104857683Linux /dev/sda2209920041943039199219208eLinux LVM磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 [root@localhost /]# swapoff /dev/mapper/centos-swap [root@localhost /]# vim /etc/fstab #注释掉这一句 #/dev/mapper/centos-swap swapswapdefaults0 0 [root@localhost /]# free -m totalusedfreesharedbuff/cacheavailable Mem:103812119683114869851 Swap:000 [root@localhost /]# vim /etc/sysctl.conf 新增一句:vm.swappiness=0 [root@localhost /]# sysctl -p

4、修改文件打开最大数
[root@localhost /]# ulimit -SHn 1000000 [root@localhost /]# vim /etc/security/limits.conf 新增:# BEGIN ANSIBLE MANAGED BLOCK *softnofile1000000 *hardnofile1000000 *softstack10240 [root@localhost /]# vim /etc/sysctl.conf 新增: net.core.somaxconn=32768 net.ipv4.tcp_syncookies=0 fs.file-max=1000000 [root@localhost /]# sysctl -p

5、格式化数据盘为ext4格式
[root@localhost /]# parted -s -a optimal /dev/sdb mklabel gpt -- mkpart primary ext4 1 -1 [root@localhost /]# mkfs.ext4 /dev/sdb [root@localhost /]# lsblk -f [root@localhost /]# vim /etc/fstab 增加: UUID=b118c778-114c-4de6-9304-081f436739e6/data1 ext4 defaults,nodelalloc,noatime 0 2 [root@localhost /]# mkdir /data1 && mount -a [root@localhost /]# mount -t ext4 /dev/sdb on /data1 type ext4 (rw,noatime,seclabel,nodelalloc,data=https://www.it610.com/article/ordered)#挂载参数中没有nodelalloc就有问题 [root@localhost /]# df -h 文件系统容量已用可用 已用% 挂载点 /dev/mapper/centos-root17G1.2G16G7% / devtmpfs5.1G05.1G0% /dev tmpfs5.1G05.1G0% /dev/shm tmpfs5.1G12M5.1G1% /run tmpfs5.1G05.1G0% /sys/fs/cgroup /dev/sda11014M146M869M15% /boot tmpfs1.1G01.1G0% /run/user/0 /dev/sdb50G53M47G1% /data1

二、部署服务
[root@localhost]# wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz [root@localhost]# wget http://download.pingcap.org/tidb-latest-linux-amd64.sha256 ///验证文件完整性/ [root@localhost]# sha256sum -c tidb-latest-linux-amd64.sha256 tidb-latest-linux-amd64.tar.gz: OK#返回ok说明文件没问题 [root@localhost]# tar -zxvf tidb-latest-linux-amd64.tar.gz [root@localhost tidb]# mkdir config data log [root@localhost tidb]# cd config/ [root@localhost config]# vim config.toml

# TiDB Configuration. # TiDB server port. port = 3306

[root@localhost config]# cd .. [root@localhost tidb]# vim pd_start.sh

./bin/pd-server --name=pd1 \ --data-dir=/data1/tidb/data/pd \ --client-urls="http://172.18.12.233:2379" \ --peer-urls="http://172.18.12.233:2380" \ --initial-cluster="pd1=http://172.18.12.233:2380" \ -L "info" \ --log-file=/data1/tidb/log/pd.log &

[root@localhost tidb]# vim tidb_start.sh

./bin/tidb-server--store=tikv \ --path="172.18.12.233:2379" \ --config="config/config.toml" \ --log-file=/data1/tidb/log/tidb.log &

[root@localhost tidb]# systemctl disable firewalld [root@localhost tidb]# systemctl stop firewalld #正式环境请只开放需要用到的端口

[root@localhost tidb]# chmod +x pd_start.sh tidb_start.sh

###################Tikv三台主机分别配置######################### [root@localhost tikv1]# vim tikv_start.sh

./bin/tikv-server --pd="172.18.12.233:2379" \ --addr="172.18.12.234:20160" \ --data-dir=/data1/tikv1/data/tikv \ --log-file=/data1/tikv1/log/tikv.log &

[root@localhost tidb]# chmod +xtikv_start.sh [root@localhost tikv2]# vim tikv_start.sh

./bin/tikv-server --pd="172.18.12.233:2379" \ --addr="172.18.12.235:20160" \ --data-dir=/data1/tikv1/data/tikv \ --log-file=/data1/tikv1/log/tikv.log &

[root@localhost tidb]# chmod +xtikv_start.sh [root@localhost tikv3]# vim tikv_start.sh

./bin/tikv-server --pd="172.18.12.233:2379" \ --addr="172.18.12.236:20160" \ --data-dir=/data1/tikv1/data/tikv \ --log-file=/data1/tikv1/log/tikv.log &

[root@localhost tidb]# chmod +xtikv_start.sh

三、安装mysql客户端测试集群务
安装源 [root@localhost tidb]# rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm可以通过yum搜索 [root@localhost tidb]# yum search mysql-community 安装客户端 [root@localhost tidb]# yum -y install mysql-community-client.x86_64

修改tidb登录密码
[root@localhost tidb]# mysql -u root -h 127.0.0.1 -P 4000

mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456'; mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; mysql> flush privileges;

Tidb实战部署[单节点部署][集群部署][Ansible集群部署]
文章图片

.Config配置文件参数详解:
https://github.com/pingcap/tidb/blob/release-3.0/config/config.toml.example

    推荐阅读