本文主要介绍tidb的基本安装(只安装pd\tikv\tidb等几个有限的组件,这个数据库我准备拿来测试作为zabbix数据库)
因为没有足够条件的硬件,使用虚拟机凑合一下
ip | 系统 | 内存 | 磁盘 | cpu |
---|---|---|---|---|
192.168.0.207 | centos7.7 | 50g | /data 350G ext4 | 16core |
192.168.0.216 | centos7.7 | 50g | /data 350G ext4 | 16core |
192.168.0.217 | centos7.7 | 50g | /data 350G ext4 | 16core |
(引自:https://asktug.com/t/topic/2561) tidb目前支持 EXT4 和 XFS 两种文件系统,EXT4 稳定性优势,XFS 性能优势。目前 EXT4 在社区还是生态都得到充分的最佳实践验证。 另外为什么对于单块的 SSD 盘 PCIE 支持不超 2TB,SATA 不支持超过 1.5TB,是因为经过大量的测试对比,超过这样的一个容量,TiKV Instance 底层采用的 RocksDB 的读写性能会因为磁盘容量大,导致响应有一定的衰减。
和MySql不同,TiDB是一个分布式的数据库而不是单个进程,所以整个TiDB是由以下角色组成: TiKV, PD, TiDB, TiSpark。每个角色都是部署在多台机器上的进程组成的集群。
TiKV负责数据的存储,对外而言,它就是一个提供key-value存储的引擎。但它存储的并不是离散的Key,而在一个范围内的Key,这个范围内的key-value是存储的基本单元,称为Region。
对不同的数据类型,存储的数据格式如下:
数据类型 | key | value |
---|---|---|
行记录 | 表ID+行ID | 行数据 |
唯一索引或主键 | 表ID+索引ID+索引值 | 行ID |
非唯一索引 | 表ID+索引ID+索引值+行ID | 空 |
而TiKV集群上的单节点上真正负责存储的是FaceBook开源的RocksDB引擎。但RocksDB自身并没有解决单点失效的问题,TiKV采用多副本的方式来解决,而实现则是在RocksDB之上封装一层支持Raft协议,以在多节点之间同步数据。仅对于同一个Region, 只有一个leader节点接收外部对其的读写,其他节点只是用来做备份(即不同机器上的同一个Region 组成一个 Raft group)。 所以对外部而言,TiKV可以认为是一个可以提供无限大容量的K-V存储服务(当磁盘空间不足时,可以比较方便地通过增加机器来拓容)。
PD全称是Placement Driver,是对整个TiDB集群管理进行管理的角色。它最重要的功能是存储数据的元数据,即Key和TiKV中节点的对应关系。此外,负责对集群进行调度和负载均衡Region迁移, Region Raft Leader迁移),以及提供全局唯一递增的事务ID。PD集群也是通过Raft协议保证数据安全,但只有一台机器(Leader)负责处理所有的操作。
TiDB角色负责对外交互(mysql协议),优化sql之后,向PD获取要读取的Key对应的TiKV节点信息,之后再向TiKV上的Region Raft Leader所在节点发起请求获取数据,再返回客户端。即TiDB是无状态的,不存储任何数据。可以通过Haproxy、LVS、Nginx反向代理等负载均衡组件将请求均衡的分配给多个TiDB实例。TiDB实例对SQL语句进行解析并生成分布式执行计划后,会将实际的数据请求下发到数据层(TiKV)。TiDB集群中各个节点相互独立,一个节点挂了不会影响其他节点。
HTAP结构:
TiFlash 是 TiDB 为完善 Realtime HTAP 形态引入的关键组件, TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复 制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。 TiKV 、 TiFlash 可按需部署在不同 的机器,解决 HTAP 资源隔离的问题。TiFlash是列式存储引擎,适合分析处理。
TiSpark是将Spark SQL 直接运行在 TIKV上 的OLAP解决方案。从数据集群的角度看,TiSprk+TIDB可以让用户无需进行脆弱和难以维护的etl,直接在同一平台进行事务和分析两种操作,简化了系统架构和运维。
软硬件环境需求及前置检查--官方文档:https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup
关闭swap,检查并配置ntp时间同步(过程省略)
关闭THP
[root@localhost ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@localhost ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
关闭selinux与防火墙(过程省略)
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
磁盘挂载参数配置
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 /data ext4 defaults,nodelalloc,noatime 0 2
[root@localhost ~]# mount -a
[root@localhost ~]# mount -t ext4
/dev/sdb1 on /data type ext4 (rw,noatime,nodelalloc,data=ordered)
磁盘调度策略修改
[root@localhost ~]# cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq
[root@localhost ~]# echo noop > /sys/block/sdb/queue/scheduler
[root@localhost ~]# cat /sys/block/sdb/queue/scheduler
[noop] deadline cfq
sysctl 修改
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
安装过程在207机器执行
[root@localhost ~]# useradd tidb && passwd tidb
[root@localhost ~]# su - tidb
#安装tiup管理工具
[tidb@localhost ~]$ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
===============================================
[tidb@localhost ~]$ source /home/tidb/.bash_profile
###升级工具
[tidb@localhost ~]$ tiup update --self && tiup update cluster
编辑部署文件
[tidb@localhost ~]$ cat topology.yaml
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/data/tidb-deploy"
data_dir: "/data/tidb-data"
monitored:
node_exporter_port: 29334
blackbox_exporter_port: 29345
pd_servers:
- host: 192.168.0.207
client_port: 14279
peer_port: 14289
- host: 192.168.0.216
client_port: 14279
peer_port: 14289
- host: 192.168.0.217
client_port: 14279
peer_port: 14289
tidb_servers:
- host: 192.168.0.207
port: 4643
status_port: 14583
- host: 192.168.0.216
port: 4643
status_port: 14583
- host: 192.168.0.217
port: 4643
status_port: 14583
tikv_servers:
- host: 192.168.0.207
port: 43641
status_port: 43644
- host: 192.168.0.216
port: 43641
status_port: 43644
- host: 192.168.0.217
port: 43641
status_port: 43644
monitoring_servers:
- host: 192.168.0.217
port: 19597
grafana_servers:
- host: 192.168.0.216
port: 13545
alertmanager_servers:
- host: 192.168.0.207
web_port: 9794
cluster_port: 9795
安装与启动:
[tidb@localhost ~]$ tiup cluster deploy tidb-zabbix v4.0.14 ./topology.yaml --user root -p
###这里使用root密码安装;tidb-zabbix 是集群名称;;v4.0.14是要安装的版本
###启动
[tidb@localhost ~]$ tiup cluster start tidb-zabbix
[tidb@localhost ~]$ tiup cluster display tidb-zabbix
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.5.5/tiup-cluster display tidb-zabbix
Cluster type: tidb
Cluster name: tidb-zabbix
Cluster version: v4.0.14
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.168.0.207:14279/dashboard
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.168.0.207:9794 alertmanager 192.168.0.207 9794/9795 linux/x86_64 Up /data/tidb-data/alertmanager-9794 /data/tidb-deploy/alertmanager-9794
192.168.0.216:13545 grafana 192.168.0.216 13545 linux/x86_64 Up - /data/tidb-deploy/grafana-13545
192.168.0.207:14279 pd 192.168.0.207 14279/14289 linux/x86_64 Up|UI /data/tidb-data/pd-14279 /data/tidb-deploy/pd-14279
192.168.0.216:14279 pd 192.168.0.216 14279/14289 linux/x86_64 Up|L /data/tidb-data/pd-14279 /data/tidb-deploy/pd-14279
192.168.0.217:14279 pd 192.168.0.217 14279/14289 linux/x86_64 Up /data/tidb-data/pd-14279 /data/tidb-deploy/pd-14279
192.168.0.217:19597 prometheus 192.168.0.217 19597 linux/x86_64 Up /data/tidb-data/prometheus-19597 /data/tidb-deploy/prometheus-19597
192.168.0.207:4643 tidb 192.168.0.207 4643/14583 linux/x86_64 Up - /data/tidb-deploy/tidb-4643
192.168.0.216:4643 tidb 192.168.0.216 4643/14583 linux/x86_64 Up - /data/tidb-deploy/tidb-4643
192.168.0.217:4643 tidb 192.168.0.217 4643/14583 linux/x86_64 Up - /data/tidb-deploy/tidb-4643
192.168.0.207:43641 tikv 192.168.0.207 43641/43644 linux/x86_64 Up /data/tidb-data/tikv-43641 /data/tidb-deploy/tikv-43641
192.168.0.216:43641 tikv 192.168.0.216 43641/43644 linux/x86_64 Up /data/tidb-data/tikv-43641 /data/tidb-deploy/tikv-43641
192.168.0.217:43641 tikv 192.168.0.217 43641/43644 linux/x86_64 Up /data/tidb-data/tikv-43641 /data/tidb-deploy/tikv-43641
访问地址: alertmanager: 192.168.0.207:9794
grafana: 192.168.0.216:13545 默认账号密码admin admin dashboard: http://192.168.0.207:14279/dashboard/#/signin 默认密码空(dashboard 的登录用户和口令即为 TiDB 数据库 root 用户和口令,你可以直接在数据库里修改 root 密码)登陆并设置密码
[root@localhost ~]# yum install mysql -y
[root@localhost ~]# mysql -uroot -h127.0.0.1 -P 4643
MySQL [(none)]> USE mysql;
MySQL [mysql]> set password for 'root'@'%' = 'tidb@pwd';
MySQL [mysql]> flush privileges;
MySQL [mysql]> exit
[root@localhost ~]# mysql -uroot -h127.0.0.1 -P 4643 -p
有的时候我需要重启某一个组件,而不重启整个集群
tiup cluster restart {cluster-name} -N {tidb-ip:port}
###停止集群 tiup cluster stop {集群名称}
[tidb@esbprddb ~]$ tiup cluster stop tidb-zabbix
### 删除销毁集群(不会保留数据)tiup cluster destroy {集群名称}
[tidb@esbprddb ~]$ tiup cluster destroy tidb-zabbix