基于CentOS Stream 9平台部署Seata1.6.1,以及使用NaocsConfig获取数据源记录

本文详细介绍了如何在CentOSStream9系统上安装Seata1.6.1,配置静态IP,创建Nacos数据库并设置数据源,以及启动SeataServer。同时提到了使用OpenResty进行反向代理和GRPC协议配置的相关步骤。文章还涉及了如何让Seata服务开机自启以及配置延迟启动以等待Nacos集群准备就绪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关推荐:
CentOS Stream 9 静态IP配置
CentOS Stream 9 搭建Nacos2.2.0集群以及OpenResty反向代理以及GRPC协议配置


1.下载

官方GitHub:https://github.com/seata/seata/releases/tag/v1.6.1
在线下载:

cd /usr/local
wget https://github.com/seata/seata/releases/download/v1.6.1/seata-server-1.6.1.tar.gz

或者手动下载本地再上传


2.解压

tar -zxvf seata-server-1.6.1.tar.gz 


3.配置存储模式

  • file:(默认)单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高(默认)
  • db:(5.7+)高可用模式,全局事务会话信息通过db共享,相应性能差些

3.1 创建数据库seata,先下载SQL,再用工具导入

https://github.com/seata/seata/tree/1.6.1/script/server/db
sql
语句如下:

-- 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_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- 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 = utf8mb4;

-- 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),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);

新建表

3.2 两种方法配置数据源(①直接配置和②从nacosConfig获取配置)

打开config/application.yml
修改第47行db

①直接配置
vi seata/conf/application.yml

添加

    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
      user: root
      password: 123456
      min-conn: 10
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 1000
      max-wait: 500

修改数据库存储日志

3.3 配置Nacos注册中心

将服务注册到Nacos中

修改第44行type: nacos
添加;

	type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace:
      cluster: default
      username: nacos
      password: nacos
      context-path:
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key:
      #secret-key:

nacos

② 从NacosConfig获取配置,方便维护数据源

选择从NacosConfig获取配置,上面db配置了,这一步可以不用配置,以数据库配置为例
修改第41行 type: nacos

vi seata/conf/application.yml

添加:

  type: nacos
  nacos:
     server-addr: 127.0.0.1:8848
     namespace:
     group: SEATA_GROUP
     username: nacos
     password: nacos
     context-path:
     ##if use MSE Nacos with auth, mutex with username/password attribute
     #access-key:
     #secret-key:
     data-id: seata.properties

type

ESC :wq保存并退出

新建配置新建配置
Data ID

seata.properties

Group

SEATA_GROUP

配置格式

  • Properties

配置内容:

store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://192.168.20.128:3306/seata?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
store.db.user=root
store.db.password=123456

新建配置


4. 启动Seata Server:

sh /usr/local/seata/bin/seata-server.sh -h 192.168.20.128 -p 8091 -m db -n 1

参数全写作用备注
-h--host指定在注册中心注册的IP不指定时获取当前IP,外部访问部署在云环境和容器中的server建议指定
-p--post指定server启动的端口默认为8091
-m--storeMode事务日志存储模式支持file,db,redis 默认为file 注:redis需seata-server1.3版本及以上
-n--serverNode用于指定seata-server节点ID(适合集群)如1,2,3…默认为1
-e--seataEnv指定seata-server运行环境如dev,test等,服务启动时会使用registry-dev.conf这样的配置

启动

查看启动日志(Ctrl C 可退出)

tail -f /usr/local/seata/logs/start.out

启动日志
访问页面:http://192.168.20.128:7091/#/login

默认账号:seata
默认密码:seata
登录
事务信息

5. 开机自启配置

给Seata指定JAVA_HOME路径,避免报错
Java路径

5.1 查看JDK路径:echo $JAVA_HOME

jdk

5.2 编辑seata的启动脚本,
vi /usr/local/seata/bin/seata-server.sh

添加JDK路径,并延迟15秒启动,主要等nacos启动完成…:

因为我本地搭建的Nacos集群,需要等OpenResty完成代理(对着浏览器刷新集群地址,差不多就是15秒),才能获取到集群地址,不然等seata去获取nacos注册中心时,获取不到,就报错退出程序了…
tail -f /usr/local/seata/logs/start.out 查看启动日志,面对不同问题,针对性的去解决~

echo "seata delayed 15s start"
sleep 15
JAVA_HOME=/usr/local/java/jdk1.8.0_361
JAVA=$JAVA_HOME/bin

延迟启动

5.3 新增服务脚本:
vi /etc/systemd/system/seata.service

添加内容(如果nacos在本机的话,配置了NacosConfig,一定要配置在nacos服务启动之后再执行):

[Unit]
Description=seata
After=nacos-cluster.service

[Service]
Type=forking
ExecStartPre=/bin/sleep 10
ExecStart=sh /usr/local/seata/bin/seata-server.sh -h 192.168.20.128 -p 8091 -m db -n 1
PrivateTmp=true

[Install]
WantedBy=multi-user.target

按ESC :wq保存并退出
服务配置

5.4 服务脚本赋权:
chmod 754 /etc/systemd/system/seata.service

5.5 设置开机自启
systemctl enable seata.service 

可以reboot 重启测试是否生效
开机自启

5.6 查看服务状态:
systemctl status seata.service

关于项目中事务的使用,有时间再写~

搞定,感谢阅览~
END


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值