Seata安装和配置


我们这里是在Centos7上进行的操作;首先在Seata的github 上下载安装包,直接选择最新的releases版本即可,如:seata-server-1.4.1.tar.gz ;windows系统的话直接下载zip包安解压即可。

配置jdk(如果没有的话)

注意需要安装和配置Java环境(使用yum快速安装和配置jdk yum install java-1.8.0-openjdk.x86_64

# 查看已有jdk版本
yum list java*

# 这里直接安装jdk8
yum install java-1.8.0-openjdk.x86_64 -y
yum install java-1.8.0-openjdk-devel.x86_64 -y

单机版部署

Seata单机版部署非常简单,直接解压启动即可

tar -zxvf seata-server-1.4.1.tar.gz
cd seata
sh ./bin/seata-server.sh

启动成功后控制台会显示相关信息。默认端口是8901,使用文件来记录日志。

如果开启了防火墙,要么通过如下命令停止防火墙

systemctl disable firewalld
systemctl stop firewalld

或者设置防火墙开放端口

firewall-cmd --zone=public --add-port=8901/tcp --permanent
firewall-cmd --reload

查看防火墙开放端口:firewall-cmd –list-port

Seata的启动命令参数说明

完整的启动命令如下:

sh ./bin/seata-server.sh -p 8091 -h 127.0.0.1 -m file -n 1 -e dev
  • -h : 指定在注册中心注册的IP;不指定时获取当前的 IP,外部访问部署在云环境和容器中的server建议指定;
  • -p : 指定 server 启动的端口; 默认为 8091;
  • -m : 事务日志存储方式;支持file,db,redis,默认为file;注意redis需seata-server 1.3版本及以上;
  • -n : 用于指定seata-server节点ID;如 1,2,3…, 默认为 1;
  • -e : 指定 seata-server 运行环境;如:dev, test 等, 服务启动时会使用 registry-dev.conf 这样的配置;

因此单机版部署使用的完成命令如下:

sh ./bin/seata-server.sh -p 8091 -h 192.168.56.101  -m file

高可用集群版本部署

Seata的高可用依赖于注册中心、配置中心和数据库来实现;因此我们需要修改相关的配置。下面我们以nacos和MySQL为例子,Seata-Server使用注册中心进行集群间的通信,同时将事务数据保存到数据库中让整个集群统一使用事务信息。
下面的示例未使用配置中心,如果需要使用的话相关配置见 https://github.com/seata/seata/tree/develop/script/config-center

修改配置文件 registry.conf

将里面的registry节点下的type值改为nacos;然后修改nacos节点中的地址;下面是修改后的示例

registry {
  type = "nacos"
  loadBalance = "RandomLoadBalance"
  loadBalanceVirtualNodes = 10

  nacos {
    application = "seata-server"
    serverAddr = "192.168.56.1:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }
}
config {
  type = "file"
  file {
    name = "file.conf"
  }
}

修改配置文件 file.conf

将里面的mode改为db;然后修改db配置中的MySQL相关配置信息;下面是示例

store {
  mode = "db"
  ## database store property
  db {
    datasource = "druid"
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://192.168.56.1:3306/seata?useSSL=false&serverTimezone=UTC"
    user = "root"
    password = "123456"
    minConn = 5
    maxConn = 100
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }
}

创建相关表和数据库

需要新建一个名为seata数据库(名称可以是其他的,只要上面的配置能够对应上即可),然后创建global_table、branch_table、lock_table三张表;建表语句 ;mysql的SQL语句如下:

-- -------------------------------- 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(128),
    `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;

启动seata服务

由于MySQL-5.x 和MySQL-8.x的有不少的区别,因此seata官方提供2个MySQL的驱动;根据使用数据库版本来选择相关的jar包,这里使用的MySQL-8.0的,因此我们将lib包下jdbc中驱动包拷贝一个出来;相关命令如下:

# 拷贝mysql-8的驱动包
cp ./lib/jdbc/mysql-connector-java-8.0.19.jar ./bin/
# 启动seata服务
sh ./bin/seata-server.sh -p 8091 -h 192.168.56.101

启动成功后控制台会打印一行如下包含{dataSource-1} inited 的日志信息,则说明已经成功使用数据库存储事务日志了。

... com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited

现在到nacos的控制台中的服务管理里面就可以看到seata注册的服务信息了。


特别提醒:扫码关注微信订阅号'起岸星辰',实时掌握IT业界技术资讯! 转载请保留原文中的链接!
 上一篇
2021年3月资讯(四) 2021年3月资讯(四)
本周热门资讯:2021阿里云采购季2核2G云服务器低至86元/年;谷歌准备发布Fuchsia首个开发者预览版;Vue.js最新报告;Guava 30.1.1发布;IETF 正式弃用 TLS 1.0 和 TLS 1.1。
2021-03-26
下一篇 
2021年3月资讯(三) 2021年3月资讯(三)
2021春央视315头四炮打向互联网;重磅:Spring 发布 Spring Native Beta;欧洲最大云服务公司 OVH 法国机房着火;JDK/Java 16 正式 GA; IBM 更新量子编程工具;为什么说月球比地球更圆?
2021-03-19
  目录