Seata 安装部署

一、安装

1.下载二进制包

# 下载
wget https://github.com/seata/seata/releases/download/v1.3.0/seata-server-1.3.0.tar.gz

# 解压
tar -zxvf seata-server-1.3.0.tar.gz

替换配置文件

官方描述

# 替换配置文件
vim seata/conf/registry.conf


registry {
  type = "nacos"

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }

config {
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    #注意registry和config需要在同一个组下
    group = "SEATA_GROUP"
    username = "*"
    password = "*"
  }
}

推送配置到nacos

官方文档

拉取配置文件:https://github.com/seata/seata/blob/develop/script/config-center/config.txt
拉取推送脚本:https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh
根据配置文件修改自己需要的方案,参考
vim config.txt

#my_test_tx_group需要与客户端保持一致  default需要跟客户端和registry.conf中registry中的cluster保持一致
service.vgroupMapping.my_test_tx_group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

#使用推送脚本,推送配置到nacos(注意脚本中读取config.txt路径,默认是sh所在的上一级,可以修改脚本$(dirname "$PWD")/config.txt),脚本使用参考官方文档
sh nacos-config.sh -h 127.0.0.1 -g 

参数说明:
-h: host,默认值 localhost
-p: port,默认值 8848
-g: 配置分组,默认值为 'SEATA_GROUP'
-t: 租户信息,对应 Nacos 的命名空间ID字段, 默认值为空 ''

4. 创建数据库

-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT 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 `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT 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 `lock_table`
(
    `row_key`        VARCHAR(128) NOT 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;

5. 命令启动

启动格式sh seata-server.sh $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA $IP(此参数可选)

sh /opt/seata-server/bin/seata-server.sh -p 8091 -h 127.0.0.1 -m db -n 1

6.守护进程启动

vim /opt/seata-server/startup.sh

#!/bin/bash
sh /data/seata/bin/seata-server.sh -p 8091 -h 127.0.0.1 -m db -n 1

vim /lib/systemd/system/seata-server.service

[Unit]
Description=seata-server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/opt/seata-server/startup.sh
Restart=always
PrivateTmp=true

[Install]
WantedBy=multi-user.target

赋予权限

chmod 777 /opt/seata-server/startup.sh
chmod 777 /lib/systemd/system/seata-server.service

启用服务

systemctl enable seata-server.service
systemctl daemon-reload

运行

systemctl start seata-server.service

查看状态

systemctl status seata-server.service

查看进程

ps -ef|grep seata-server

7.创建业务数据库表(每个业务库都需要创建)

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

使用

1. 配置属性

seata:
  application-id: ${spring.application.name}
  #需要和nacos中配置保持一致
  tx-service-group: my_test_tx_group
  config:
    type: nacos
    nacos:
      #需要和server在同一个注册中心下
      serverAddr: 127.0.0.1:8848
      #需要server端(registry和config)、nacos配置client端(registry和config)保持一致
      group: SEATA_GROUP
  registry:
    type: nacos
    nacos:
      serverAddr: 127.0.0.1:8848
   

2. 使用(AT模式)

事务发起者在方法上添加注解@GlobalTransactional

常见错误

客户端

错误:no available service ‘xxxxx’ found, please make sure registry config correct
原因:客户端找不到服务端,没有服务端提供服务
分析:
1、检查服务端是否正常启动
2、检查客户端和服务端是否在同一注册中心
3、如果使用nacos,检查客户端和服务端配置中心和注册中心分组是否一致
4、检查客户端配置的服务端在注册中心的名称是否正确
5、检查客户端和服务端版本是否一致

你可能感兴趣的:(运维日常记录,mysql,数据库,linux)