前言
本教程将使用 Docker 安装单机版的 Seata Server、Nacos、MySQL,并实现以下配置目标:
- (1) 配置 Seata Server 使用 Nacos 作为注册中心
- (2) 配置 Seata Server 使用 Nacos 作为配置中心
- (3) 配置 Nacos 将配置信息存储(持久化)到 MySQL 中
- (4) 基于 Nacos 配置中心,配置 Seata Server 使用 MySQL 数据库来存储全局事务会话信息
官方资源
版本说明
中间件 | 版本 |
---|
Docker | 24.0.5 |
Docker Compose | 2.20.2 |
MySQL | 8.4.2 |
Nacos Server | 2.4.3 |
Seata Server | 2.2.0 |
知识回顾
Seata 的三大角色
Seata 分 TC、TM 和 RM 三个角色,TC(Server 端)需要单独作为服务端部署,TM 和 RM(Client 端)由业务系统集成(如 Maven、Gradle)。
- TC(Transaction Coordinator):事务协调器,维护全局和分支事务的状态,负责协调并驱动全局事务的提交或回滚。
- TM(Transaction Manager):事务管理器,控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
- RM(Resource Manager):资源管理器,负责管理分支事务上的资源,向 TC 注册分支事务,上报分支事务的状态,接受 TC 的命令来提交或者回滚分支事务。
Seata 的配置文件
特别注意
Seata Server(TC) 从 1.5.0
版本开始,配置文件改为 application.yml
(这也是本文使用的配置方式),同时向下兼容旧的 register.conf
和 file.conf
两个配置文件。
Seata Server(TC)有两个核心配置文件,分别是 registry.conf
与 file.conf
,它们的作用与配置示例如下:
registry.conf
用于指定 Seata Server(TC)的注册中心和获取配置信息的方式,默认获取方式是 file
。如果使用了其他注册中心,可以将 Seata Server 自身也注册到注册中心(如 Nacos)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| # 指定注册中心,支持 nacos、eureka、redis、zk 、consul、etcd3、sofa、seata registry { type = "nacos"
nacos { application = "seata-server" serverAddr = "127.0.0.1:8848" group = "seata_demo" namespace = "ee08c2b7-2b41-4e9d-aeae-aae35a8dbd1d" cluster = "default" username = "" password = "" } }
# 指定获取配置信息的方式,支持 file, nacos、consul、apollo、zk、etcd3 config { type = "file"
file { name = "file.conf" } }
|
file.conf
用于指定 Seata Server(TC)的相关配置。如果使用了配置中心,可以将 file.conf
文件里的配置信息都存储到配置中心(如 Nacos)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| service { vgroupMapping.default_tx_group = "default" disableGlobalTransaction = false }
...(省略)
# 指定存储模式,即用什么来存储 Seata Server(TC)的全局事务会话信息 store { mode = "db"
db { dbType = "mysql" datasource = "druid" driverClassName = "com.mysql.cj.jdbc.Driver" url = "jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false" user = "root" password = "123456" minConn = 5 maxConn = 100 globalTable = "global_table" branchTable = "branch_table" lockTable = "lock_table" queryLimit = 100 maxWait = 5000 } }
|
总结
registry.conf
:管理注册中心和配置中心的配置,确保 Seata Server(TC)和 Client 在分布式系统中进行服务发现和配置共享。file.conf
:主要用于事务管理和存储配置,确保 Seata Server(TC)能够管理事务并进行持久化存储。- Seata Server(TC)的
registry.conf
和 file.conf
文件的配置示例可以参考 GitHub 项目。
Seata 的存储模式
Seata Server(TC)的默认存储模式为 file
,若使用 file
模式则无需改动任何配置,直接启动即可,每种模式的说明如下:
file
模式为单机模式,全局事务会话信息在内存中读写,并持久化为本地文件 root.data
,性能较高。db
模式为高可用模式,全局事务会话信息通过数据库共享,性能会差一点。redis
模式在 Seata Server 1.3 及以上版本开始支持,性能较高,但存在事务信息丢失风险,需要配置适合当前业务场景的 Redis 持久化策略。
准备工作
下载 Seata 项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| $ wget https://github.com/apache/incubator-seata/archive/refs/tags/v2.2.0.tar.gz -O incubator-seata-2.2.0.tar.gz
$ tar -xvf incubator-seata-2.2.0.tar.gz
$ mv incubator-seata-2.2.0 seata
$ cd seata
$ tree ./script/ ├── client │ ├── at │ │ └── db │ │ ├── dm.sql │ │ ├── mysql.sql │ │ ├── oracle.sql │ │ ├── postgresql.sql │ │ └── sqlserver.sql │ ├── conf │ │ ├── file.conf │ │ └── registry.conf │ ├── saga │ │ └── db │ │ ├── db2.sql │ │ ├── h2.sql │ │ ├── mysql.sql │ │ ├── oracle.sql │ │ └── postgresql.sql │ ├── spring │ │ ├── application.properties │ │ └── application.yml │ └── tcc │ └── db │ ├── mysql.sql │ ├── oracle.sql │ └── postgresql.sql ├── config-center │ ├── apollo │ │ ├── apollo-config-interactive.sh │ │ └── apollo-config.sh │ ├── config.txt │ ├── consul │ │ ├── consul-config-interactive.sh │ │ └── consul-config.sh │ ├── etcd3 │ │ ├── etcd3-config-interactive.sh │ │ └── etcd3-config.sh │ ├── nacos │ │ ├── nacos-config-interactive.py │ │ ├── nacos-config-interactive.sh │ │ ├── nacos-config.py │ │ └── nacos-config.sh │ ├── README.md │ └── zk │ ├── zk-config-interactive.sh │ └── zk-config.sh ├── logstash │ └── config │ ├── logstash-kafka.conf │ └── logstash-logback.conf └── server ├── db │ ├── dm.sql │ ├── mysql.sql │ ├── oracle.sql │ ├── postgresql.sql │ └── sqlserver.sql ├── docker-compose │ └── docker-compose.yaml ├── helm │ └── seata-server │ ├── Chart.yaml │ ├── templates │ │ ├── deployment.yaml │ │ ├── _helpers.tpl │ │ ├── NOTES.txt │ │ ├── service.yaml │ │ └── tests │ │ └── test-connection.yaml │ └── values.yaml └── kubernetes └── seata-server.yaml
|
目录作用说明:
client
:存放 Client 端 SQL 脚本(包含 undo_log
表),参数配置。server
:Server 端的数据库脚本(包含 lock_table
、branch_table
与 global_table
表)及各个容器配置。config-center
:各个配置中心的参数导入脚本,其中的 config.txt
(包含 Server 和 Client,原名是 nacos-config.txt
)为通用参数文件。
下载 Nacos 项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| $ wget https://github.com/alibaba/nacos/archive/refs/tags/2.4.3.tar.gz -O nacos-2.4.3.tar.gz
$ tar -xvf nacos-2.4.3.tar.gz
$ mv nacos-2.4.3 nacos
$ cd nacos
$ tree distribution/conf/ ├── 1.4.0-ipv6_support-update.sql ├── announcement_en-US.conf ├── announcement_zh-CN.conf ├── application.properties ├── application.properties.example ├── cluster.conf.example ├── console-guide.conf ├── derby-schema.sql ├── mysql-schema.sql └── nacos-logback.xml
|
下载 Nacos Docker 项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| $ wget https://github.com/nacos-group/nacos-docker/archive/refs/tags/v2.4.3.tar.gz -O nacos-docker-2.4.3.tar.gz
$ tar -xvf nacos-docker-2.4.3.tar.gz
$ mv nacos-docker-2.4.3 nacos-docker
$ cd nacos-docker
$ tree . ├── build │ ├── bin │ │ └── docker-startup.sh │ ├── conf │ │ └── application.properties │ ├── Dockerfile │ └── Dockerfile.Slim ├── changlog ├── env │ ├── custom-application-config.env │ ├── mysql.env │ ├── nacos-embedded.env │ ├── nacos-hostname.env │ ├── nacos-ip.env │ └── nacos-standlone-mysql.env ├── example │ ├── cluster-embedded.yaml │ ├── cluster-hostname.yaml │ ├── cluster-ip.yaml │ ├── custom-application-config.yaml │ ├── image │ │ └── mysql │ │ ├── 5.7 │ │ │ └── Dockerfile │ │ └── 8 │ │ └── Dockerfile │ ├── init.d │ │ └── application.properties │ ├── prometheus │ │ ├── prometheus-cluster.yaml │ │ └── prometheus-standalone.yaml │ ├── standalone-derby.yaml │ ├── standalone-mysql-5.7.yaml │ └── standalone-mysql-8.yaml ├── README.md └── README_ZH.md
|
Docker 安装 MySQL
创建数据目录
- 在宿主机内创建数据目录,用于挂载 MySQL 容器内的数据文件
1
| sudo mkdir -p /usr/local/mysql/data
|
创建 YML 配置文件
- 创建
docker-compose.yml
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| version: '3.5'
services: mysql: image: mysql:8.4.2 container_name: mysql-server command: ["mysqld", "--mysql-native-password=ON"] restart: always ports: - 3306:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 volumes: - '/usr/local/mysql/data:/var/lib/mysql' healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 5s timeout: 10s retries: 10 networks: - micro-network
networks: micro-network: driver: bridge
|
创建 MySQL 容器
- 使用 Docker Compose 创建并启动 MySQL 容器
为 Nacos 初始化数据库
- 拷贝数据库初始化脚本到 MySQL 容器内部,这里的初始化脚本可以从 Nacos 项目 中获取得到。特别注意,数据库初始化脚本与 Nacos 的版本必须互相匹配
1
| docker cp nacos/distribution/conf/mysql-schema.sql mysql-server:/
|
1 2 3 4 5
| docker exec -it mysql-server /bin/bash
mysql -h localhost -u root -p
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| mysql> CREATE USER 'nacos'@'%' IDENTIFIED WITH mysql_native_password BY 'nacos';
mysql> create database nacos_devtest default character set utf8;
mysql> GRANT ALL ON nacos_devtest.* TO 'nacos'@'%';
mysql> flush privileges;
mysql> use nacos_devtest;
mysql> source /mysql-schema.sql;
mysql> show tables; +------------------------+ | Tables_in_nacos_devtest | +------------------------+ | config_info | | config_info_aggr | | config_info_beta | | config_info_tag | | config_tags_relation | | group_capacity | | his_config_info | | permissions | | roles | | tenant_capacity | | tenant_info | | users | +------------------------+
|
为 Seata 初始化数据库
- 拷贝数据库初始化脚本到 MySQL 容器内部,这里的初始化脚本可以从 Seata 项目 中获取得到。特别注意,初始化脚本与 Seata Server(TC)的版本必须互相匹配
1
| docker cp incubator-seata/script/server/db/mysql.sql mysql-server:/
|
1 2 3 4 5
| docker exec -it mysql-server /bin/bash
mysql -h localhost -u root -p
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| # 创建用户 mysql> CREATE USER 'seata'@'%' IDENTIFIED WITH mysql_native_password BY 'seata';
# 创建数据库 mysql> create database seata default character set utf8;
# 用户授权访问 mysql> GRANT ALL ON seata.* TO 'seata'@'%';
# 刷新权限 mysql> flush privileges;
# 切换数据库 mysql> use seata;
# 执行数据库初始化脚本 mysql> source /mysql.sql;
# 查看数据库表 mysql> show tables; + | Tables_in_seata | + | branch_table | | distributed_lock | | global_table | | lock_table | | vgroup_table | +
|
Docker 安装 Nacos
创建日志目录
- 在宿主机内创建日志目录,用于挂载 Nacos 容器内的日志文件
1
| sudo mkdir -p /var/log/nacos/logs
|
编辑 YML 配置文件
在上面 docker-compose.yml
配置文件的基础上,添加 Nacos 的配置信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| version: '3.5'
services: mysql: image: mysql:8.4.2 container_name: mysql-server command: ["mysqld", "--mysql-native-password=ON"] restart: always ports: - 3306:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 volumes: - '/usr/local/mysql/data:/var/lib/mysql' healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 5s timeout: 10s retries: 10 networks: - micro-network
nacos: image: nacos/nacos-server:v2.4.3 container_name: nacos-server restart: always environment: - PREFER_HOST_MODE=hostname - MODE=standalone - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_DB_NAME=nacos_devtest - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=nacos - MYSQL_SERVICE_PASSWORD=nacos - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - NACOS_AUTH_IDENTITY_KEY=2222 - NACOS_AUTH_IDENTITY_VALUE=2xxx - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 volumes: - /var/log/nacos/logs:/home/nacos/logs ports: - "8848:8848" - "9848:9848" depends_on: mysql: condition: service_healthy networks: - micro-network
networks: micro-network: driver: bridge
|
- 重要参数说明:
SPRING_DATASOURCE_PLATFORM=mysql
:使用 MySQL 作为存储。MYSQL_SERVICE_PORT=3306
:指定 MySQL 的端口。MYSQL_SERVICE_USER=nacos
:指定连接 MySQL 时使用的用户名。MYSQL_SERVICE_PASSWORD=nacos
:指定连接 MySQL 时使用的密码。MYSQL_SERVICE_HOST=mysql
:这里的 mysql
是在 Docker Compose 中定义的 MySQL 服务的名称,用作其他服务(如 Nacos)访问 MySQL 的主机名,Docker Compose 会自动将这个名称解析为 MySQL 容器的 IP 地址。
提示
在上面的 YML 配置文件中,Nacos 容器的环境变量参考自 Nacos Docker 项目里的 YML 配置文件,即 nacos-docker/example/standalone-mysql-8.yaml
。
创建 Nacos 容器
- 使用 Docker Compose 创建并启动 Nacos 容器
测试 Nacos 容器
1
| docker logs -f --tail 50 nacos-server
|
1
| tail -f -n 50 /var/log/nacos/logs/nacos.log
|
- 浏览器通过
http://127.0.0.1:8848/nacos
访问 Nacos 的控制台管理页面,若是可以正常访问,则说明 Nacos 正常运行
Docker 安装 Seata
特别注意
这里尽量不要直接拉取 latest
版本的 Seata 镜像,因为 latest
版本并不一定是稳定版本。为避免不必要的问题,请到 Docker 镜像仓库 确定要拉取的镜像版本。
创建目录文件
创建 Seata 的日志目录
- 在宿主机内创建日志目录,用于挂载 Seata 容器内的日志文件
1
| sudo mkdir -p /var/log/seata/logs
|
创建 Seata 的配置文件
- 在宿主机内创建配置目录,用于挂载 Seata 容器内的配置文件
1
| sudo mkdir /usr/local/seata/config
|
1
| docker run -d -p 8091:8091 -p 7091:7091 --name seata-server seataio/seata-server:2.0.0
|
- 拷贝 Seata 临时容器内的
resources
目录文件
1
| docker cp seata-server:/seata-server/resources /usr/local/seata/config
|
1
| docker rm -f seata-server
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| tree /usr/local/seata/config/resources ├── application.example.yml ├── application.raft.example.yml ├── application.yml ├── banner.txt ├── docker ├── io ├── logback ├── logback-spring.xml ├── lua ├── META-INF ├── README.md └── README-zh.md
|
- 更改从 Seata 临时容器拷贝出来的配置文件
application.yml
,这里可以参考官方提供的 application.example.yml
示例配置文件来更改,最终更改后的内容如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| server: port: 7091
spring: application: name: seata-server
logging: config: classpath:logback-spring.xml file: path: ${log.home:${user.home}/logs/seata} extend: logstash-appender: destination: 127.0.0.1:4560 kafka-appender: bootstrap-servers: 127.0.0.1:9092 topic: logback_to_logstash
console: user: username: seata password: seata
seata: registry: type: nacos nacos: application: seata-server server-addr: nacos:8848 namespace: group: SEATA_GROUP cluster: default username: password:
config: type: nacos nacos: server-addr: nacos:8848 namespace: group: SEATA_GROUP data-id: seata-server.properties username: password:
server: service-port: 8091 security: secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017 tokenValidityInMilliseconds: 1800000 csrf-ignore-urls: /metadata/v1/** ignore: urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/version.json,/health,/error
|
重要参数说明:
group: SEATA_GROUP
:指定 Nacos 配置中心里面的分组名称。data-id: seata-server.properties
:指定 Nacos 配置中心里面的 Data ID。application: seata-server
:指定 Seata 注册进 Nacos 注册中心的服务名称。server-addr: nacos:8848
:这里的 nacos
是在 Docker Compose 中定义的 Nacos 服务的名称,用作其他服务(如 Seata)访问 Nacos 的主机名,Docker Compose 会自动将这个名称解析为 Nacos 容器的 IP 地址。
重要提示
- (1) 上面提到的
application.yml
配置文件,其实就是 SpringBoot 项目(Seata Server)的核心配置文件,其作用相当于 Seata Server(TC)的 registry.conf
文件,主要用于管理注册中心和配置中心的配置。 - (2) 这里除了创建临时容器之外,还可以直接拷贝 Seata 项目源码 里的
server/src/main/resources/application.yml
配置文件,然后更改对应的内容,最后将其挂载到 Seata 容器内的 /seata-server/resources/application.yml
路径位置。
编辑 YML 配置文件
在上面 docker-compose.yml
配置文件的基础上,添加 Seata 的配置信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| version: '3.5'
services: mysql: image: mysql:8.4.2 container_name: mysql-server command: ["mysqld", "--mysql-native-password=ON"] restart: always ports: - 3306:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=123456 volumes: - '/usr/local/mysql/data:/var/lib/mysql' healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 5s timeout: 10s retries: 10 networks: - micro-network
nacos: image: nacos/nacos-server:v2.4.3 container_name: nacos-server restart: always environment: - PREFER_HOST_MODE=hostname - MODE=standalone - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_DB_NAME=nacos_devtest - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=nacos - MYSQL_SERVICE_PASSWORD=nacos - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - NACOS_AUTH_IDENTITY_KEY=2222 - NACOS_AUTH_IDENTITY_VALUE=2xxx - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 volumes: - /var/log/nacos/logs:/home/nacos/logs ports: - "8848:8848" - "9848:9848" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"] interval: 10s timeout: 5s retries: 10 start_period: 30s depends_on: mysql: condition: service_healthy networks: - micro-network
seata: image: seataio/seata-server:2.0.0 container_name: seata-server restart: always ports: - 8091:8091 - 7091:7091 environment: - SEATA_PORT=8091 - TZ=Asia/Shanghai volumes: - /usr/local/seata/config/resources:/seata-server/resources - /var/log/seata/logs:/var/log/seata depends_on: mysql: condition: service_healthy nacos: condition: service_healthy networks: - micro-network
networks: micro-network: driver: bridge
|
重要提示
在上面的 Docker Compose 配置文件中,除了可以挂载包含了 application.yml
配置文件的 resources
目录之外,还可以直接挂载 Seata Server(TC)自定义的 registry.conf
和 file.conf
文件到 Seata 容器内,以此达到相同的目的,详细说明请看 这里。
创建 Nacos 配置
启动 Nacos 容器后,在 Nacos 的控制台管理页面中,创建事务分组配置,目的是将 Seata Server(TC)的 file.conf
文件里的配置信息都存储到 Nacos 配置中心。具体的配置项如下:
- Group:
SEATA_GROUP
,必须与上面 Seata 的 application.yml
配置文件一致。 - Data ID:
seata-server.properties
,必须与上面 Seata 的 application.yml
配置文件一致。 - Nacos 中的配置信息如下,最关键的是将 Seata Server(TC)的存储模式指定为
db
,即使用 MySQL 数据库来存储全局事务会话信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| store.mode=db store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://mysql:3306/seata?rewriteBatchedStatements=true store.db.user=seata store.db.password=seata store.db.minConn=10 store.db.maxConn=100 store.db.globalTable=global_table store.db.branchTable=branch_table store.db.lockTable=lock_table store.db.distributedLockTable=distributed_lock store.db.vgroupTable=vgroup_table store.db.queryLimit=1000 store.db.maxWait=5000
metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898
|
重要参数说明:
store.db.driverClassName=com.mysql.cj.jdbc.Driver
:指定 MySQL 驱动类,由于这里使用的是 MySQL 8 数据库,所以配置为 com.mysql.cj.jdbc.Driver
。store.db.url=xxxx://mysql:3306
:这里的 mysql
是在 Docker Compose 中定义的 MySQL 服务的名称,用作其他服务(如 Seata)访问 MySQL 的主机名,Docker Compose 会自动将这个名称解析为 MySQL 容器的 IP 地址。
重要提示
- (1) Seata 的全局事务会话信息由三块内容构成,全局事务 –> 分支事务 –> 全局锁,对应的表分别是
global_table
、branch_table
、lock_table
。 - (2) 这里除了可以将 MySQL 的配置信息存储在 Nacos 配置中心,还可以将对应的配置信息写在上面 Seata 的
application.yml
配置文件中,具体写法可以参考 Seata 官方提供的 application.example.yml
示例配置文件。 - (3) 特别注意,这里的使用的是 Properties 配置格式,跟上面 Seata 的
application.yml
配置文件中的 YML 格式有很大区别,比如使用 store.db.dbType
作为 Key,而不是使用 store.db.db-type
,如果书写格式有误,会导致 Seata 无法正常启动。简而言之,在 Nacos 配置中心里,正确的配置信息都应该与 Seata Server(TC)的 file.conf
文件的内容相对应。
创建 Seata 容器
- 使用 Docker Compose 创建并启动 Seata 容器
测试 Seata 容器
- 查看 Seata 容器的日志信息,如果没有出现错误日志信息,则说明 Seata 容器启动成功(即可以读取到 Nacos 配置中心的配置信息)
1
| docker logs -f --tail 50 seata-server
|
- 查看 Nacos 管理页面中的服务列表,如果看到 Seata 服务,则说明 Seata 服务成功注册进 Nacos 注册中心
- 浏览器通过
http://127.0.0.1:7091
访问 Seata 的控制台管理页面,登录用户名和密码为 seata / seata
常见错误
参考资料