TDSQL 核心模块与进程体系

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 的父进程
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 启动并守护

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》,如果本文对你有所帮助,欢迎点赞、推荐和转发,也欢迎关注后续文章,一起考证、一起学习数据库技术。

相关推荐
Rooting++1 小时前
用友打包的APP壳子怎么获取SHA1码?
运维·服务器
FfHUCisI1 小时前
Go 性能分析工具 pprof:CPU、Heap 与 Goroutine 实战
数据库·golang
云飞云共享云桌面1 小时前
降本 + 护图纸:珠海制造装备工厂 SolidWorks 服务器共享设计方案
运维·服务器·制造
仍然.1 小时前
Redis---分布式锁
数据库·redis·分布式
ly76891 小时前
MongoDB 副本集选举风暴排查:从心跳超时到 Journal 刷盘阻塞
数据库·mongodb·php·mongodb 副本集·选举风暴·journal 刷盘·writeconcern
Lost_the_wind1 小时前
MySQL 学习笔记三
笔记·学习·mysql
刘天远1 小时前
Agent成本核算实现:事件表、状态分布与Python归集
前端·数据库·人工智能·python
anxiao_m2 小时前
内外网文件交换如何兼顾安全与效率?2026企业工具选型攻略
运维·服务器·安全
hey you~2 小时前
通话记录与工单关联数据库设计:ER图、中间表、索引优化与分库分表(2026版)
数据库·分库分表·客服系统·数据一致性·后端开发·通话记录·跨系统查询