TiDB:1.安装和简单使用

简介

TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。

特性

高度兼容 MySQL
    大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。

水平弹性扩展
    通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。

分布式事务
    TiDB 100% 支持标准的 ACID 事务。

真正金融级高可用
    相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入。

一站式 HTAP 解决方案
    TiDB 作为典型的 OLTP 行存数据库,同时兼具强大的 OLAP 性能,配合 TiSpark,可提供一站式 HTAP 解决方案,一份存储同时处理 OLTP & OLAP,无需传统繁琐的 ETL 过程。

云原生 SQL 数据库
    TiDB 是为云而设计的数据库,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。

部署方式

TiDB 可以部署在本地和云平台上,支持公有云、私有云和混合云。你可以根据实际场景或需求,选择相应的方式来部署 TiDB 集群:
    使用 Ansible 部署:如果用于生产环境,须使用 Ansible 部署 TiDB 集群。
    使用 Ansible 离线部署:如果部署环境无法访问网络,可使用 Ansible 进行离线部署。
    使用 Docker Compose 部署:如果你只是想测试 TiDB、体验 TiDB 的特性,或者用于开发环境,可以使用 Docker Compose 在本地快速部署 TiDB     集群。该部署方式不适用于生产环境。
    使用 Docker 部署:你可以使用 Docker 部署 TiDB 集群,但该部署方式不适用于生产环境。

第零步:软硬件环境要求

1.TiDB-Ansible简介

Ansible 是一款自动化运维工具,TiDB-Ansible 是 PingCAP 基于 Ansible playbook 功能编写的集群部署工具。

本部署工具可以通过配置文件设置集群拓扑,完成以下各项运维工作:

初始化操作系统参数
部署 TiDB 集群(包括 PD、TiDB、TiKV 等组件和监控组件)
启动集群
关闭集群
变更组件配置
集群扩容缩容
升级组件版本
集群开启 binlog
清除集群数据
销毁集群

2.生产环境推荐配置

组件  CPU     内存  硬盘类型    网络                  实例数量(最低要求)
TiDB    16核+    32 GB+  SAS         万兆网卡(2块最佳)      2
PD      4核+ 8 GB+   SSD         万兆网卡(2块最佳)      3
TiKV    16核+    32 GB+  SSD         万兆网卡(2块最佳)      3
监控  8核+ 16 GB+  SAS         千兆网卡                1

    生产环境中的 TiDB 和 PD 可以部署和运行在同服务器上,如对性能和可靠性有更高的要求,应尽可能分开部署。
    生产环境强烈推荐使用更高的配置。
    TiKV 硬盘大小配置建议 PCI-E SSD 不超过2TB,普通 SSD 不超过1.5TB。

3.网络要求

TiDB 作为开源分布式 NewSQL 数据库,其正常运行需要网络环境提供如下的网络端口配置要求,管理员可根据实际环境中 TiDB 组件部署的方案,在网络侧和主机侧开放相关端口:

组件          默认端口    说明
TiDB            4000        应用及 DBA 工具访问通信端口
TiDB            10080       TiDB 状态信息上报通信端口
TiKV            20160       TiKV 通信端口
PD              2379        提供 TiDB 和 PD 通信端口
PD              2380        PD 集群节点间通信端口
Pump            8250        Pump 通信端口
Drainer         8249        Drainer 通信端口
Prometheus      9090        Prometheus 服务通信端口
Pushgateway     9091        TiDB,TiKV,PD 监控聚合和上报端口
Node_exporter   9100        TiDB 集群每个节点的系统信息上报通信端口
Blackbox_exporter   9115    Blackbox_exporter 通信端口,用于 TiDB 集群端口监控
Grafana         3000        Web 监控服务对外服务和客户端(浏览器)访问端口
Grafana         8686        grafana_collector 通信端口,用于将 Dashboard 导出为 PDF 格式
Kafka_exporter  9308        Kafka_exporter 通信端口,用于监控 binlog kafka 集群

4.准备服务器

1.部署目标机器若干

注意:使用 Ansible 方式部署时,TiKV 及 PD 节点数据目录所在磁盘请使用 SSD 磁盘,否则无法通过检测。

建议 4 台及以上,TiKV 至少 3 实例,且与 TiDB、PD 模块不位于同一主机,详见部署建议
推荐安装 CentOS 7.3 及以上版本 Linux 操作系统,x86_64 架构 (amd64)
机器之间内网互通

2.部署中控机一台:

中控机可以是部署目标机器中的某一台
推荐安装 CentOS 7.3 及以上版本 Linux 操作系统(默认包含 Python 2.7)
该机器需开放外网访问,用于下载 TiDB 及相关软件安装包

第一步:中控机准备

1.安装依赖包

yum -y install epel-release git curl sshpass python2-pip

2.创建 tidb 用户,并生成 ssh key

useradd -m -d /home/tidb tidb
echo "xiaoliu" | passwd tidb --stdin > /dev/null 2>&1

3.配置 tidb 用户 sudo 免密码,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾即可。

echo 'tidb ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

4.切换到 tidb 用户下并生成 ssh key

su - tidb
ssh-keygen -t rsa

5.下载 TiDB-Ansible

请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不要下载到 /root 下,否则会遇到权限问题。

tag=v2.1.14
git clone -b $tag https://github.com/pingcap/tidb-ansible.git

6.在中控机器上安装 Ansible 及其依赖

以 tidb 用户登录中控机,请务必按以下方式通过 pip 安装 Ansible 及其相关依赖的指定版本,否则会有兼容问题。

安装完成后,可通过 ansible --version 查看 Ansible 版本。目前 release-2.0、release-2.1 及 master 版本兼容 Ansible 2.4 及 Ansible 2.5 版本,Ansible 及相关依赖版本记录在 tidb-ansible/requirements.txt 文件中。

su - tidb
cd /home/tidb/tidb-ansible
sudo pip install -r ./requirements.txt
ansible --version

7.配置 ssh 互信机 sudo 规则

## 以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下。
vim hosts.ini

## 执行以下命令,按提示输入部署目标机器 root 用户密码。
## 该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。
ansible-playbook -i hosts.ini create_users.yml -u root -k

8.在目标机器上安装 NTP 服务

该步骤将在部署目标机器上使用系统自带软件源联网安装并启动 NTP 服务,服务使用安装包默认的 NTP server 列表,见配置文件 /etc/ntp.conf 中 server 参数,如果使用默认的 NTP server,你的机器需要连接外网。 为了让 NTP 尽快开始同步,启动 NTP 服务前,系统会 ntpdate hosts.ini 文件中的 ntp_server 一次,默认为 pool.ntp.org,也可替换为你的 NTP server。

## 以 tidb 用户登录中控机,执行以下命令:
cd /home/tidb/tidb-ansible
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b

第二步:部署目标机准备

1.在部署目标机器上配置 CPUfreq 调节器模式

详见:https://www.pingcap.com/docs-cn/v3.0/how-to/deploy/orchestrated/ansible/

2.为目标机添加 ext4 文件系统并设置挂载参数

1.为服务器添加硬盘并格式化

2.创建分区表

parted -s -a optimal /dev/sdb mklabel gpt -- mkpart primary ext4 1 -1

3.格式化分区为 ext4 个热乎

mkfs.ext4 /dev/sdb1

4.查看磁盘分区 UUID 并记录

lsblk -f

5.编辑 /etc/fstab 文件,添加 nodelalloc 挂载参数

vim /etc/fstab
UUID=e5aa534d-e3dc-4981-a4f2-8a73bb48ef59 /data ext4 defaults,nodelalloc,noatime 0 2

6.挂载数据盘

mkdir /data
mount -a

7.执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc 表示生效:

mount -t ext4

    [10:20:49 root@tidb-01 ~ $]mount -t ext4
    /dev/sdb1 on /data type ext4 (rw,noatime,nodelalloc,data=ordered)

第三步:分配机器资源

1.以 tidb 用户登录中控机并编辑 inventory.ini

https://www.pingcap.com/docs-cn/v3.0/how-to/deploy/orchestrated/ansible/

2.部署目录调整

部署目录通过 deploy_dir 变量控制,默认全局变量已设置为 /home/tidb/deploy,对所有服务生效

第四步:部署任务

ansible-playbook 执行 Playbook 时默认并发为 5,部署目标机器较多时可添加 -f 参数指定并发,如 ansible-playbook deploy.yml -f 10

1.确认配置

## 确认ansible_user = tidb
cat /home/tidb/tidb-ansible/inventory.ini | grep ansible_user

## 执行以下命令,如果返回 tidb 表示 ssh 互信配置成功
ansible -i inventory.ini all -m shell -a 'whoami'

##执行以下命令如果所有 server 返回 root 表示 tidb 用户 sudo 免密码配置成功。
ansible -i inventory.ini all -m shell -a 'whoami' -b

2.执行 local_prepare.yml playbook,联网下载 TiDB binary 到中控机

ansible-playbook local_prepare.yml

3.初始化系统环境,修改内核参数

ansible-playbook bootstrap.yml

4.部署 TiDB 集群软件

ansible-playbook deploy.yml

    注意:Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖 fontconfig 包和英文字体。如需使用该功能,登录 grafana_servers 机器,用以下命令安装:
        sudo yum install fontconfig open-sans-fonts

5.启动 TiDB 集群

ansible-playbook start.yml

第五步:测试集群

测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口

## 使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口
## 默认密码为空
mysql -u root -h 172.16.10.1 -P 4000 -p
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容