标签(空格分隔): tidb系列
一:tidb 介绍与架构
1.1 tidb 介绍
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,
具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。
TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
1.2 tidb 的核心
1) 一键水平扩容或者缩容
得益于 TiDB 存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。
2)金融级高可用
数据采用多副本存储,数据副本通过 Multi-Raft 协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略满足不同容灾级别的要求。
3)实时 HTAP
提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
4) 云原生的分布式数据库
专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。
5)兼容 MySQL 5.7 协议和 MySQL 生态
兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。
1.3 tidb的架构
与传统的单机数据库相比,TiDB 具有以下优势:
1) 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
2) 支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL
3) 默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
4) 支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账
5) 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景
6) 在内核设计上,TiDB 分布式数据库将整体架构拆分成了多个模块,各模块之间互相通信,组成完整的 TiDB 系统。对应的架构图如下:
1.TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。
2. PD (Placement Driver) Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。
3. 存储节点
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 中的数据都会自动维护多副本(默认为三副本),天然支持高可用和自动故障转移。
TiFlash:TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。
二:tidb 6.1 最新版本部署
2.1:tidb6.1 下载
tidb的下载试用:
https://pingcap.com/zh/product-community
目前版本是6.1最新版本
2.2: 部署环境初始化
系统:Centos7.9x64
主机名:
cat /etc/hosts
--------------------
172.16.10.11 flyfishsrvs01
172.16.10.12 flyfishsrvs02
172.16.10.13 flyfishsrvs03
172.16.10.14 flyfishsrvs04
172.16.10.15 flyfishsrvs05
172.16.10.16 flyfishsrvs06
172.16.10.17 flyfishsrvs07
-----------------
本次部署使用7台机器部署tidb6.1
系统环境语言:
echo "export LANG=en_US.UTF8" >> ~/.bash_profile
cat ~/.bash_profile
安装用户创建:
useradd tidb && echo tidb |passwd tidb --stdin
tidb用户提权:
chmod +x /etc/sudoers
vim /etc/sudoers
-----
tidb ALL=(ALL) NOPASSWD:ALL
----
# 配置系统句柄数
ulimit -SHn 65535
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd
EOF
--------
cat >> /etc/sysctl.conf << EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.sem = 204800 512000 3000 20480
kernel.shmmax = 1073741824
kernel.shmall = 262144
kernel.shmmni = 4096
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
vm.swappiness = 10
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 3
vm.dirty_ratio = 10
EOF
sysctl -p
----
做tidb的 无密码认证:
做tidb用户无密钥认证
su - tidb
ssh-keygen ---一直敲回车到最后
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
将所有的公钥导入authorized_keys 分发到 所有的 机器的/home/tidb/.ssh/ 下面
然后测试
系统同步时间:ntp1.aliyun.com iburst
chronyc sources -v
2.3 安装tidb6.1
tidb6.1 用 tidb 用户安装
tar -zxvf tidb-community-server-v6.1.0-linux-amd64.tar.gz
mv tidb-community-server-v6.1.0-linux-amd64 /home/tidb/
chown tidb:tidb -R /home/tidb/tidb-community-server-v6.1.0-linux-amd64
su - tidb
cd tidb-community-server-v6.1.0-linux-amd64/
mv * ../
source local_install.sh
加载tiup命令
source /home/tidb/.bash_profile
tiup --help
创建部署deploy_dir 与data_dir 目录[所有机器全部部署]
sudo mkdir /tidb_deploy
sudo mkdir /tidb_data
sudo chmod 777 -R /tidb*
创建拓扑文件:
su - tidb
cd /home/tidb/
vim topology.yaml
---
# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
server_configs:
pd:
replication.enable-placement-rules: true
pd_servers:
- host: 172.16.10.11
- host: 172.16.10.12
- host: 172.16.10.13
tidb_servers:
- host: 172.16.10.11
- host: 172.16.10.12
- host: 172.16.10.13
tikv_servers:
- host: 172.16.10.13
- host: 172.16.10.14
- host: 172.16.10.15
tiflash_servers:
- host: 172.16.10.16
data_dir: /data/tiflash/data
cdc_servers:
- host: 172.16.10.15
- host: 172.16.10.16
- host: 172.16.10.17
monitoring_servers:
- host: 172.16.10.11
grafana_servers:
- host: 172.16.10.11
alertmanager_servers:
- host: 172.16.10.11
---
172.16.10.16:
创建tiflash文件
sudo mkdir -p /data/tiflash/data/
sudo chmod 777 -R /data/tiflash/data/
分发机器:
su - tidb
下载并安装 TiUP:
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
应用部署tidb拓扑:
tiup cluster deploy tidb-test v6.1.0 topology.yaml --user tidb -i /home/tidb/.ssh/id_rsa
2.4 启动tidb
tiup cluster start tidb-test --init
登录密钥:
The new password is: '#Thfa+%13Y^c07eP92'.
查看部署拓扑
tiup cluster display tidb-test
找一个pd 节点登录 [前提安装好mariadb 客户端工具有MySQL命令]
mysql -uroot -h172.16.10.11 -P 4000 -p [输入密码“#Thfa+%13Y^c07eP92”]
设置tidb的密码:
set password = password("123.com");
flush privileges;
推出在登录:
mysql -uroot -h172.16.10.11 -P 4000 -p123.com
下面的操作就跟MySQL 是一样了。
插入表测试:
mysql -uroot -h172.16.10.11 -P4000 -p123.com
create database yangyang;
use yangyang;
创建一个my_user表:
CREATE TABLE `my_user` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`account` varchar(255) DEFAULT NULL,
`passwd` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
插入数据:
INSERT INTO `my_user` VALUES ('1', 'admin', 'admin');
INSERT INTO `my_user` VALUES ('2', 'pu', '12345');
INSERT INTO `my_user` VALUES ('3', 'system', 'system');
INSERT INTO `my_user` VALUES ('4', 'zxh', 'zxh');
INSERT INTO `my_user` VALUES ('5', 'test', 'test');
INSERT INTO `my_user` VALUES ('6', 'pudong', 'pudong');
INSERT INTO `my_user` VALUES ('7', 'qiqi', 'qiqi');
2.5 tidb 的web 与监控
tidb cluster display tidb-test
http://172.16.10.12:2379/dashboard
root/123.com [用户名密钥]
2.6 prometheus 与grafana
prometheus:
http://172.16.10.11:9090/targets
grafana 监控:
http://172.16.10.11:3000/login
admin/admin [用户名密钥]