tidb笔记

 

HTAP-TiDB5.x原理及实战第一部分TiDB的设计原理

  1. 1.    数据及数据库产品的发展

1.1  数据的定义和价值

 

1.1.1  什么是数据

 

数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。

 

1.1.2  数据的种类

 

它不仅指狭义上的数字,还可以是具有一定意义的文字、字母、数字符号的组合、图形、图像、视频、音频等,也是客观事物的属性、数量、位置及其相互关系的抽象表示。

例如,“0、1、2.”、“阴、雨、下降、气温”、“学生的档案记录、货物的运输情况”等都是数据。数据经过加工后就成为信息。

在计算机科学,数据是所有能输入计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的通称。计算机存储和处理的对象十分广泛,表示这些对象的数据也随之变得越来越复杂。

 

1.1.3  数据的价值

识别对象行为,利用相关关系预测/推荐可能会发生什么行为?分析行为之间的关系,记录、监控、防止异常行为

识别对象(人脸,声音,人体,图片)挖掘对象的情感等属性。

解决信息不对称,信用体系发现不足、异常,并改善

描述和*验证想法

https://www.jianshu.com/p/c773e88bb127

 

1.2  各行业数据量增长现状

近年来,伴随着云计算、大数据、物联网、人工智能等信息技术的快速发展和传统产业数字化的转型,数据量呈现几何级增长,据IDC统计,全球数据总量2020年达到44个ZB,我国数据量将达到8060个EB,占全球数据总量的18%。

据IDC统计,2020年有超过500亿的终端与设备联网,而有50%的物联网网络将面临网络带宽的限制,40%的数据需要在网络边缘分析、处理与储存。边缘计算市场规模将超万亿,成为与云计算平分秋色的新兴市场。而在国内市场方面,据CEDA预测,2020年 我国物联网市场规模有望达到18300亿元,年复合增速高达25%,我国边缘计算发展将在接下来的两年迎来高峰期。

到2020年,平均下来,一个人每天会产生1.5G的数据,每辆车会产生4TB的数据,每架飞机会产生40TB的数据,每个小型的工厂会产生1PB数据。

1.3  数据库产品迭代历程

自上世纪70年代,EF  codd提出了关系型数据库模型开始,数据库已经发展了将近半个世

纪。可以说是一个历史悠久的计算机学科,在这个半个世纪里,这个学科发生了很多变化,但也有一些共性的驱动在里面。我们尝试一起探讨下数据技术发展的内在驱动、以及展望趋势。

 

里程碑一:关系型商业数据库

 

上世纪80年代,也就是从提出关系型数据库模型后10多年,关系型数据库产品逐步完成了工程与产品实现,Oracle、IBMDB2、Sybase以及SQL  Server和Informix第一批关系型商业数据库开始出现。

 

里程碑二:开源数据库萌芽

 

90年代中后期,MySQL、PostgreSQL等开源数据库开始萌芽。

 

里程碑三:开源数据库盛行、NoSQL、大数据生态来临

 

上世纪末到本世纪初,IT与通信两门技术发生第一次碰撞,开启互联网时代,数据量开始爆发增长,快速发展的各类互联网公司,更加青睐MySQL、PostgreSQL这类开源数据库,同时也给这类开源数据库带来丰富的产品生态,比如基于开源数据库的各种分库分表方案产生。

同期,2006年谷歌的三驾马车(GFS、Bigtable、Mapreduce)开启了大数据时代,涌现了Hadoop、Hbase、Redis等NoSQL大数据生态。

 

里程碑四:数据库技术百花齐放

 

2010年后,IT技术与通信技术发生第二次碰撞,4G网络开启了移动互联网时代,在这个时代,产生了很多业务与场景创新,底层数据技术更是进入前所未有的快速通道

集成了分布式技术与关系模型的NewSQL数据库开始出现,代表产品有Spanner、TiDB  等。

云计算与数据库、大数据发生融合;很多云原生数据库出现,云计算不仅给数据技术带来 新的变革,也给数据库厂商提供了更高效的服务交付、商业模式,各种DBaaS(Database-as-a-Service)产品涌现。

 

里程碑五:HTAP的强需求

 

2020年后,各行各业都逐步进入数字化时期,虽然从技术创新角度,会有越来越多的数据技术栈与产品将出现

但这么多的技术栈也会大大增加使用成本,从用户需求的角度看,能不能将在线处理业务与分析业务进行整合,也就是我们经常说的HTAP(Hybrid Transactional/Analytical Processing)作为一种统一的数据服务变成了一个强需求。

 

 二、tidb生产部署实战

 

    2.1组件端口

 

 

 

# 1. 下载并安装 TiUP工具
wget https://tiup-mirrors.pingcap.com/install.sh
sh install.sh
source .bash_profile
# 2. 部署 TiDB 集群
tiup playground v5.2.1 --db 2 --pd 3 --kv 3 --monitor --host 10.0.0.20
# 3. 链接测试
mysql --host 127.0.0.1 --port 4000 -u root
通过 http://IP:9090 访问 TiDB 的 Prometheus 管理界面。
通过 http://IP:2379/dashboard 访问 TiDB Dashboard 页面,默认用户名为 root,密码为空。
# 4. 销毁
通过 ctrl + c 停掉进程
执行以下命令:
tiup clean --all

  

 

wget https://tiup-mirrors.pingcap.com/install.sh
sh install.sh
source .bash_profile
tiup cluster
tiup update --self && tiup update cluster

 

 

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/data/tidb-deploy"
  data_dir: "/data/tidb-data"
monitored:
  node_exporter_port: 9100
  blackbox_exporter_port: 9115
server_configs:
  tidb:
    log.slow-threshold: 300
  tikv:
    readpool.storage.use-unified-pool: false
    readpool.coprocessor.use-unified-pool: true
  pd:
    replication.enable-placement-rules: true
    replication.location-labels: ["host"]
  tiflash:
    logger.level: "info"

pd_servers:
  - host: 10.0.0.20

tidb_servers:
  - host: 10.0.0.20
  
tikv_servers:
  - host: 10.0.0.20
    port: 20160
    status_port: 20180
    config:
      server.labels: { host: "logic-host-1" }
  
  - host: 10.0.0.20
    port: 20161
    status_port: 20181
    config:
      server.labels: { host: "logic-host-2" }

  - host: 10.0.0.20
    port: 20162
    status_port: 20182
    config:
      server.labels: { host: "logic-host-3" }

tiflash_servers:
  - host: 10.0.0.20
monitoring_servers:
  - host: 10.0.0.20
grafana_servers:
  - host: 10.0.0.20

 

  2.4 部署TiDB Cluster

 

# 1. 由于模拟多机部署,需要通过 root 用户调大 sshd 服务的连接数限制
修改 /etc/ssh/sshd_config 将 MaxSessions 调至 20。
重启 sshd 服务
# 2. 创建并启动集群
按下面的配置模板,编辑配置文件,命名为 topo.yaml,其中:
user: "tidb":表示通过 tidb 系统用户(部署会自动创建)来做集群的内部管理,默认使用 22 端口通
过 ssh 登录目标机器
replication.enable-placement-rules:设置这个 PD 参数来确保 TiFlash 正常运行
host:设置为本部署主机的 IP
# 3. 执行集群部署命令
tiup cluster deploy oldguo-cluster v5.2.1 ./topo.yaml --user root -p
# 4. 启动集群
tiup cluster start oldguo-cluster
# 5. 访问 TiDB 数据库,密码为空
yum install -y mariadb mysql -h 10.0.0.20 -P 4000 -u root # 6. 访问 TiDB 的 Grafana 监控 通过 http://{grafana-ip}:3000 访问集群 Grafana 监控页面,默认用户名和密码均为 admin。 # 7.访问 TiDB 的 Dashboard 通过 http://{pd-ip}:2379/dashboard 访问集群 TiDB Dashboard 监控页面,默认用户名为 root,密码为空。 # 8. 执行以下命令确认当前已经部署的集群列表 tiup cluster list 执行以下命令查看集群的拓扑结构和状态: tiup cluster display oldguo-cluster

 

  

#用户的管理
create user oldguo@'10.0.0.%' identified by '123';
drop user
alter user

#权限和角色管理
create role r_manager, r_staff;
drop role r_staff;
grant insert, update, delete on test.* to r_mgr;
grant r_mgr to 'jack'@'172.16.6.212';
set role all;

  

 

vim scale.out.yaml
tikv_servers:
  - host: 172.16.6.157
    ssh_port: 22
    port: 20160
    status_port: 20180
    deploy_dir: /tidb-deploy/tikv-20160
    data_dir: /tidb-data/tikv-20160
    log_dir: /tidb-deploy/tikv-20160/log

                                                         8.1.2 运行扩容命令

tiup cluster scale-out oldguo-cluster scale-out.yaml

                                                         8.1.3 确认节点

tiup cluster display oldguo-cluster

                     8.1.4 缩容

# 1. 查看节点ID
tiup clustger display oldguo-cluster
# 2. 缩容
tiup cluster scale-in oldguo-cluster --node NODE-IP:NODE-PORT
# 3. 检查集群
tiup cluster display oldguo-cluster

# 1. 根据TiFlash 剩余节点数据调整数据表的副本数
alter table DB-NAME.TABLE-name set tiflash replica 0;
# 2. 确认表的副本确实被删除
select * from information_schema.tiflash_replica
where table_schema='DB_NAME' and TABLE_NAME='TABLE_NAME';
3. 查看节点ID信息
tiup cluster display oldguo-cluster
4. 执行缩容操作
tiup cluster scale-in oldguo-cluster --node NODE-IP:NODE-PORT
5. 检查集群状态
tiup cluster display oldguo-cluster

------------------------------
#集群重命名
tiup cluster rename oldguo-cluster tidb-test;
————————————————————
# 删除集群数据、日志、重建集群、
tiup cluster clean oldguo-cluster --log
tiup cluster clean oldguo-cluster --data
tiup cluster clean oldguo-cluster --all
tiup cluster destroy oldguo-cluste
————————————
#时区管理
set global time_zone='UTC'
time_zone='+8:00'

                                                 9.2 TiDB Cluster 版本升级

升级思路:
1. 升级TiUP(建议高于1.4)
tiup update --self
tiup update cluster
2. 修改TiUP CLuster 拓扑配置文件
tiup clustger edit-config oldguo-cluster
3. 检查健康状态(regions)
tiup check oldguo-cluster --cluster
4. 集群升级到制定版本
# 不停机
tiup cluster upgrade oldguo-cluster v5.2.1
# 停机
tiup cluster stop oldguo-cluster
tiup cluster upgrade oldguo-cluster v5.2.1 --offline
tiup cluster start oldguo-cluster
5. 检查状态
tiup cluster display oldguo-cluster

 

 

wget https://download.pingcap.org/tidb-toolkit-v5.2.1-linux-amd64.tar.gz
#或者
tiup install br

                                                1.5.2 BR的使用

注意:
在所有的 TiKV 节点创建文件夹 /tmp/backup,用来存储本节点的备份文件(SST文件) 并将文件夹
的权限设置为可以读写。 首先登录到 TiKV 节点,之后执行:
mkdir /tmp/backup
chmod 777 /tmp/backup
# 全库备份应用
./br backup full --pd "172.16.6.202:2379" --storage "local:///tmp/backup" --ratelimit 120 --log-file backupfull.log
参数介绍:
--pd"172.16.6.202:2379":连接TiDB数据库的PD节点,最好在PD节点上执行,即连接本节点。
--storage"local:///tmp/backup":备份文件存储在TiKV节点上的位置。
--ratelimit120:对于备份所用存储带宽限速,以免影响线上业务。
--log-filebackupfull.log:备份日志文件。)
单库备份应用:
mkdir -p /tmp/worldbak
chmod 777 /tmp/worldbak
./br backup db --pd "172.16.6.202:2379" --db employees --storage "local:///tmp/worldbak" --ratelimit 120 --log-file backupdb.log
cd tidb-toolkit-v5.0.1-linux-amd64/bin/
./br restore db --pd "172.16.6.202:2379" --db "world" --storage "local:///tmp/worldbak" --log-file restoredb.log
单表备份应用:
mkdir /tmp/citybak
chmod 777 /tmp/citybak
./br backup table --pd "172.16.6.202:2379" --db world --table city --storage "local:///tmp/citybak" --ratelimit 120 --log-file backuptable.log
./br restore table --pd "172.16.6.202:2379" --db "world" --table "city" --storage "local:///tmp/citybak" --log-file restoretable.log

  

                 2.3 Dumpling 工具应用实战

1. 安装方式:
tiup install dumpling:{版本}
或者:
tidb-toolkit 包含
2. 最小权限要求
select
reload
lock tables
replication client
3. 单表导出使用
# ./dumpling -uroot -ptidb -P4000 -h 172.16.6.212 --filetype sql -t 8 -o /tmp/city -r 200000 -F 256MiB -T world.city
各个参数的解释如下:
-uroot :用户名为 root
-P4000 : 端口号为4000
-h 172.16.6.212 :主机 IP 为 172.16.6.212;
-p : 密码
--filetype sql :导出文件类型为 SQL 文件。
-t 8 :采用 8 线程同时导出。
-o /tmp/city :导出文件保存在 /tmp/city 中。
-r 200000 :每个导出文件最大容纳 200000 行数据。
-F 256MiB :每个导出文件最大 256 MiB。
4. 单库导出使用
./dumpling -uroot -ptidb -P4000 -h 172.16.6.212 --filetype sql -t 8 -o /tmp/world -r 200000 -F 256MiB -B world
5. 导出数据的一致性保证
--consistency flush/snapshot/lock/none/auto
./dumpling --snapshot "2021-07-02 23:00:00"

  

                 3.2Lightning 工具应用实战

1. 工具基本使用
# cd tidb-toolkit-v5.0.1-linux-amd64/bin/
# vi tidb-lightning.toml
内容为:
[lightning]
# 日志
level = "info"
file = "tidb-lightning.log"
[tikv-importer]
# 选择使用的 local 后端
backend = "local"
# 设置排序的键值对的临时存放地址,目标路径需要是一个空目录
sorted-kv-dir = "/tmp"
[mydumper] # 源数据目录。
data-source-dir = "/tmp/world/"
[tidb]
# 目标集群的信息
host = "172.16.6.212"
port = 4000
user = "root"
# 表架构信息在从 TiDB 的“状态端口”获取。
status-port = 10080
# 集群 pd 的地址
pd-addr = "172.16.6.202:2379"
#!/bin/bash
nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &
2. TiDB Lightning 断点续传
# 断点续传参数配置
[checkpoint]
enable = true
# 断点的存储
driver = 'file'
# 断点续传的控制
--checkpoint-error-destroy : 让失败的表从同开始导入
--checkpoint-error-ignore : 清除出错状态,忽略错误继续导。
--checkpoint-remove : 清除断点,不断点续传
3. 数据过滤(4.0+)
[mydumper]
filter = ['a*.*','b*.*']
4. TiDB lightning web管理
[lightning]
server-mode = true
status-addr = ':8289'

  

 

# 安装配置
tiup install dm
tiup update --self && tiup update dm
tiup dm template > topology.yaml
#查看dm历史版本
tiup list dm-master
# 启动DM
tiup dm deploy dm-test v5.0.0-nightly-20210531 ./topology.yaml --user root -p
tiup dm list
tiup dm start dm-test
tiup dm display dm-test
# 获取dmctl 工具
tiup dmctl:v5.0.0-nightly-20210531

# 创建用户
参考mysql主从配置
# 修改配置文件
vim mysql-source-conf1.yaml
4.3.2 任务配置模板
source-id: "mysql-replica-01"
enable-gtid: true
from:
host: "172.16.6.212"
user: "root"
password: "F1GJCYzuWx/8H4EJHRDWwkBJCrN+4A=="
port: 3306
# 加载源配置文件
tiup dmctl --master-addr=172.16.6.202:8261 operate-source create mysql-sourceconf1.yaml
# 查看数据源
tiup dmctl --master-addr=172.16.6.202:8261 get-config source mysql-replica-01
# 查看数据源和DM-Worker对应关系
tiup dmctl --master-addr=172.16.6.202:8261 operate-source show

               4.3.2 任务配置模板

vim dm-task.yaml
name: "dm-taskX"
task-mode: all
ignore-checking-items: ["auto_increment_ID"]
target-database:
  host: "172.16.6.212"
  port: 4000
  user: "root"
  password: "tidb"
mysql-instances:
-
  source-id: "mysql-replica-01"
  route-rules: ["instance-1-user-rule","sale-route-rule"]
  filter-rules: ["trace-filter-rule", "user-filter-rule" , "store-filter-rule"]
  block-allow-list: "log-ignored"
  mydumper-config-name: "global"
  loader-config-name: "global"
  syncer-config-name: "global"
-
  source-id: "mysql-replica-02"
  route-rules: ["instance-2-user-rule", "instance-2-store-rule","sale-routerule"]
  filter-rules: ["trace-filter-rule", "user-filter-rule" , "store-filter-rule"]
  block-allow-list: "log-ignored"
  mydumper-config-name: "global"
  loader-config-name: "global"
  syncer-config-name: "global"
# 所有实例的共有配置
routes:
  instance-1-user-rule:
    schema-pattern: "user"
    target-schema: "user_north"
  instance-2-user-rule:
    schema-pattern: "user"
    target-schema: "user_east"
  instance-2-store-rule:
    schema-pattern: "store"
    table-pattern: "store_sz"
    target-schema: "store"
    target-table: "store_suzhou"
  sale-route-rule:
    schema-pattern: "salesdb"
    target-schema: "salesdb"
filters:
  trace-filter-rule:
    schema-pattern: "user"
    table-pattern: "trace"
    events: ["truncate table", "drop table", "delete"]
    action: Ignore
  user-filter-rule:
    schema-pattern: "user"
    events: ["drop database"]
    action: Ignore
  store-filter-rule:
    schema-pattern: "store"
    events: ["drop database", "truncate table", "drop table", "delete"]
    action: Ignore
block-allow-list:
  log-ignored:
    ignore-dbs: ["log"]
mydumpers:
  global:
    threads: 4
    chunk-filesize: 64

            4.3.3 dm复制任务的开启与检测(——————————官方文档参考——————————

# 检查配置
tiup dmctl --master-addr=172.16.6.202:8261 check-task dm-task.yaml
# 开启迁移任务
tiup dmctl --master-addr=172.16.6.202:8261 start-task dm-task.yaml
# 查看任务状态
tiup dmctl --master-addr=172.16.6.202:8261 query-status dm-task.yaml
# 控制迁移任务
    1.暂停任务
tiup dmctl --master-addr=172.16.6.202:8261 pause-task dm-task【任务名】
    2.恢复任务
tiup dmctl --master-addr=172.16.6.202:8261 resume-task dm-task
    3.停止任务
tiup dmctl --master-addr=172.16.6.202:8261 stop-task dm-task

                   4.3.4 扩容DM 节点

vi dm-scale.yaml
加入如下内容:
worker_servers:
  - host: 172.16.6.202

tiup dm scale-out dm-test dm-scale.yaml -uroot -p
tiup dm display dm-test

  

           ---------------------------------------------具体内容官方文档--------------------------------------------

 

posted on 2023-08-28 17:54  leiyunfeng  阅读(2)  评论(0编辑  收藏  举报