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集群部署]](https://img.it610.com/image/info8/72f33740eaa044479fe01f0982b3a394.png)
文章图片
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 |
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集群部署]](https://img.it610.com/image/info8/e51a43d47ae4472791cc60e6603b4e1f.jpg)
文章图片
安装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集群部署]](https://img.it610.com/image/info8/f94ee7fdb22a48799a6f7128b0562888.png)
文章图片
单节点组成集群 一、环境准备 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 |
组件 | 端口 | 协议 | 描述 |
---|---|---|---|
TiDB | 4000 | TCP | 应用程序的通信端口和DBA工具 |
TiDB | 10080 | TCP | 通信端口TiDB报告状态 |
TiKV | 20160 | TCP | TiKV通信端口 |
Pd | 2379 | TCP | 之间的通信端口TiDB和PD |
Pd | 2380 | TCP | 集群中的节点间通信端口PD |
[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集群部署]](https://img.it610.com/image/info8/00376db6b8a84f089f2cf92d4a54e801.png)
文章图片
.Config配置文件参数详解:
https://github.com/pingcap/tidb/blob/release-3.0/config/config.toml.example
推荐阅读
- Beego打包部署到Linux
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- Spring|Spring Boot部署到Resin遇到的问题
- 2020-07-29《吴军·阅读与写作50讲》24实战才能转化效能
- Python实战计划学习笔记(9)为大规模爬取准备
- 韵达基于云原生的业务中台建设 | 实战派
- 如何在阿里云linux上部署java项目
- 【V课会】第3季-30天小学思维导图实战营