ODC 生产环境部署最佳实践:MetaDB、Docker 与高可用架构配置全解析
ODC 生产环境部署最佳实践:MetaDB、Docker 与高可用架构配置全解析
【免费下载链接】odcOceanBase Developer Center(ODC), An open-source, enterprise-grade database tool for collaborative development项目地址: https://gitcode.com/gh_mirrors/od/odc
ODC(OceanBase Developer Center)是一款开源的企业级数据库开发协作工具,覆盖 SQL 开发、数据变更、安全规则、在线 DDL 等数据库研发全流程。要把它稳定地跑在生产环境,核心是三件事:MetaDB 元数据库配置、Docker 容器化部署、高可用架构规划。本文面向新手和运维同学,带你一步步搞懂 ODC 部署的关键配置项。
🧩 部署前先搞懂:ODC 的三种运行角色
ODC 服务端不只是一个进程,而是由三种角色组成的架构,理解它们是高可用部署的前提:
| 角色 | 启动脚本 | 职责 | 建议部署 |
|---|---|---|---|
| odc-server | script/start-odc.sh | Web 服务、API 网关,默认监听8989端口 | 多实例 + 负载均衡 |
| odc-job | script/start-job.sh | 任务执行器,执行数据变更等后台任务 | 独立节点,可水平扩展 |
| odc-supervisor | script/start-supervisor.sh | 监控并调度 job 节点的任务分发 | 与 server 同机 |
关键机制:所有角色共享同一个MetaDB(元数据库)。server 负责任务调度,job 节点从 MetaDB 拉取任务执行——这就是 ODC 高可用的基础。角色切换靠环境变量实现:
- 设置
ODC_BOOT_MODE=TASK_EXECUTOR→ 启动为任务执行器 - 设置
ODC_SUPERVISOR_LISTEN_PORT→ 启动为 supervisor 模式
🗄️ MetaDB 配置:ODC 部署的核心依赖
MetaDB 是 ODC 的"大脑",存储连接信息、流程记录、审计日志等全部元数据。生产环境强烈建议使用独立的 OceanBase 集群(MySQL 模式租户)作为 MetaDB。
启动必填的环境变量
查看script/start-odc.sh中的usage()函数可知,启动前必须设置:
DATABASE_HOST— MetaDB 地址DATABASE_PORT— MetaDB 端口DATABASE_USERNAME— MetaDB 用户DATABASE_PASSWORD— MetaDB 密码DATABASE_NAME— 元数据库名(建议odc_metadb)ODC_ADMIN_INITIAL_PASSWORD— 首次登录的 admin 初始密码(务必设置强密码)
💡好消息:MetaDB 的表结构无需手工建表。ODC 内置了server/odc-migrate/迁移模块(如 AbstractMetaDBMigrate),首次启动时自动完成建表和版本升级,且通过MetaDBLockConfiguration加锁,保证多实例并发启动时只有一个执行迁移。
🐳 Docker 部署:一条命令跑起来的推荐方式
生产环境推荐使用官方 Docker 镜像,源码见 Dockerfile。它有几个值得了解的设计:
- 多架构支持:通过
ARG ARCH参数同时支持amd64和arm64(x86 与国产 ARM 服务器均可部署) - 基础镜像安全:采用 AnolisOS 8.6,并锁定 root 账号、禁用 SSH 密码登录
- 进程守护:镜像内置 supervisor 作为 ENTRYPOINT,进程崩溃可自动拉起
- 端口:对外仅暴露8989一个 Web 端口
export DATABASE_HOST=your-metadb-host export DATABASE_PORT=2881 export DATABASE_USERNAME=odc@tenant export DATABASE_PASSWORD=your-password export DATABASE_NAME=odc_metadb export ODC_ADMIN_INITIAL_PASSWORD=your-strong-pwd docker run -d -p 8989:8989 --env-file .env odc-server构建相关脚本在distribution/docker/目录,RPM 离线包构建见script/build_rpm.sh,发布目录说明见 distribution/README.md。
⚙️ JVM 调优与高可用架构配置
生产级 JVM 参数(已内置,可覆盖)
script/start-odc.sh中默认启用了经过调优的参数,可直接按需覆盖:
| 参数 | 默认值 | 说明 |
|---|---|---|
ODC_JVM_HEAP_OPTIONS | MaxRAMPercentage=45% | 堆内存占物理内存 45%(K8S 环境自动提到 60%) |
ODC_JVM_GC_OPTIONS | G1GC + GC 日志 | GC 日志自动轮转,单文件 50M |
ODC_JVM_OOM_OPTIONS | +ExitOnOutOfMemoryError | OOM 立即退出,交给守护进程重启 |
例如给 16G 内存的机器配置 8G 堆:ODC_JVM_HEAP_OPTIONS="-Xms8g -Xmx8g"。
推荐的高可用拓扑
┌──────────────┐ 用户请求 ───▶ │ 负载均衡 │ └──────┬───────┘ ┌─────────┼─────────┐ ┌─────▼────┐ ┌──▼──────┐ │ │ odc-server│ │odc-server│ │ ← Web 层(无状态,可横向扩容) │ + supervisor │ └─────┬────┘ └──────────┘ │ │ 共享 │ ┌─────▼───────────────────▼─┐ │ MetaDB 集群 │ ← 建议 3 节点 OceanBase └─────┬───────────────────┬──┘ ┌─────▼────┐ ┌────▼─────┐ │ odc-job │ │ odc-job │ ← 任务执行层(独立部署) └──────────┘ └──────────┘最佳实践清单:
- ✅ Web 层部署2 个及以上odc-server 实例,通过 Nginx/K8S Service 负载均衡;实例间无状态,随意增删
- ✅ 大任务(批量数据变更、导出)多的场景,将 odc-job 部署到独立机器,避免任务占满 server 内存
- ✅ 使用
script/nohup-start-odc.sh或 systemd/Docker 守护,保证进程异常退出后自动恢复 - ✅ 关注
log/odc.log与log/gc.log,日志目录可用ODC_LOG_DIR自定义 - ✅ 端口默认 8989,如需修改设置
ODC_SERVER_PORT
📚 延伸阅读
- 开发者指南:docs/zh-CN/DEVELOPER_GUIDE.md
- 版本发布说明:docs/zh-CN/RELEASE_GUIDE.md
- 核心服务模块:
server/odc-service/(连接、流程、任务等 40+ 子模块) - Web 启动入口:OdcServer.java
掌握 MetaDB 配置、Docker 部署与角色分离这三个要点,你的 ODC 就能稳稳跑在生产环境。🚀
【免费下载链接】odcOceanBase Developer Center(ODC), An open-source, enterprise-grade database tool for collaborative development项目地址: https://gitcode.com/gh_mirrors/od/odc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
