写点什么

TiUP v1.16 发版,支持 PD 微服务

  • 2024-07-05
    北京
  • 本文字数:5598 字

    阅读完需:约 18 分钟

作者: ShawnYan 原文来源:https://tidb.net/blog/9b5652ae


如果你对 TiDB 还不太了解,或者你对数据库安装部署的认知仍然停留在手动和脚本时代,那么,请先戳这里了解一下 TiUP 神器:


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 --selfdownload 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 -v1.16.0 tiupGo Version: go1.21.11Git Ref: v1.16.0GitHash: e543145831d44a863366ff8c379d25980730bbd1
复制代码


准备 POC 集群环境,TiDB 版本为 v8.1.0。


[root@tidb1 ~]# tiup cluster display mytidbCluster type:       tidbCluster name:       mytidbCluster version:    v8.1.0Deploy user:        tidbSSH type:           builtinDashboard URL:      http://192.0.2.81:2379/dashboardGrafana URL:        http://192.0.2.86:3000ID                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-9093192.0.2.86:3000   grafana       192.0.2.86  3000         linux/x86_64  Up       -                             /tidb-deploy/grafana-3000192.0.2.81:2379   pd            192.0.2.81  2379/2380    linux/x86_64  Up|L|UI  /tidb-data/pd-2379            /tidb-deploy/pd-2379192.0.2.82:2379   pd            192.0.2.82  2379/2380    linux/x86_64  Up       /tidb-data/pd-2379            /tidb-deploy/pd-2379192.0.2.83:2379   pd            192.0.2.83  2379/2380    linux/x86_64  Up       /tidb-data/pd-2379            /tidb-deploy/pd-2379192.0.2.86:9090   prometheus    192.0.2.86  9090/12020   linux/x86_64  Up       /tidb-data/prometheus-9090    /tidb-deploy/prometheus-9090192.0.2.81:4000   tidb          192.0.2.81  4000/10080   linux/x86_64  Up       -                             /tidb-deploy/tidb-4000192.0.2.82:4000   tidb          192.0.2.82  4000/10080   linux/x86_64  Up       -                             /tidb-deploy/tidb-4000192.0.2.82:20160  tikv          192.0.2.82  20160/20180  linux/x86_64  Up       /tidb-data/tikv-20160         /tidb-deploy/tikv-20160192.0.2.83:20160  tikv          192.0.2.83  20160/20180  linux/x86_64  Up       /tidb-data/tikv-20160         /tidb-deploy/tikv-20160Total 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:    tidbCluster name:    mytidbCluster version: v8.1.0Role  Host        Ports  OS/Arch       Directories----  ----        -----  -------       -----------tso   192.0.2.82  3379   linux/x86_64  /tidb-deploy/tso-3379,/tidb-data/tso-3379tso   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 instancesStarting 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=mytidbScaled cluster `mytidb` out successfully
复制代码


扩容 tso 微服务成功,查看集群信息。


[root@tidb1 ~]# tiup cluster display mytidbCluster type:       tidbCluster name:       mytidbCluster version:    v8.1.0ID                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-3379192.0.2.83:3379   tso           192.0.2.83  3379         linux/x86_64  Up|P     /tidb-data/tso-3379           /tidb-deploy/tso-3379Total nodes: 12
复制代码


再扩容 scheduling 微服务,仍然是双副本。


scheduling_servers:- host: 192.0.2.81- host: 192.0.2.86
复制代码


扩容后,查看集群状态。


[root@tidb1 ~]# tiup cluster display mytidbCluster type:       tidbCluster name:       mytidbCluster version:    v8.1.0ID                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-2379192.0.2.82:2379   pd            192.0.2.82  2379/2380    linux/x86_64  Up       /tidb-data/pd-2379            /tidb-deploy/pd-2379192.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-3379192.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-3379192.0.2.83:3379   tso           192.0.2.83  3379         linux/x86_64  Up|P     /tidb-data/tso-3379           /tidb-deploy/tso-3379Total 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-2379Success![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-3379Error: 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-3379Failed 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


推荐阅读:




🌻 往期精彩 ▼




-- / END / –


👉 这里可以找到我


  • 微信公众号:少安事务所 (mysqloffice)

  • 墨天轮:严少安

  • PGFans: 严少安

  • ITPUB:少安事务所

  • TiDB 专栏:@ShawnYan


如果这篇文章为你带来了灵感或启发,就请帮忙点『』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~


发布于: 刚刚阅读数: 1
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiUP v1.16 发版,支持 PD 微服务_版本升级_TiDB 社区干货传送门_InfoQ写作社区