Docker部署Seata:从单机到集群的完整指南

张开发
2026/6/8 22:52:44 15 分钟阅读
Docker部署Seata:从单机到集群的完整指南
1. 为什么选择Docker部署Seata如果你正在搭建分布式系统事务一致性是个绕不开的话题。Seata作为阿里开源的分布式事务解决方案能帮你优雅地处理跨服务的事务问题。而Docker化部署让整个过程变得像搭积木一样简单。我去年在电商项目中第一次用Seata当时手动部署花了整整两天。后来切换到Docker方案部署时间缩短到20分钟。最让我惊喜的是用Docker可以轻松实现单机测试和集群生产的无缝切换这在传统部署方式里简直不敢想。单机模式适合开发和测试环境所有组件跑在同一个容器里。而生产环境你需要集群部署这时候Docker的优势就凸显出来了——通过简单的配置调整就能扩展节点配合Nacos还能实现服务自动发现。下面这张表帮你快速理解两种模式的区别特性单机模式集群模式适用场景开发测试生产环境性能较低高可用数据存储本地文件MySQL/Redis扩展性不可扩展动态扩容配置复杂度简单需要注册中心2. 单机模式快速上手2.1 准备你的Docker环境先确保你的机器已经安装Docker CE 18.06版本。我推荐使用Linux系统如果是Windows记得启用WSL2。检查Docker是否就绪docker --version docker-compose --version接着创建必要的目录结构。这个步骤很多教程会忽略但实际非常重要mkdir -p ~/seata/{config,logs}config目录存放所有配置文件logs目录收集运行时日志。这种分离式结构方便后续维护升级时也不会丢失数据。2.2 拉取镜像并初始化配置官方提供了开箱即用的镜像建议选择1.4.2这个稳定版本docker pull seataio/seata-server:1.4.2这里有个小技巧——先用临时容器提取默认配置docker run -d --name seata-temp -p 8091:8091 seataio/seata-server:1.4.2 docker cp seata-temp:/seata-server/resources ~/seata/config docker stop seata-temp docker rm seata-temp现在你的~/seata/config目录下应该有完整的配置文件了。重点看这两个文件registry.conf- 服务注册配置file.conf- 存储相关配置2.3 启动单机服务单机模式最简单直接挂载配置文件启动docker run -d --name seata-server \ -p 8091:8091 \ -v ~/seata/config:/seata-server/resources \ -v ~/seata/logs:/root/logs \ seataio/seata-server:1.4.2验证服务是否正常curl http://localhost:8091/seata/health看到返回{status:UP}就说明启动成功了。单机模式默认使用文件存储所有事务数据会保存在容器内的file_store/data目录。3. 生产级集群部署3.1 数据库准备集群模式需要共享存储MySQL是最常用的选择。先创建专用数据库CREATE DATABASE seata_db CHARACTER SET utf8mb4; CREATE USER seata% IDENTIFIED BY Seata_123; GRANT ALL PRIVILEGES ON seata_db.* TO seata%;然后导入官方提供的SQL脚本创建三张核心表global_table- 存储全局事务branch_table- 存储分支事务lock_table- 存储锁数据3.2 配置中心集成生产环境强烈建议搭配Nacos使用。修改registry.confregistry { type nacos nacos { serverAddr nacos-host:8848 namespace seata-ns cluster default } } config { type nacos nacos { serverAddr nacos-host:8848 dataId seataServer.properties } }在Nacos控制台创建对应的seataServer.properties配置关键参数包括store.modedb store.db.datasourcedruid store.db.dbTypemysql store.db.urljdbc:mysql://mysql-host:3306/seata_db store.db.userseata store.db.passwordSeata_1233.3 启动集群节点用Docker Compose管理多个节点最方便。创建docker-compose.ymlversion: 3 services: seata-node1: image: seataio/seata-server:1.4.2 ports: - 8091:8091 volumes: - ./config:/seata-server/resources environment: - SEATA_IPyour-host-ip - SEATA_PORT8091 seata-node2: image: seataio/seata-server:1.4.2 ports: - 8092:8091 volumes: - ./config:/seata-server/resources environment: - SEATA_IPyour-host-ip - SEATA_PORT8092启动集群docker-compose up -d --scale seata-node34. 常见问题排查4.1 连接Nacos失败如果看到Nacos registry connect error日志检查三点Nacos服务是否可达命名空间(namespace)是否正确集群名称(cluster)是否匹配4.2 事务不生效典型症状是GlobalTransactional注解没起作用。按这个顺序检查确认客户端和服务端版本一致检查service.vgroupMapping配置查看Seata控制台是否有异常日志4.3 性能调优建议高并发场景下可以调整这些参数server.session.branchAsyncQueueSize- 异步队列大小transport.threadFactory.workerThreadSize- 工作线程数store.db.maxConn- 数据库连接池大小记得在压力测试时监控这些指标TPS (每秒事务数)平均响应时间异常率我在金融项目中最开始没调优TPS只能到200左右。优化后稳定支持1500TPS关键是把workerThreadSize从默认值调到CPU核数的2倍。

更多文章