• m1系列芯片aarch64架构使用docker-compose安装seata


     之前看到 DockerHub 上发布了 m1 芯片 aarch64 架构的 seata 镜像, 所以就尝试的安装了下, 亲测可用: 

    使用该命令查看正在运行的 seata 容器

    docker ps | grep seata

    一. docker-compose.yml 命令编写

    volumes 命令所指定的宿主机映射地址, 需要根据自己的电脑环境更换

    环境变量中的 seata_ip 也可以根据自己的需求更换, 这里用本机演示为例, 定义为 localhost

    网络组名称暂不指定, 可以在 yml 文件里补充 network 标签指定网络组名称

    1. version: "3.1"
    2. services:
    3. seata-server:
    4. image: seataio/seata-server:1.8.0-slim
    5. container_name: seate-server
    6. restart: always
    7. ports:
    8. - "7091:7091"
    9. - "8091:8091"
    10. environment:
    11. - STORE_MODE=db
    12. # 以SEATA_IP作为host注册seata server
    13. - SEATA_IP=localhost
    14. - SEATA_PORT=8091
    15. volumes:
    16. - "/Users/canxiusi/Documents/docker/seata/log:/root/logs/seata"
    17. # 使用宿主机的配置文件
    18. - "/Users/canxiusi/Documents/docker/seata/resources/application.yml:/seata-server/resources/application.yml"
    19. - "/Users/canxiusi/Documents/docker/seata/resources/logback-spring.xml:/seata-server/resources/logback-spring.xml"
    20. - "/Users/canxiusi/Documents/docker/seata/bin/seata-setup.sh:/seata-setup.sh"

    二. application-yml 配置文件

    其实就是一个 springboot 应用的配置文件, 本次只演示简单的使用, 日志/权限相关的配置, 暂时注释掉

    2.1 db模式下数据库表配置

    1. SET NAMES utf8mb4;
    2. SET FOREIGN_KEY_CHECKS = 0;
    3. DROP TABLE IF EXISTS `branch_table`;
    4. CREATE TABLE `branch_table` (
    5. `branch_id` bigint NOT NULL,
    6. `xid` varchar(128) NOT NULL,
    7. `transaction_id` bigint DEFAULT NULL,
    8. `resource_group_id` varchar(32) DEFAULT NULL,
    9. `resource_id` varchar(256) DEFAULT NULL,
    10. `branch_type` varchar(8) DEFAULT NULL,
    11. `status` tinyint DEFAULT NULL,
    12. `client_id` varchar(64) DEFAULT NULL,
    13. `application_data` varchar(2000) DEFAULT NULL,
    14. `gmt_create` datetime(6) DEFAULT NULL,
    15. `gmt_modified` datetime(6) DEFAULT NULL,
    16. PRIMARY KEY (`branch_id`),
    17. KEY `idx_xid` (`xid`)
    18. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    19. DROP TABLE IF EXISTS `distributed_lock`;
    20. CREATE TABLE `distributed_lock` (
    21. `lock_key` char(20) NOT NULL,
    22. `lock_value` varchar(20) NOT NULL,
    23. `expire` bigint DEFAULT NULL,
    24. PRIMARY KEY (`lock_key`)
    25. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    26. DROP TABLE IF EXISTS `global_table`;
    27. CREATE TABLE `global_table` (
    28. `xid` varchar(128) NOT NULL,
    29. `transaction_id` bigint DEFAULT NULL,
    30. `status` tinyint NOT NULL,
    31. `application_id` varchar(32) DEFAULT NULL,
    32. `transaction_service_group` varchar(32) DEFAULT NULL,
    33. `transaction_name` varchar(128) DEFAULT NULL,
    34. `timeout` int DEFAULT NULL,
    35. `begin_time` bigint DEFAULT NULL,
    36. `application_data` varchar(2000) DEFAULT NULL,
    37. `gmt_create` datetime DEFAULT NULL,
    38. `gmt_modified` datetime DEFAULT NULL,
    39. PRIMARY KEY (`xid`),
    40. KEY `idx_status_gmt_modified` (`status`,`gmt_modified`),
    41. KEY `idx_transaction_id` (`transaction_id`)
    42. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    43. DROP TABLE IF EXISTS `lock_table`;
    44. CREATE TABLE `lock_table` (
    45. `row_key` varchar(128) NOT NULL,
    46. `xid` varchar(128) DEFAULT NULL,
    47. `transaction_id` bigint DEFAULT NULL,
    48. `branch_id` bigint NOT NULL,
    49. `resource_id` varchar(256) DEFAULT NULL,
    50. `table_name` varchar(32) DEFAULT NULL,
    51. `pk` varchar(36) DEFAULT NULL,
    52. `status` tinyint NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    53. `gmt_create` datetime DEFAULT NULL,
    54. `gmt_modified` datetime DEFAULT NULL,
    55. PRIMARY KEY (`row_key`),
    56. KEY `idx_status` (`status`),
    57. KEY `idx_branch_id` (`branch_id`),
    58. KEY `idx_xid_and_branch_id` (`xid`,`branch_id`)
    59. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    60. SET FOREIGN_KEY_CHECKS = 1;

    2.2 使用nacos作为配置中心

    在 seata 的 application.yml 配置文件中, 指定了 nacos 作为配置中心和注册中心, 请确保 nacos 服务正在运行, 如果没有安装 nacos, 可以参考我的另外一篇博客: 

    ​​​​​​m1系列芯片aarch64架构使用docker-compose安装nacos_docker compose m1-CSDN博客

    之后在 nacos 控制台, 创建命名空间, 并在该命名空间下, 创建 seata.properties 配置文件

    该配置文件就是 seata 服务启动需要读取的配置文件

    以下配置均为 seata 官网默认配置, 根据自己需要调整

    1. store.mode=db
    2. #-----db-----
    3. store.db.datasource=druid
    4. store.db.dbType=mysql
    5. store.db.driverClassName=com.mysql.cj.jdbc.Driver
    6. store.db.url=jdbc:mysql://192.168.64.1:3306/seata
    7. store.db.user=root
    8. store.db.password=root123
    9. # 数据库初始连接数
    10. store.db.minConn=1
    11. # 数据库最大连接数
    12. store.db.maxConn=30
    13. # 获取连接时最大等待时间 默认5000,单位毫秒
    14. store.db.maxWait=5000
    15. # 全局事务表名 默认global_table
    16. store.db.globalTable=global_table
    17. # 分支事务表名 默认branch_table
    18. store.db.branchTable=branch_table
    19. # 全局锁表名 默认lock_table
    20. store.db.lockTable=lock_table
    21. store.db.distributedLockTable=distributed_lock
    22. # 查询全局事务一次的最大条数 默认100
    23. store.db.queryLimit=100
    24. # undo保留天数 默认7天,log_status=1(附录3)和未正常清理的undo
    25. server.undo.logSaveDays=7
    26. # undo清理线程间隔时间 默认86400000,单位毫秒
    27. server.undo.logDeletePeriod=86400000
    28. # 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试
    29. # 公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试
    30. # 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用
    31. server.maxCommitRetryTimeout=-1
    32. # 二阶段回滚重试超时时长
    33. server.maxRollbackRetryTimeout=-1
    34. # 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
    35. server.recovery.committingRetryPeriod=1000
    36. # 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
    37. server.recovery.asynCommittingRetryPeriod=1000
    38. # 二阶段回滚状态重试回滚线程间隔时间 默认1000,单位毫秒
    39. server.recovery.rollbackingRetryPeriod=1000
    40. # 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
    41. server.recovery.timeoutRetryPeriod=1000
    1. server:
    2. port: 7091
    3. spring:
    4. application:
    5. name: seata-server
    6. logging:
    7. # config: /Users/canxiusi/Documents/docker/seata/resources/logback-spring.xml
    8. file:
    9. path: /Users/canxiusi/Documents/docker/seata/log
    10. # kafka 日志输出配置
    11. # extend:
    12. # logstash-appender:
    13. # destination: 127.0.0.1:4560
    14. # kafka-appender:
    15. # bootstrap-servers: 127.0.0.1:9092
    16. # topic: logback_to_logstash
    17. console:
    18. user:
    19. username: seata
    20. password: seata
    21. seata:
    22. # seata配置中心, 使用nacos
    23. config:
    24. type: nacos
    25. nacos:
    26. # 需要换成, 你本机所在的ip:port
    27. server-addr: 192.168.64.1:8848
    28. group: DEFAULT_GROUP
    29. # 需要换成, 你创建命名空间后, 获取到的那一大串
    30. namespace: 866f6a85-3650-41f6-b800-1527ed2f8f62
    31. username: nacos
    32. password: nacos
    33. data-id: seata.properties
    34. # seata注册中心, 使用nacos
    35. registry:
    36. type: nacos
    37. nacos:
    38. # 指定 seata 服务启动后, 在nacos的服务名称
    39. application: seata-server
    40. # 需要换成, 你本机所在的ip:port
    41. server-addr: 192.168.64.1:8848
    42. group: DEFAULT_GROUP
    43. # 需要换成, 你创建命名空间后, 获取到的那一大串
    44. namespace: 866f6a85-3650-41f6-b800-1527ed2f8f62
    45. # tc集群名称
    46. # cluster: default
    47. username: nacos
    48. password: nacos
    49. # server:
    50. # service-port: 8091 #If not configured, the default is '${server.port} + 1000'
    51. security:
    52. secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    53. tokenValidityInMilliseconds: 1800000
    54. ignore:
    55. urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

    三. 启动 seata 服务

    3.1 启动命令

    docker compose up

    查看日志可以看到 seata 服务已经启动成功

    3.2 登录 seata 控制台

    3.3 查看 seata 网络组

    1. docker network ls
    2. docker inspect 2240fb4a4c42

    可以看到容器的网络模式为桥接, 容器内的 ip 的 172.18.0.2, 并且和 nacos , mysql 不再同一个网络组, 而且彼此网络隔离, 因为不再一个网络组的容器, 其网络隔离是 docker 的默认的行为

    可以是用 docker 启动时候为我们分配的  bridge0 所在 ip 通信, 就是上面配置文件的 192.168.64.1 

    seata 访问 nacos 使用: 192.168.64.1:8848 

    seata 访问 mysql 使用 : 192.168.64.1:3306

    也可以把 nacos, seata, mysql 连接到到同一个网络组(不推荐), 之后他们可以使用 容器内的 ip 或 容器名称进行通信, 

    1. # 创建一个自定义桥接网络
    2. docker network create --driver bridge seata_custom_network
    3. # 连接 MySQL 容器到这个网络
    4. docker network connect seata_custom_network (容器id或容器名)
    5. # 连接 Nacos 容器到这个网络
    6. docker network connect seata_custom_network (容器id或容器名)
    7. # 连接 seata 容器到这个网络
    8. docker network connect seata_custom_network (容器id或容器名)

    3.4 创建自定义网络组

    docker network create --driver bridge seata_custom_network

    查看该网络组, 并使用下面的命令, 把 mysql, nacos, seata, 链接到该网络组

    1. docker network connect seata_custom_network fb32495ff923
    2. docker network connect seata_custom_network 52e9e9ff94aa
    3. docker network connect seata_custom_network 5c2614366917

    查看该网络组详细配置, 可以看到该网络组下面有 seata, mysql, nacos 3个服务, 互相可以使用容器id通信, 或 容器内的 ip 通信

    3.5 测试网络互通

    使用命令进入 seata 容器内部, 之后测试与 mysql, nacos 的通信, 都可以 ping 通

    docker compose exec seata-server /bin/bash

  • 相关阅读:
    AI免费写作工具,怎么选择AI免费写作工具
    【设计模式】六、【创建性模式】揭秘单例模式:从生活例子到Java代码
    购物H5商城架构运维之路
    迎国庆,九月复盘你搞了多少钱?
    介绍一个博客图片上传辅助工具
    web-view不配置业务域名不可以跳转外部链接
    海康摄像头二次开发
    spring5.3 十三:spring AOP分析
    JAVA知识点笔记
    从文件下载视角来理解Web API
  • 原文地址:https://blog.csdn.net/m0_51681531/article/details/139314603