暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SEATA1.4.0部署指南

书与深蓝 2021-08-04
909

SEATA1.4.0部署指南

结合nacos作为配置中心部署

1、下载seata-server-1.4.0.tar.gz和seata-1.4.0.tar.gz

wget https://github.com/seata/seata/releases/download/v1.4.0/seata-server-1.4.0.tar.gz
wget https://github.com/seata/seata/archive/v1.4.0.tar.gz

2、解压seata-server-1.4.0.tar.gz和seata-1.4.0.tar.gz

tar seata-server-1.4.0.tar.gz  得到 seata文件夹
tar seata-1.4.0.tar.gz  得到 seata-1.4.0

3、在tools库中执行数据库脚本

-- 位于 /seata-1.4.0/script/server/db/mysql.sql

CREATE TABLE IF NOT EXISTS mt_tools.`global_table`
(
    `xid`                       VARCHAR(128NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_gmt_modified_status` (`gmt_modified``status`),
    KEY `idx_transaction_id` (`transaction_id`)
ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS mt_tools.`branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS mt_tools.`lock_table`
(
    `row_key`        VARCHAR(128NOT NULL,
    `xid`            VARCHAR(96),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_branch_id` (`branch_id`)
ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

4、每个业务数据库中创建undo_log表

CREATE TABLE `undo_log` (
  `id` bigint(20NOT NULL AUTO_INCREMENT COMMENT 'increment id',
  `branch_id` bigint(20NOT NULL COMMENT 'branch transaction id',
  `xid` varchar(100NOT NULL COMMENT 'global transaction id',
  `context` varchar(128NOT NULL COMMENT 'undo_log context,such as serialization',
  `rollback_info` longblob NOT NULL COMMENT 'rollback info',
  `log_status` int(11NOT NULL COMMENT '0:normal status,1:defense status',
  `log_created` datetime NOT NULL COMMENT 'create datetime',
  `log_modified` datetime NOT NULL COMMENT 'modify datetime',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
ENGINE=InnoDB AUTO_INCREMENT=2470 DEFAULT CHARSET=utf8 COMMENT='AT transaction mode undo table';

5、拷贝seata-1.4.0中的config.txt和nacos-config.sh到seata文件夹

cp /data/mx/mx-seata-service/seata-1.4.0/script/config-center/config.txt  /data/mx/mx-seata-service/seata
cp /data/mx/mx-seata-service/seata-1.4.0/script/config-center/nacos/nacos-config.sh  /data/mx/mx-seata-service/seata/conf

6、修改config.txt文件

##修改
store.mode=db
#url、user、password 注意每个环境的要一致
store.db.url=jdbc:mysql://127.0.0.1:3306/md_tools?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&rewriteBatchedStatements=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
store.db.user=u_tools
store.db.password=tools123456
##初始化现有服务,新增的可以在nacos上新增
service.vgroupMapping.mx-article-service_group=default
service.vgroupMapping.mx-tools-service_group=default
service.vgroupMapping.mx-goods-service_group=default
service.vgroupMapping.mx-activity-service_group=default
service.vgroupMapping.mx-canal-service_group=default
service.vgroupMapping.mx-coupon-service_group=default
service.vgroupMapping.mx-order-service_group=default
service.vgroupMapping.mx-user-service_group=default
service.vgroupMapping.mx-job-service_group=default
...

7、修改/data/mx/mx-seata-service/seata/conf目录下的file.conf

## store mode: file、db、redis
store.mode = "db"
#url、user、password 注意每个环境的要一致,和config.txt的配置一致
store.db.url = "jdbc:mysql://127.0.0.1:3306/md_tools?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&rewriteBatchedStatements=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8"
store.db.user = "u_tools"
store.db.password = "tools123456"

8、修改/data/mx/mx-seata-service/seata/conf目录下的registry.conf

#修改
registry.type = "nacos"
registry.
    nacos{
     #默认就好
        application = "seata-server"
        #nacos的地址
        serverAddr = "192.168.0.151:8849"
        #默认就好
        group = "SEATA_GROUP"
        #默认就好,public,如果不默认,需要先去nacos新建命名空间,然后在把配置推送到nacos的时候需要加上命名空间地址,代码里也要记得加上
        namespace = ""
        #默认就好
        cluster = "default"
        #nacos的用户名
        username = "nacos"
        #nacos的密码
        password = "nacos_dev"
      }

registry.config.type = "nacos"

registry.config.nacos {
    serverAddr = "192.168.0.151:8849"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos_dev"
  }


9、在conf目录下 ,执行配置同步到nacos命令

sh nacos-config.sh -h 192.168.0.151 -p 8848 -u nacos -w nacos_dev

sh nacos-config.sh -h nacos_ip -p nacos端口号 -u nacos用户名 -w nacos密码

10、在seata目录下,执行启动seata命令(建议启动两个实例)

nohup ./bin/seata-server.sh -h 192.168.0.151 -p 8091 -m db -n 1 >> ./logs/info.log &
nohup ./bin/seata-server.sh -h 192.168.0.151 -p 8092 -m db -n 2 >> ./logs/info2.log &

#
参数名词解释
nohup ./bin/seata-server.sh -h [host] -p [port] -m [storeMode] -n [serverNode] >> ./logs/info.log &
#host 
指定注册的 IP,不指定时获取当前的 IP,外部访问部署在云环境和容器中的 server 建议指定
#port
指定 server 启动的端口,默认为 8091
#storeMode
事务日志存储方式,支持file,db,redis,默认为 file 注:redis需seata-server 1.3版本及以上
#serverNode
用于指定seata-server节点ID,如 1,2,3..., 默认为 1。建议多实例分别用不同的node

11、项目yaml文件配置

seata:
  data-source-proxy-mode: AT
  enable-auto-data-source-proxy: true
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: ${spring.application.name}_group
  service:
    vgroup-mapping:
      mx-article-service_group: default
  registry:
    type: nacos
    nacos:
      server-addr: 192.168.0.151:8849
      cluster: default
      username: nacos
      password: nacos_dev
  config:
    type: nacos
    nacos:
      server-addr: 192.168.0.151:8849
      username: nacos
      password: nacos_dev

logging:
  level:
    io:
      seata: info

12、开发Tips

1.在事务发起者的方法上加@GlobalTransactional,可选参数可点如注解中查看
2.所有的feign接口强制使用post请求
3.发生异常需要被事务发起者感知到
4.在增删改中有需要查数据库的,建议后面加上for update
5.配置文件yaml
6.在event中调用feign接口,调用完后需要判断调用结果 responseDto.isSuccessThrowException
,使event发起者能够感知到异常,才会进行发起方的回滚

文章转载自书与深蓝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论