国产数据库TiDB部署——筑梦之路

摘自国产数据库TiDB单机部署最佳实践

与传统的单机数据库相比,TiDB 具有以下优势:
1)纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
2)支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL
3)默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
4)支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账
5)具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景

TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。

PD (Placement Driver) Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。

存储节点
1)TiKV Server:负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 的 API 在 KV 键值对层面提供对分布式事务的原生支持,默认提供了 SI (Snapshot Isolation) 的隔离级别,这也是 TiDB 在 SQL 层面支持分布式事务的核心。TiDB 的 SQL 层做完 SQL 解析后,会将 SQL 的执行计划转换为对 TiKV API 的实际调用。所以,数据都存储在 TiKV 中。另外,TiKV 中的数据都会自动维护多副本(默认为三副本),天然支持高可用和自动故障转移。
2)TiFlash:TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。

帮助文档:https://docs.pingcap.com/zh/
社区版地址:https://cn.pingcap.com/product-community

#创建用户
adduser tidb

#设置密码
passwd tidb


配置免密登录

编辑/etc/sudoers文件,文末加入:
tidb ALL=(ALL)  NOPASSWD:ALL

如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 
或者允许某些用户使用sudo时不需要输入密码,一般修改/etc/sudoers文件

cat >> /etc/sudoers << "EOF"
tidb ALL=(ALL)  NOPASSWD:ALL
EOF

切换用户
su - tidb

执行命令,一直按回车键就行
ssh-keygen -t rsa


解压安装包安装

1.切换到tidb用户,新建以下两个目录
mkdir tidb-deploy
mkdir tidb-data

2.解压Tidb server安装包
chmod +x tidb-community*
tar -zxvf tidb-community-server-v6.3.0-linux-amd64.tar.gz

3.执行instal文件
sh /home/tidb/tidb-community-server-v6.3.0-linux-amd64/local_install.sh

根据完成后提示中的第一点,执行如下命令,具体命令根据提示中的来:
1. source /home/tidb/.bash_profile
2. Have a try:   tiup playground


至此,TiDB安装所需的组件已经安装完成


配置初始化参数文件

1)集群初始化配置文件需要手动编写,在tidb用户根目录创建 YAML 格式配置文件, 下面是我的配置文件 topology.yaml 
2)第二种方法; 执行如下命令,生成集群初始化配置文件: tiup cluster template > topology.yaml

cat >> /home/tidb/topology.yaml << "EOF"
global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/home/tidb/tidb-deploy"
  data_dir: "/home/tidb/tidb-data"
server_configs: {}
pd_servers:
  - host: 192.168.1.54
tidb_servers:
  - host: 192.168.1.54
tikv_servers:
  - host: 192.168.1.54
monitoring_servers:
  - host: 192.168.1.54
grafana_servers:
  - host: 192.168.1.54
alertmanager_servers:
  - host: 192.168.1.54
EOF


--以下为生产集群部署命令
global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"
  data_dir: "/tidb-data"
server_configs: {}
pd_servers:
  - host: 10.0.1.4
  - host: 10.0.1.5
  - host: 10.0.1.6
tidb_servers:
  - host: 10.0.1.7
  - host: 10.0.1.8
  - host: 10.0.1.9
tikv_servers:
  - host: 10.0.1.1
  - host: 10.0.1.2
  - host: 10.0.1.3
monitoring_servers:
  - host: 10.0.1.4
grafana_servers:
  - host: 10.0.1.4
alertmanager_servers:
  - host: 10.0.1.4


部署集群

部署命令 

tiup cluster deploy tidb-test v6.3.0 ./topology.yaml --user tidb -p Cluster tidb-test deployed successfully, you can start it with command: tiup cluster start tidb-test --init


参数说明:

1) 通过 TiUP cluster 部署的集群名称为 tidb-test
2)部署版本为 v6.3.0,其他版本可以执行 tiup list tidb 获取
[tidb@jeames ~]$ tiup list tidb
Available versions for tidb:
Version  Installed  Release                    Platforms
-------  ---------  -------                    ---------
v6.3.0   YES        2022-09-30T11:00:18+08:00  linux/amd64

3)初始化配置文件为 topology.yaml
4)--user tidb:通过 tidb 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。
5) [-i] 及 [-p]:非必选项,如果已经配置免密登陆目标机,则不需填写。否则选择其一即可,[-i] 为可登录到部署机 root 用户(或 --user 指定的其他用户)的私钥,也可使用 [-p] 交互式输入该用户的密码

如无意外,会出现successfully的提示信息
命令 tiup cluster deploy 用于部署一个全新的集群。


Enabling component pd
        Enabling instance 192.168.1.54:2379
        Enable instance 192.168.1.54:2379 success
Enabling component tikv
        Enabling instance 192.168.1.54:20160
        Enable instance 192.168.1.54:20160 success
Enabling component tidb
        Enabling instance 192.168.1.54:4000
        Enable instance 192.168.1.54:4000 success
Enabling component prometheus
        Enabling instance 192.168.1.54:9090
        Enable instance 192.168.1.54:9090 success
Enabling component grafana
        Enabling instance 192.168.1.54:3000
        Enable instance 192.168.1.54:3000 success
Enabling component alertmanager
        Enabling instance 192.168.1.54:9093
        Enable instance 192.168.1.54:9093 success
Enabling component node_exporter
        Enabling instance 192.168.1.54
        Enable 192.168.1.54 success
Enabling component blackbox_exporter
        Enabling instance 192.168.1.54
        Enable 192.168.1.54 success
Cluster `tidb-test` deployed successfully, you can start it with command: `tiup cluster start tidb-test --init`



启动集群:

tiup cluster start tidb-test --init

检查集群状态,命令:tiup cluster display tidb-test 

tiup cluster display tidb-test

以上输出的结果中,可以看到tidb的端口号是4000,pd运维端口是2379。我们通过Navicat这种工具连接数据库是使用4000端口,默认密码上面已经提示: The new password is: 'Z2h^q6tBV7058bn&=%'


连接测试:

几个关键组件信息:
1)Pd:元数据及控制调度组件
2)Tikv:存储组件
3)Tidb:数据库实例组件
4)Tiflash:闪存组件
Tidb虽然和mysql类似,但是它厉害在分布式,如果要使用mysql,数据库变大后,要思考虑分库分表、使用mycat等数据路由工具,Tidb设计从底层一开始分布式,类似hdfs的存储架构,将分布式做成一种原生的架构。

因为TiDB内核是MySQL,所以直接用Navicat工具选择连接MySQL就行: 使用Navicat登录进去后,可以看到目前最新版本的TiDB的MySQL内核是:5.7.25


集群命令:

集群部署成功后,可以通过 tiup cluster list 命令在集群列表中查看该集群

启动: tiup cluster start tidb-test
检查状态:tiup cluster display tidb-test

猜你喜欢

转载自blog.csdn.net/qq_34777982/article/details/127142628