# 下载
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 = "*"
}
}
官方文档
拉取配置文件: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字段, 默认值为空 ''
-- -------------------------------- 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;
启动格式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
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
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';
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
事务发起者在方法上添加注解@GlobalTransactional
错误:no available service ‘xxxxx’ found, please make sure registry config correct
原因:客户端找不到服务端,没有服务端提供服务
分析:
1、检查服务端是否正常启动
2、检查客户端和服务端是否在同一注册中心
3、如果使用nacos,检查客户端和服务端配置中心和注册中心分组是否一致
4、检查客户端配置的服务端在注册中心的名称是否正确
5、检查客户端和服务端版本是否一致