TDSQL 核心模块与进程体系
1. oc_agent 模块介绍
在 TDSQL 集群中,oc_agent 是部署在 DB 节点、Proxy 节点上的基础管控组件,不属于某个具体 MySQL 实例,而是面向"机器级"的进程守护与远程执行通道,由 ewp_tdsql_proc 和 ewp_tdsql_oc 两个进程组成:
ewp_tdsql_proc:负责 Proxy/mysqld /各 agent 进程存活并自动拉起;ewp_tdsql_oc:提供安全的远程命令通道,供 OSS/scheduler/运维工具(如oc_tool)在节点间下发指令、校验连通性。
bash
[root@tdsql1 log]# ps -ef |grep oc_agent
root 3639 1571 0 21:36 pts/0 00:00:00 grep --color=auto oc_agent
root 21035 1 0 19:45 ? 00:00:00 ./ewp_tdsql_proc /data/oc_agent/bin
root 21043 21035 0 19:45 ? 00:00:42 ./ewp_tdsql_proc /data/oc_agent/bin
root 21062 1 0 19:45 ? 00:00:08 ./ewp_tdsql_oc /data/oc_agent/bin --config=../conf/oc_agent.xml
1.1 进程介绍
1. ewp_tdsql_oc 进程(控制与传输通道)
- 核心职责 :负责构建集群的数据传输通道 与远程命令执行通道。例如:跨节点拉取数据、远程查看服务器网卡信息等。
- 通信端口 :默认监听
8966端口。 - 心跳机制:定期上报当前节点的状态、心跳间隔以及组件版本号。
- 启动命令 :
./ewp_tdsql_oc /data/oc_agent/bin --config=../conf/oc_agent.xml
2. ewp_tdsql_proc 进程(本地进程守护)
- 核心职责 :专门负责在本地拉起、监控、守护 Proxy、DB(MySQL/PostgreSQL 实例)以及 Agent 自身的子进程。
- 启动命令
./ewp_tdsql_proc /data/oc_agent/bin
简记:
ewp_tdsql_proc= 保活
ewp_tdsql_oc= 通道
1.2 oc_agent 配置信息
oc_agent使用的默认账户是:tdsql, 密码是在group_vars/all里面配置的,默认是:a+complex+password。oc_agent的相关信息在配置文件中:/data/oc_agent/conf/oc_agent.xml
bash
[root@tdsql14 bin]# netstat -ntlp |grep 8966
tcp 0 0 0.0.0.0:8966 0.0.0.0:* LISTEN 21254/./ewp_tdsql_o
[root@tdsql14 bin]# ps -ef |grep 21254
root 21254 1 0 19:45 ? 00:00:17 ./ewp_tdsql_oc /data/oc_agent/bin --config=../conf/oc_agent.xml
root 39364 24499 0 21:54 pts/0 00:00:00 grep --color=auto 21254
1.3 oc_agent 日志体系
oc_agent 的日志存放于 /data/oc_agent/log/ 目录:
-
ewp_tdsql_oc.log(控制通道日志):- 排查场景:控制台下发改参、备份、扩容任务卡死或报错;节点间
oc_tool连通性测试失败(oc_tool是运维侧客户端工具,用来测oc_agent通不通"。)。 - 关注重点:网络超时、握手失败以及远程 Shell 脚本执行的异常返回值。
- 排查场景:控制台下发改参、备份、扩容任务卡死或报错;节点间
-
ewp_tdsql_proc.log(守护进程日志):- 排查场景:MySQL 实例或 Proxy 实例发生非预期的自动重启。
- 关注重点:本地 PID 扫描消亡记录、
process_monitor.sh的拉起动作、以及是否触发了监控屏蔽(Mask)机制。
1.4 启动过程
agent_monitor.sh 通过 crontab 定时任务,每 5 分钟巡检一次,拉起 oc_agent 进程。
bash
cat /etc/crontab |grep agent_monitor
*/5 * * * * root (cd /data/oc_agent/scripts; ./agent_monitor.sh >crontab.log 2>&1)
实例节点重启顺序:
oc_agent--->Proxy--->DB--- >Agent
oc_agent 拉起 DB 的流程:
oc_agent--->oc_pull_mysqld.sh--->startmysql.sh
2. Keeper 模块
Keeper 是 TDSQL 控制面里的「调度 + 资源」中心,实际部署中, Manager 与 Scheduler 通常随 Keeper 一起运行,两者相互协同。
Scheduler:集群调度大脑(做决定)
- Set 生命周期管理 :创建/删除 Set、节点替换、备机重做
- 主备切换 :监听 ZK 上 Agent 上报的心跳,主节点异常时发起高一致切
- DDL 统一调度 :Proxy 识别到 DDL → 写 ZK → Scheduler 下发执行
- 资源调度 :监控 CPU、磁盘、表级用量,触发扩容 / 缩容
- 状态机维护 :Set 健康状态、watch 节点、自动退化与恢复
Manager:资源账本 + 任务执行者(决定资源归谁,任务怎么落地)
- 物理资源管理 :机型录入、机器上下线、IP/端口分配、资源池台账
- 对接 OSS :赤兔 → OSS → ZK → Manager 监听任务节点
- 任务落地 :创建实例、扩容、备份恢复等请求由 Manager 转成具体动作
- 配置下发 :把 OSS 参数变更写成 XML 指令,交给 Scheduler 或 Agent 执行
bash
[root@tdsql12 data]# ps -ef |grep schedule
tdsql 19357 1 0 13:41 ? 00:00:00 ./scheduler /data/application/scheduler/bin
tdsql 56298 19357 12 19:36 ? 00:20:44 ./scheduler /data/application/scheduler/bin
tdsql 19368 1 0 13:41 ? 00:00:00 ./manager /data/application/scheduler/bin
tdsql 20881 19368 4 13:43 ? 00:23:25 ./manager /data/application/scheduler/bin
3. OSS 模块
OSS(Operations Support System)是 TDSQL 控制面的对外服务层,承担"承上启下"的角色:对上承接赤兔与运维 API,对下对接 Keeper与 ZK,将运维操作转化为集群可执行的任务流,装了赤兔的机器才有该进程。
3.1 核心职责
接口服务
- 提供 RESTful / RPC 接口 供赤兔调用
- 接收实例创建、扩容、备份、参数变更、主备切换等请求
- 统一做参数校验、权限校验、幂等控制
任务管理
- 将运维操作封装为任务
- 每个任务生成唯一
TaskID,记录状态机 - 任务状态持久化,支持查询、重试、回滚
与 ZK 交互
- 把任务信息写入 ZK 指定路径
- 监听 ZK 上任务执行结果节点,更新本地任务状态
- 不直接 SSH 到 DB / Proxy 节点,所有动作都通过 ZK 中转
配置与元数据
- 维护集群级配置(如默认参数模板)
- 管理实例、Set、Proxy 组的元数据
- 为赤兔提供查询接口(实例列表、拓扑、状态等)
运维辅助
- 对接监控、告警系统
- 提供部分运维脚本的触发入口
- 记录操作审计日志
bash
[root@tdsql1 state]# ps -ef |grep oss_server
tdsql 21182 1 0 17:00 ? 00:00:00 /data/application/oss/boot/../bin/oss_server
tdsql 29791 21182 0 17:00 ? 00:00:06 /data/application/oss/boot/../bin/oss_server
root 75061 63244 0 20:06 pts/1 00:00:00 grep --color=auto oss_server
4. Monitor 监控采集模块
Monitor 是 TDSQL 的监控数据采集与预处理层 ,负责从 DB、Proxy、主机等维度周期性采集指标,并进行本地汇总分析,再上报给监控存储(如 Prometheus / 赤兔监控)。在进程模型上,Monitor 主要由 collector 和 analysis 两个进程组成。
collector(采集进程)
- 周期性连接 DB / Proxy / 主机,执行采集命令或查询系统表
- 采集原始指标(QPS、TPS、慢查询、连接数、复制状态、CPU、内存、磁盘等)
- 将原始数据发送给本地 analysis 进程
analysis(分析进程)
- 接收 collector 上报的原始指标
- 做本地汇总、聚合、阈值判断
- 生成可上报的监控数据点(如平均值、最大值、增长率)
bash
[root@tdsql1 state]# jps -m
44886 Application /data/application/tdsql_analysis/conf.properties
44841 Application /data/application/tdsql_collector/conf.properties
5. ZooKeeper 进程
ZooKeeper是 TDSQL 分布式集群的元数据中枢与分布式协调服务 ,为控制面(OSS / Keeper)和节点面(oc_agent / mysql_agent)提供统一的配置管理、分布式锁、选主与状态同步能力。TDSQL中通常以 奇数节点组成 ZK 集群,通过 ZAB 协议保证数据一致性与高可用。
5.1 核心职责
元数据与配置中心
- 存储集群拓扑:
/tdsqlzk/set/、/tdsqlzk/proxy/ - 存储任务队列:
/tdsqlzk/task/ - 存储调度状态:
/tdsqlzk/scheduler/
分布式锁与选主
- Scheduler 选主:多个 Scheduler 争抢 ZK 临时节点,只有一个成为 Leader
- 主备切换:通过 ZK 上的临时节点与 watch 机制触发
- 任务串行化:通过 ZK 锁防止并发调度冲突
状态同步与 Watch
- mysql_agent 定期上报心跳到 ZK
- Keeper 通过 watch 感知节点变化
- 配置变更后,ZK 主动通知监听组件
高可用保障
- 奇数节点容忍
(n-1)/2节点故障 - Leader 故障后自动触发重新选举
- 所有写操作通过 ZAB 协议保证顺序一致性
bash
[root@tdsql1 tdsqlinstall]# jps -m
6071 Jps -m
18471 QuorumPeerMain /data/application/zookeeper/bin/../conf/zoo.cfg
6. Proxy 模块
在 TDSQL 中,Proxy(网关)部署在 DB 节点或独立 Proxy 节点上,每个网关端口(如 15001、15002、15003)对应一组独立进程。以端口 1500x 为例,其运行目录下通常包含以下三类进程:
6.1 router_update(路由更新进程)
-
进程作用
- 负责监听 ZK 中路由变更
- 当 Set 主备切换、节点上下线、读写分离规则变化时,及时拉取最新路由表
- 将新路由信息同步给本地的
mysql-proxy进程,保证请求转发准确
-
启动方式 :
./router_update /data/tdsql_run/1500x/gateway/conf/instance_1500x.cnf -
运行特点
- 每个网关端口 2 个进程(主备或双活模型,视部署版本)
- 轻量级常驻进程,不直接处理业务 SQL
- 依赖 ZK 的 watch 机制,路由变化秒级生效
6.2 mysql-proxy (请求分发进程)
-
进程作用
- TDSQL 的 SQL 请求入口
- 负责客户端连接的接入、SQL 解析、路由分发,支持:读写分离、分库分表路由、连接池管理等;
-
启动方式 :
./mysql-proxy /data/tdsql_run/1500x/gateway/conf/instance_1500x.cnf -
运行特点
- 每个网关端口 2 个进程(高可用或负载分担)
- 直接面向业务,承载大量并发连接
- 路由信息来自
router_update的同步
6.3 dcagent_tokafka(日志采集进程)
-
进程作用
- 实时采集 Proxy 访问日志、SQL 审计日志
- 将日志格式化后发送到 Kafka 消息队列
- 为上层审计、分析、监控平台提供数据源
-
启动方式 :
./dcagent_tokafka ../conf/wagent_1500x.xml -
运行特点
- 每个网关端口 2 个进程
- 只做日志转发,不参与 SQL 执行
- 与 Monitor 的 职责不同:
collector采指标,dcagent_tokafka采日志
7. DB 模块
在 TDSQL 中,每个 DB 实例(如端口 400x)在节点上由一组独立进程组成,运行目录通常位于 /data/tdsql_run/400x/。与 Proxy 层类似,DB 层进程同样由 oc_agent 通过 process_monitor.sh 统一保活。
7.1 mysqld_safe(守护进程)
-
进程作用
mysqld的 安全守护进程- 负责启动、监控并自动拉起
mysqld - 在
mysqld异常退出时,根据配置决定是否重启
-
运行特点
- 每个实例 1 个
mysqld_safe进程 - 不直接处理 SQL,只负责看护
mysqld - 是
mysqld的父进程
- 每个实例 1 个
bash
[root@tdsql1 state]# ps -ef |grep mysqld_safe
tdsql 22217 1 0 17:00 ? 00:00:00 /bin/sh ./bin/mysqld_safe --defaults-file=/data/tdsql_run/4001/percona-5.7.17/etc/my_4001.cnf --user=tdsql
tdsql 22306 1 0 17:00 ? 00:00:00 /bin/sh ./bin/mysqld_safe --defaults-file=/data/tdsql_run/4002/mysql-server-8.0.18/etc/my_4002.cnf --user=tdsql
7.2 mysqld(数据库主进程)
-
进程作用
- TDSQL 的 核心数据库引擎
- 负责 SQL 解析、执行、事务管理、锁管理、数据读写
- 处理来自 Proxy 的转发请求
-
数据目录
- 数据文件位于
/data/tdsql_run/400x/dbdata_raw/,包含数据文件(.ibd、.frm)、事务日志(redo / undo)、binlog 文件等。
- 数据文件位于
bash
[root@tdsql1 state]# ps -ef |grep mysqld
/data/tdsql_run/4002/mysql-server-8.0.18/bin/mysqld --defaults-file=/data/tdsql_run/4002/mysql-server-8.0.18/etc/my_4002.cnf --basedir=/data/tdsql_run/4002/mysql-server-8.0.18 --datadir=/data/4002/dbdata_raw/data --plugin-dir=/data/tdsql_run/4002/mysql-server-8.0.18/lib/plugin --log-error=/data/4002/dblogs/mysqld.err --open-files-limit=100000 --pid-file=/data/4002/prod/mysql.pid --socket=/data/4002/prod/mysql.sock --port=4002
./bin/mysqld --defaults-file=/data/tdsql_run/4001/percona-5.7.17/etc/my_4001.cnf --basedir=. --datadir=/data/4001/dbdata_raw/data --plugin-dir=/data/tdsql_run/4001/percona-5.7.17/lib/mysql/plugin --log-error=/data/4001/dblogs/mysqld.err --open-files-limit=100000 --pid-file=/data/4001/prod/mysql.pid --socket=/data/4001/prod/mysql.sock --port=4001
-
运行特点
- 每个实例 1 个
mysqld进程 - 资源占用最高,是 CPU / 内存 / IO 的主要消耗者
- 由
mysqld_safe启动并守护
- 每个实例 1 个
7.3 mysqlreport(消息上报进程)
-
进程作用
- 负责将 DB 实例的运行状态、心跳、复制信息 上报给 ZK/Keeper
- 为 Scheduler 提供主备状态、延迟、存活信息
- 参与主备切换的决策链路
-
启动方式:
./mysqlreport ../conf/mysqlagent_400x.xml -
运行特点
- 每个实例 2 个进程(高可用或双写模型)
- 只上报,不处理业务 SQL
- 与
mysqld解耦,避免影响数据库性能
7.4 binlogproducter(多源同步生产者进程)
-
进程作用
- 负责 读取、解析 binlog
- 将 binlog 事件封装为消息,发送到 Kafka 消息队列
- 为 多源同步、异构同步、审计、恢复 提供数据来源
-
启动方式 :
./binlogproducter[_percona] ../conf/mysqlagent_400x.xml -
运行特点
- 每个实例 2 个进程
- 只做 binlog 采集与转发,不参与 SQL 执行
本文系统梳理了 TDSQL 集群中控制面(OSS/Keeper/ZK)、节点面(oc_agent/Proxy/DB)及可观测面(Monitor)的核心组件与进程模型,结合日志体系与自愈流程,为日常运维、故障排查与架构优化提供了参考。
这里是《实战派K8S&DB》,如果本文对你有所帮助,欢迎点赞、推荐和转发,也欢迎关注后续文章,一起考证、一起学习数据库技术。