如果你对 TiDB 还不太了解,或者你对数据库安装部署的认知仍然停留在手动和脚本时代,那么,请先戳这里了解一下 TiUP 神器:
- 震惊!数据库小白装国产数据库只需10分钟!
- TiDB 7.x 源码编译之 TiUP 篇
- TiUP:TiDBAer 必备利器
TiUP 1.16.0
7 月 2 日,TiUP 1.16.0 发版,更新日志如下:
新特性
- 在
tiup-cluster
中将 PD 部署为微服务 (#2377, @rleungx)
修复
- 修复
tiup-cluster
横向扩展时缺少 TiProxy 会话证书的问题 (#2432, @djshow832)
改进
- 执行
tiup-cluster prune
时删除 pd 的墓碑节点 (#2044, @nexustar) - 在命令执行中隐藏
-p
(密码)参数 (#2425, @nexustar) - 升级时避免重复下载 (#2423, @nexustar)
PD 微服务
TiDB 集群的“大脑” PD (Placement Driver),是整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。
从 TiDB 8.0.0 版本开始,PD 支持微服务模式(目前为实验特性,不建议在生产环境中使用)。
PD 微服务通常用于解决 PD 出现性能瓶颈的问题,提高 PD 服务质量。它可以避免因 PD 集群压力过大而导致的时间戳分配延迟,调度模块故障导致的服务不可用问题,以及 PD 自身单点瓶颈的问题。
微服务模式可将 PD 的时间戳分配和集群调度功能拆分为以下微服务单独部署,从而与 PD 的路由功能解耦,让 PD 专注于元数据的路由服务。
- tso 微服务
为整个集群提供单调递增的时间戳分配。
- scheduling 微服务
为整个集群提供调度功能,包括但不限于负载均衡、热点处理、副本修复、副本放置等。当调度模块发生变更时,你可以单独更新 scheduling 微服务,无需再对 PD 进行重启,进而不会影响集群的整体服务。
每个微服务都以独立进程的方式部署。当设置某个微服务的副本数大于 1 时,该微服务会自动实现主备的容灾模式,以确保服务的高可用性和可靠性。
功能演示:扩容 tso, scheduling 服务
升级 TiUP 到 1.16.0 版本。
[root@tidb1 ~]# tiup update --self
download https://tiup-mirrors.pingcap.com/tiup-v1.16.0-linux-amd64.tar.gz 5.03 MiB / 5.03 MiB 100.00% 2.83 MiB/s
Updated successfully!
[root@tidb1 ~]# tiup -v
1.16.0 tiup
Go Version: go1.21.11
Git Ref: v1.16.0
GitHash: e543145831d44a863366ff8c379d25980730bbd1
准备 POC 集群环境,TiDB 版本为 v8.1.0。
[root@tidb1 ~]# tiup cluster display mytidb
Cluster type: tidb
Cluster name: mytidb
Cluster version: v8.1.0
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.0.2.81:2379/dashboard
Grafana URL: http://192.0.2.86:3000
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.0.2.86:9093 alertmanager 192.0.2.86 9093/9094 linux/x86_64 Up /tidb-data/alertmanager-9093 /tidb-deploy/alertmanager-9093
192.0.2.86:3000 grafana 192.0.2.86 3000 linux/x86_64 Up - /tidb-deploy/grafana-3000
192.0.2.81:2379 pd 192.0.2.81 2379/2380 linux/x86_64 Up|L|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.0.2.82:2379 pd 192.0.2.82 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.0.2.83:2379 pd 192.0.2.83 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.0.2.86:9090 prometheus 192.0.2.86 9090/12020 linux/x86_64 Up /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090
192.0.2.81:4000 tidb 192.0.2.81 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000
192.0.2.82:4000 tidb 192.0.2.82 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000
192.0.2.82:20160 tikv 192.0.2.82 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.0.2.83:20160 tikv 192.0.2.83 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
Total nodes: 10
编辑集群全局配置,增加 PD 微服务配置项。
tiup cluster edit-config mytidb
global:
pd_mode: ms
应用配置后,扩容 tso 微服务,这里设定为 2 个副本,其中 1 个将为主副本,另一个为备份副本。
tso_servers:
- host: 192.0.2.82
- host: 192.0.2.83
[root@tidb1 ~]# tiup cluster scale-out mytidb ./tso.yaml -uroot -p
...
Please confirm your topology:
Cluster type: tidb
Cluster name: mytidb
Cluster version: v8.1.0
Role Host Ports OS/Arch Directories
---- ---- ----- ------- -----------
tso 192.0.2.82 3379 linux/x86_64 /tidb-deploy/tso-3379,/tidb-data/tso-3379
tso 192.0.2.83 3379 linux/x86_64 /tidb-deploy/tso-3379,/tidb-data/tso-3379
...
+ Download TiDB components
- Download pd:v8.1.0 (linux/amd64) ... Done
+ Initialize target host environments
+ Deploy TiDB instance
- Deploy instance tso -> 192.0.2.82:3379 ... Done
- Deploy instance tso -> 192.0.2.83:3379 ... Done
+ Copy certificate to remote host
+ Generate scale-out config
- Generate scale-out config tso -> 192.0.2.82:3379 ... Done
- Generate scale-out config tso -> 192.0.2.83:3379 ... Done
...
+ [ Serial ] - Save meta
+ [ Serial ] - Start new instances
Starting component tso
Starting instance 192.0.2.83:3379
Starting instance 192.0.2.82:3379
Start instance 192.0.2.83:3379 success
Start instance 192.0.2.82:3379 success
...
+ Refresh components conifgs
+ Reload prometheus and grafana
+ [ Serial ] - UpdateTopology: cluster=mytidb
Scaled cluster `mytidb` out successfully
扩容 tso 微服务成功,查看集群信息。
[root@tidb1 ~]# tiup cluster display mytidb
Cluster type: tidb
Cluster name: mytidb
Cluster version: v8.1.0
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
...
192.0.2.82:3379 tso 192.0.2.82 3379 linux/x86_64 Up /tidb-data/tso-3379 /tidb-deploy/tso-3379
192.0.2.83:3379 tso 192.0.2.83 3379 linux/x86_64 Up|P /tidb-data/tso-3379 /tidb-deploy/tso-3379
Total nodes: 12
再扩容 scheduling 微服务,仍然是双副本。
scheduling_servers:
- host: 192.0.2.81
- host: 192.0.2.86
扩容后,查看集群状态。
[root@tidb1 ~]# tiup cluster display mytidb
Cluster type: tidb
Cluster name: mytidb
Cluster version: v8.1.0
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.0.2.81:2379 pd 192.0.2.81 2379/2380 linux/x86_64 Up|L|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.0.2.82:2379 pd 192.0.2.82 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.0.2.83:2379 pd 192.0.2.83 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
...
192.0.2.81:3379 scheduling 192.0.2.81 3379 linux/x86_64 Up /tidb-data/scheduling-3379 /tidb-deploy/scheduling-3379
192.0.2.86:3379 scheduling 192.0.2.86 3379 linux/x86_64 Up|P /tidb-data/scheduling-3379 /tidb-deploy/scheduling-3379
...
192.0.2.82:3379 tso 192.0.2.82 3379 linux/x86_64 Up /tidb-data/tso-3379 /tidb-deploy/tso-3379
192.0.2.83:3379 tso 192.0.2.83 3379 linux/x86_64 Up|P /tidb-data/tso-3379 /tidb-deploy/tso-3379
Total nodes: 14
Demo: 查询 HTTP API
通过 HTTP API 查看 tso, scheduling 微服务的主节点和成员信息。
[root@tidb1 ~]# curl 192.0.2.81:2379/pd/api/v2/ms/primary/tso
"http://192.0.2.83:3379"[root@tidb1 ~]#
[root@tidb1 ~]# curl 192.0.2.81:2379/pd/api/v2/ms/members/tso
[
{
"service-addr": "http://192.0.2.82:3379",
"version": "v8.1.0",
"git-hash": "fca469ca33eb5d8b5e0891b507c87709a00b0e81",
"deploy-path": "/tidb-deploy/tso-3379/bin",
"start-timestamp": 1719931905
},
{
"service-addr": "http://192.0.2.83:3379",
"version": "v8.1.0",
"git-hash": "fca469ca33eb5d8b5e0891b507c87709a00b0e81",
"deploy-path": "/tidb-deploy/tso-3379/bin",
"start-timestamp": 1719931905
}
][root@tidb1 ~]#
[root@tidb1 ~]# curl 192.0.2.81:2379/pd/api/v2/ms/primary/scheduling
"http://192.0.2.86:3379"[root@tidb1 ~]#
[root@tidb1 ~]# curl 192.0.2.81:2379/pd/api/v2/ms/members/scheduling
[
{
"service-addr": "http://192.0.2.81:3379",
"version": "v8.1.0",
"git-hash": "fca469ca33eb5d8b5e0891b507c87709a00b0e81",
"deploy-path": "/tidb-deploy/scheduling-3379/bin",
"start-timestamp": 1719932211
},
{
"service-addr": "http://192.0.2.86:3379",
"version": "v8.1.0",
"git-hash": "fca469ca33eb5d8b5e0891b507c87709a00b0e81",
"deploy-path": "/tidb-deploy/scheduling-3379/bin",
"start-timestamp": 1719932211
}
我们知道可以使用 TiUP 转移 PD 的主节点,那么问题来了,如何切换微服务的主节点呢?再想想。。。
[root@tidb1 ~]# tiup ctl:v8.1.0 pd member leader transfer "pd-192.0.2.82-2379"
Starting component ctl: /root/.tiup/components/ctl/v8.1.0/ctl pd member leader transfer pd-192.0.2.82-2379
Success!
[root@tidb1 ~]# tiup ctl:v8.1.0 tso member leader transfer "pd-192.0.2.81-3379"
Starting component ctl: /root/.tiup/components/ctl/v8.1.0/ctl tso member leader transfer pd-192.0.2.81-3379
Error: ctl only supports tidb, tikv, pd, binlog, etcd and cdc currently
[root@tidb1 ~]# tiup ctl:v8.1.0 pd member leader transfer "pd-192.0.2.81-3379"
Starting component ctl: /root/.tiup/components/ctl/v8.1.0/ctl pd member leader transfer pd-192.0.2.81-3379
Failed to transfer leadership: [500] "no valid pd to transfer etcd leader"
Demo: 微服务配置项
从 TiDB 4.0 开始,增加了 CLUSTER_CONFIG
系统表,可以轻松获取集群当前所有组件实例的配置。
这里分别查看 pd,tso,scheduling 各有多少个配置项。
MySQL [(none)]> select count(*) from information_schema.cluster_config where type = 'pd' and instance = '192.0.2.81:2379';
+----------+
| count(*) |
+----------+
| 188 |
+----------+
1 row in set (0.04 sec)
MySQL [(none)]> select count(*) from information_schema.cluster_config where type = 'tso' and instance = '192.0.2.82:3379';
+----------+
| count(*) |
+----------+
| 51 |
+----------+
1 row in set (0.16 sec)
MySQL [(none)]> select count(*) from information_schema.cluster_config where type = 'scheduling' and instance = '192.0.2.81:3379';
+----------+
| count(*) |
+----------+
| 123 |
+----------+
1 row in set (0.04 sec)
升级建议
在升级 TiDB 集群之前,记得先升级 TiUP。
TiDB 升级互助活动,延续到9月30日!由 20 位社区版主、资深布道师及官方技术支持组成的升级导师天团为你升级保驾护航!
详情戳这里:https://asktug.com/t/topic/1025499
推荐阅读:
- 【收藏】TiDB 版本升级最全材料包&升级指南
- 为什么要升级 TiDB ?要选什么版本?要选哪种升级方案?
🌻 往期精彩 ▼
- 星辰考古:TiDB v3.x 忆水木
- 星辰考古:TiDB v2.x 回忆杀
- 敢于公布BUG的国产数据库才是好数据库
-- / END / --
👉 这里可以找到我
- 微信公众号:少安事务所 (mysqloffice)
- 墨天轮:严少安
- PGFans: 严少安
- ITPUB:少安事务所
- TiDB 专栏:@ShawnYan
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~