使用 docker-compose 部署 Seata Server

注意事项

  • 避免直接拉取latest版本镜像,latest版本并不一定是稳定版本,为避免不必要的问题,请到docker镜像仓库确定要拉取的镜像版本。
  • Seata Server 1.5.0版本开始,配置文件改为application.yml,所以在使用自定义配置的时候,需要先把原生配置拷贝出来。

使用自定义配置文件

为了获取seata server 1.5.0的配置文件,我们需要先启动一个seata server 1.5.0的服务,然后再从启动的容器实例中把默认的配置文件复制出来,再进行修改。

docker-compose.yaml

  1. version: "3.1"
  2. services:
  3. seata-server:
  4. image: seataio/seata-server:${latest-release-version}
  5. ports:
  6. - "7091:7091"
  7. - "8091:8091"

接下来通过docker cp命令把容器中/seata-server/resources位置的资源文件拷贝到宿主机指定位置。 在宿主机指定位置我们就可以看到对应的application.yml配置文件,相关的配置只需要修改这个文件即可。

application.yml配置可参考application.example.yml

快速开始

无注册中心,file存储

该模式下,不需要注册中心,也不需要任何第三方存储中心。

docker-compose.yaml

  1. version: "3.1"
  2. services:
  3. seata-server:
  4. image: seataio/seata-server:${latest-release-version}
  5. hostname: seata-server
  6. ports:
  7. - "7091:7091"
  8. - "8091:8091"
  9. environment:
  10. - SEATA_PORT=8091
  11. - STORE_MODE=file

无注册中心,DB存储

db模式需要在数据库创建对应的表结构,[建表脚本]

(1)application.yml配置文件

application.yml配置可参考application.example.yml

更多存储模式支持可参考更多存储模式

  1. server:
  2. port: 7091
  3. spring:
  4. application:
  5. name: seata-server
  6. logging:
  7. config: classpath:logback-spring.xml
  8. file:
  9. path: ${user.home}/logs/seata
  10. extend:
  11. logstash-appender:
  12. destination: 127.0.0.1:4560
  13. kafka-appender:
  14. bootstrap-servers: 127.0.0.1:9092
  15. topic: logback_to_logstash
  16. console:
  17. user:
  18. username: seata
  19. password: seata
  20. seata:
  21. config:
  22. # support: nacos, consul, apollo, zk, etcd3
  23. type: file
  24. registry:
  25. # support: nacos, eureka, redis, zk, consul, etcd3, sofa
  26. type: file
  27. store:
  28. # support: file 、 db 、 redis
  29. mode: db
  30. db:
  31. datasource: druid
  32. dbType: mysql
  33. # 需要根据mysql的版本调整driverClassName
  34. # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
  35. # mysql8以下版本的driver:com.mysql.jdbc.Driver
  36. driverClassName: com.mysql.cj.jdbc.Driver
  37. url: jdbc:mysql://127.0.0.1:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  38. user: 用户名
  39. password: 密码
  40. # server:
  41. # service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  42. security:
  43. secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
  44. tokenValidityInMilliseconds: 1800000
  45. ignore:
  46. urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

(2)准备docker-compose.yaml文件

  1. version: "3.1"
  2. services:
  3. seata-server:
  4. image: seataio/seata-server:1.5.2
  5. ports:
  6. - "7091:7091"
  7. - "8091:8091"
  8. environment:
  9. - STORE_MODE=db
  10. # 以SEATA_IP作为host注册seata server
  11. - SEATA_IP=seata_ip
  12. - SEATA_PORT=8091
  13. volumes:
  14. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" #设置系统时区
  15. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" #设置时区
  16. # 假设我们通过docker cp命令把资源文件拷贝到相对路径`./seata-server/resources`中
  17. # 如有问题,请阅读上面的[注意事项]以及[使用自定义配置文件]
  18. - "./seata-server/resources:/seata-server/resources"

nacos注册中心,db存储

db模式需要在数据库创建对应的表结构,[建表脚本]

(1)application.yml配置文件

application.yml配置可参考application.example.yml

nacos注册中心。

  1. server:
  2. port: 7091
  3. spring:
  4. application:
  5. name: seata-server
  6. logging:
  7. config: classpath:logback-spring.xml
  8. file:
  9. path: ${user.home}/logs/seata
  10. extend:
  11. logstash-appender:
  12. destination: 127.0.0.1:4560
  13. kafka-appender:
  14. bootstrap-servers: 127.0.0.1:9092
  15. topic: logback_to_logstash
  16. console:
  17. user:
  18. username: seata
  19. password: seata
  20. seata:
  21. config:
  22. # support: nacos, consul, apollo, zk, etcd3
  23. type: nacos
  24. nacos:
  25. server-addr: nacos_ip:nacos_port
  26. namespace: seata-server
  27. group: SEATA_GROUP
  28. username: nacos
  29. password: nacos
  30. data-id: seataServer.properties
  31. registry:
  32. # support: nacos, eureka, redis, zk, consul, etcd3, sofa
  33. type: nacos
  34. nacos:
  35. application: seata-server
  36. server-addr: nacos_ip:nacos_port
  37. group: SEATA_GROUP
  38. namespace: seata-server
  39. # tc集群名称
  40. cluster: default
  41. username: nacos
  42. password: nacos
  43. # server:
  44. # service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  45. security:
  46. secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
  47. tokenValidityInMilliseconds: 1800000
  48. ignore:
  49. urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

(2)准备nacos配置中心配置

更多存储模式支持可参考更多存储模式

你需要在nacos新建配置,此处dataId为seataServer.properties

  1. store.mode=db
  2. #-----db-----
  3. store.db.datasource=druid
  4. store.db.dbType=mysql
  5. # 需要根据mysql的版本调整driverClassName
  6. # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
  7. # mysql8以下版本的driver:com.mysql.jdbc.Driver
  8. store.db.driverClassName=com.mysql.cj.jdbc.Driver
  9. store.db.url=jdbc:mysql://127.0.0.1:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  10. store.db.user= 用户名
  11. store.db.password=密码
  12. # 数据库初始连接数
  13. store.db.minConn=1
  14. # 数据库最大连接数
  15. store.db.maxConn=20
  16. # 获取连接时最大等待时间 默认5000,单位毫秒
  17. store.db.maxWait=5000
  18. # 全局事务表名 默认global_table
  19. store.db.globalTable=global_table
  20. # 分支事务表名 默认branch_table
  21. store.db.branchTable=branch_table
  22. # 全局锁表名 默认lock_table
  23. store.db.lockTable=lock_table
  24. # 查询全局事务一次的最大条数 默认100
  25. store.db.queryLimit=100
  26. # undo保留天数 默认7天,log_status=1(附录3)和未正常清理的undo
  27. server.undo.logSaveDays=7
  28. # undo清理线程间隔时间 默认86400000,单位毫秒
  29. server.undo.logDeletePeriod=86400000
  30. # 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试
  31. # 公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试
  32. # 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用
  33. server.maxCommitRetryTimeout=-1
  34. # 二阶段回滚重试超时时长
  35. server.maxRollbackRetryTimeout=-1
  36. # 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
  37. server.recovery.committingRetryPeriod=1000
  38. # 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
  39. server.recovery.asynCommittingRetryPeriod=1000
  40. # 二阶段回滚状态重试回滚线程间隔时间 默认1000,单位毫秒
  41. server.recovery.rollbackingRetryPeriod=1000
  42. # 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
  43. server.recovery.timeoutRetryPeriod=1000

(3)准备docker-compose.yaml文件

  1. version: "3.1"
  2. services:
  3. seata-server:
  4. image: seataio/seata-server:1.5.2
  5. ports:
  6. - "7091:7091"
  7. - "8091:8091"
  8. environment:
  9. - STORE_MODE=db
  10. # 以SEATA_IP作为host注册seata server
  11. - SEATA_IP=seata_ip
  12. - SEATA_PORT=8091
  13. volumes:
  14. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" #设置系统时区
  15. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" #设置时区
  16. # 假设我们通过docker cp命令把资源文件拷贝到相对路径`./seata-server/resources`中
  17. # 如有问题,请阅读上面的[注意事项]以及[使用自定义配置文件]
  18. - "./seata-server/resources:/seata-server/resources"

高可用部署

seata高可用依赖于注册中心、数据库,可不依赖配置中心。

请保证多个Seata Server使用同一个注册中心和同一个存储中心,这样才能形成高可用部署

db模式需要在数据库创建对应的表结构,[建表脚本]

(1)application.yml配置文件

application.yml配置可参考application.example.yml

更多存储模式支持可参考更多存储模式

  1. server:
  2. port: 7091
  3. spring:
  4. application:
  5. name: seata-server
  6. logging:
  7. config: classpath:logback-spring.xml
  8. file:
  9. path: ${user.home}/logs/seata
  10. extend:
  11. logstash-appender:
  12. destination: 127.0.0.1:4560
  13. kafka-appender:
  14. bootstrap-servers: 127.0.0.1:9092
  15. topic: logback_to_logstash
  16. console:
  17. user:
  18. username: seata
  19. password: seata
  20. seata:
  21. config:
  22. # support: nacos, consul, apollo, zk, etcd3
  23. type: nacos
  24. nacos:
  25. server-addr: nacos_ip:nacos_port
  26. namespace: seata-server
  27. group: SEATA_GROUP
  28. usernam: nacos
  29. password: nacos
  30. data-id: seataServer.properties
  31. registry:
  32. # support: nacos, eureka, redis, zk, consul, etcd3, sofa
  33. type: nacos
  34. nacos:
  35. application: seata-server
  36. server-addr: nacos_ip:nacos_port
  37. group: SEATA_GROUP
  38. namespace: seata-server
  39. # tc集群名称
  40. cluster: default
  41. username: nacos
  42. password: nacos
  43. # store:
  44. # support: file 、 db 、 redis
  45. # mode: file
  46. # server:
  47. # service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  48. security:
  49. secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
  50. tokenValidityInMilliseconds: 1800000
  51. ignore:
  52. urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

(2)准备nacos配置中心配置

更多存储模式支持可参考更多存储模式

你需要在nacos新建配置,此处dataId为seataServer.properties

  1. store.mode=db
  2. #-----db-----
  3. store.db.datasource=druid
  4. store.db.dbType=mysql
  5. # 需要根据mysql的版本调整driverClassName
  6. # mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
  7. # mysql8以下版本的driver:com.mysql.jdbc.Driver
  8. store.db.driverClassName=com.mysql.cj.jdbc.Driver
  9. store.db.url=jdbc:mysql://127.0.0.1:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  10. store.db.user= 用户名
  11. store.db.password=密码
  12. # 数据库初始连接数
  13. store.db.minConn=1
  14. # 数据库最大连接数
  15. store.db.maxConn=20
  16. # 获取连接时最大等待时间 默认5000,单位毫秒
  17. store.db.maxWait=5000
  18. # 全局事务表名 默认global_table
  19. store.db.globalTable=global_table
  20. # 分支事务表名 默认branch_table
  21. store.db.branchTable=branch_table
  22. # 全局锁表名 默认lock_table
  23. store.db.lockTable=lock_table
  24. # 查询全局事务一次的最大条数 默认100
  25. store.db.queryLimit=100
  26. # undo保留天数 默认7天,log_status=1(附录3)和未正常清理的undo
  27. server.undo.logSaveDays=7
  28. # undo清理线程间隔时间 默认86400000,单位毫秒
  29. server.undo.logDeletePeriod=86400000
  30. # 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试
  31. # 公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试
  32. # 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用
  33. server.maxCommitRetryTimeout=-1
  34. # 二阶段回滚重试超时时长
  35. server.maxRollbackRetryTimeout=-1
  36. # 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
  37. server.recovery.committingRetryPeriod=1000
  38. # 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
  39. server.recovery.asynCommittingRetryPeriod=1000
  40. # 二阶段回滚状态重试回滚线程间隔时间 默认1000,单位毫秒
  41. server.recovery.rollbackingRetryPeriod=1000
  42. # 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
  43. server.recovery.timeoutRetryPeriod=1000

(3)准备docker-compose.yaml文件

只要保持配置一致,seata服务可在一台机器上部署多实例,也可同时部署在多台不同的主机下面实现服务高可用。 高可用部署

  1. version: "3.1"
  2. services:
  3. seata-server-1:
  4. image: seataio/seata-server:${latest-release-version}
  5. ports:
  6. - "7091:7091"
  7. - "8091:8091"
  8. environment:
  9. - STORE_MODE=db
  10. # 以SEATA_IP作为host注册seata server
  11. - SEATA_IP=seata_ip
  12. - SEATA_PORT=8091
  13. volumes:
  14. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" #设置系统时区
  15. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" #设置时区
  16. # 假设我们通过docker cp命令把资源文件拷贝到相对路径`./seata-server/resources`中
  17. # 如有问题,请阅读上面的[注意事项]以及[使用自定义配置文件]
  18. - "./seata-server/resources:/seata-server/resources"
  19. seata-server-2:
  20. image: seataio/seata-server:${latest-release-version}
  21. ports:
  22. - "7092:7091"
  23. - "8092:8092"
  24. environment:
  25. - STORE_MODE=db
  26. # 以SEATA_IP作为host注册seata server
  27. - SEATA_IP=seata_ip
  28. - SEATA_PORT=8092
  29. volumes:
  30. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" #设置系统时区
  31. - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" #设置时区
  32. # 假设我们通过docker cp命令把资源文件拷贝到相对路径`./seata-server/resources`中
  33. # 如有问题,请阅读上面的[注意事项]以及[使用自定义配置文件]
  34. - "./seata-server/resources:/seata-server/resources"
  35. # seata服务3......seata服务N

环境变量

seata-server 支持以下环境变量:

  • SEATA_IP

可选, 指定seata-server启动的IP, 该IP用于向注册中心注册时使用, 如eureka等

  • SEATA_PORT

可选, 指定seata-server启动的端口, 默认为 8091

  • STORE_MODE

可选, 指定seata-server的事务日志存储方式, 支持db, file, redis(Seata-Server 1.3及以上版本支持), 默认是 file

  • SERVER_NODE

可选, 用于指定seata-server节点ID, 如 1,2,3…, 默认为 根据ip生成

  • SEATA_ENV

可选, 指定 seata-server 运行环境, 如 dev, test 等, 服务启动时会使用 registry-dev.conf 这样的配置

  • SEATA_CONFIG_NAME

可选, 指定配置文件位置, 如 file:/root/registry, 将会加载 /root/registry.conf 作为配置文件,如果需要同时指定 file.conf文件,需要将registry.confconfig.file.name的值改为类似file:/root/file.conf