others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

tidb 4.0 集群安装

访问量:1579 创建时间:2021-08-31

本文主要介绍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 的读写性能会因为磁盘容量大,导致响应有一定的衰减。

TIDB架构

和MySql不同,TiDB是一个分布式的数据库而不是单个进程,所以整个TiDB是由以下角色组成: TiKV, PD, TiDB, TiSpark。每个角色都是部署在多台机器上的进程组成的集群。

TiKV

​ 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

PD全称是Placement Driver,是对整个TiDB集群管理进行管理的角色。它最重要的功能是存储数据的元数据,即Key和TiKV中节点的对应关系。此外,负责对集群进行调度和负载均衡Region迁移, Region Raft Leader迁移),以及提供全局唯一递增的事务ID。PD集群也是通过Raft协议保证数据安全,但只有一台机器(Leader)负责处理所有的操作。

TiDB

TiDB角色负责对外交互(mysql协议),优化sql之后,向PD获取要读取的Key对应的TiKV节点信息,之后再向TiKV上的Region Raft Leader所在节点发起请求获取数据,再返回客户端。即TiDB是无状态的,不存储任何数据。可以通过Haproxy、LVS、Nginx反向代理等负载均衡组件将请求均衡的分配给多个TiDB实例。TiDB实例对SQL语句进行解析并生成分布式执行计划后,会将实际的数据请求下发到数据层(TiKV)。TiDB集群中各个节点相互独立,一个节点挂了不会影响其他节点。

HTAP结构:

TiFlash

TiFlash 是 TiDB 为完善 Realtime HTAP 形态引入的关键组件, TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复 制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。 TiKV 、 TiFlash 可按需部署在不同 的机器,解决 HTAP 资源隔离的问题。TiFlash是列式存储引擎,适合分析处理。

tispark

TiSpark是将Spark SQL 直接运行在 TIKV上 的OLAP解决方案。从数据集群的角度看,TiSprk+TIDB可以让用户无需进行脆弱和难以维护的etl,直接在同一平台进行事务和分析两种操作,简化了系统架构和运维。

TIDB 4 安装准备

软硬件环境需求及前置检查--官方文档: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

安装 tidb 4 基本安装

安装过程在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
登陆评论: 使用GITHUB登陆