-
Notifications
You must be signed in to change notification settings - Fork 8.8k
ctl survey
jimin edited this page Dec 21, 2023
·
1 revision
运维 ctl 命令在 Seata 中非常重要,它是 Seata 的命令行工具,可以帮助我们管理和操作 Seata 的各种组件。运维 ctl 命令可以让我们快速地启动、停止和管理 Seata 服务,定位和解决问题。此外,运维 ctl 命令还提供了丰富的指令,可以让我们方便地检查 Seata 的健康状态、模拟事务和打印导出配置信息等,大大提高了我们的工作效率和运维体验。
本项目拟研发针对 Seata 集群的 ctl 工具 seatactl,提供对 Seata server 集群的部署状态、动态配置、事务模拟等功能。
- 命令行支持集群节点健康检查状态返回。
- 命令行支持事务的模拟,包括但不限于事务 begin、commit 和 rollback。
- 命令行支持配置项的打印和动态修改,包括配置中心、注册中心配置、存储和事务控制配置。
- 命令行支持 Raft 存储模式运行中动态加入和摘除节点。
- seata-server 提供对应的 admin 接口,用于针对 seata 的行为及状态管理(get set 等)
- seatactl 支持 Seata 目前兼容的所有服务注册中心(Nacos等),获取完整的集群列表
- seatactl 支持对 Seata 单节点/集群 进行 admin 管理
$ seatactl [action] [type] [flags]
actions:
get
set
delete
reload
type:
node
registry
config
storage
txn
flags:
-e, --endpoint=<url> Single node with server URL
-r, --registry=<name> Cluster registry config name
-a, --application=<app> Cluster app name
-d, --data=<data> Data
根据 Seata 部署方式的不同,存在如下两种情况:
- 单机部署的 Seata 节点可以直接使用 -e 配置 sever URL
- 集群部署的 Seata 集群可以先将注册中心配置信息保存在本地,然后运行时由 -r 和 -a 指定
[registry-1]
type=eureka
service-url=http://localhost:8761/eureka
[registry-2]
type=nacos
server-addr=127.0.0.1:8848
group="SEATA_GROUP"
namespace=""
username="nacos"
password="nacos"
...
例如在名为registry-1
的 Eureka 部署名为cluster-1
的 Seata 集群,参数列表为:
$ seatactl [action] [type] -r registry-1 -a cluster-1 ...
# 单机
$ seatactl get node -e <url>
# 集群
$ seatactl get node -r <registry> -a <app>
ID IP PORT AGE STATUS
1 10.100.0.1 8080 24d UP
2 10.100.78.115 8080 22d DOWN
...
除展示 Server 相关硬件信息外,还包含 UP / DOWN 两种节点状态。
seatactl 可在集群模式下通过命令修改所有节点的服务注册中心配置。
- 获取注册中心公共配置:
$ seatactl get registry -d 'key' -r <registry> -a <app>
- 修改注册中心公共配置:
$ seatactl set registry -d 'key=value' -r <registry> -a <app>
- 删除注册中心公共配置:
$ seatactl delete registry -d 'key' -r <registry> -a <app>
seatactl 可直接通过命令修改配置项。
- 获取指定配置
# 单机
$ seatactl get config -d 'key' -e <url>
# 集群
$ seatactl get config -d 'key' -r <registry> -a <app>
- 修改指定配置
# 单机
$ seatactl set config -d 'key=value' -e <url>
# 集群
$ seatactl set config -d 'key=value' -r <registry> -a <app>
- 删除指定配置
# 单机
$ seatactl delete config -d 'key' -e <url>
# 集群
$ seatactl delete config -d 'key' -r <registry> -a <app>
- 如果用户手动更新了配置文件/配置中心,触发 reload 重新读取
# 单机
$ seatactl reload config -e <url>
# 集群
$ seatactl reload config -r <registry> -a <app>
seatactl 可对存储配置(file, redis, raft)进行管理。
- 获取当前存储配置状态
# 单机
$ seatactl get storage -e <url>
# 集群
$ seatactl get storage -r <registry> -a <app>
结果:
ID IP TYPE STATUS
1 10.100.0.1 raft UP
2 10.100.78.115 raft DOWN
- 加入/修改存储节点
# 单机
$ seatactl set storage -d <config> -e <url>
# 集群
$ seatactl set storage -d <config> -r <registry> -a <app>
- 删除存储节点
# 单机
$ seatactl delete storage -d <config> -e <url>
# 集群
$ seatactl delete storage -d <config> -r <registry> -a <app>
事务关系可以梳理为一个有向无环图 DAG,可以保存至事务模拟文件。例如如下 DAG 可以定义为:
# 定义事务模型
AT/TCC/Saga/XA
# 定义事务关联服务,以及执行该服务(分支事务)时的状态,成功 succ 或错误 err 或 超时 Timeout
svc1: succ
svc2: succ
svc3: succ
svc4: err
# 定义分支事务之间的调用关系
start -> svc1
svc1 -> svc2
svc1 -> svc3
svc3 -> svc4
事务模拟方法为:
# 单机
$ seatactl get txn -d <dag-file> -e <url>
# 集群
$ seatactl get txn -d <dag-file> -r <registry> -a <app>
模拟结果:
Use transaction model: AT
Start
First Stage(一阶段):
svc1 submit
svc2 submit
svc3 submit
svc4 submit
Second Stage(二阶段):
svc1 commit
svc2 commit
svc3 commit
svc4 failed!
svc1 rollback
svc2 rollback
svc3 rollback
svc4 rollback
end
7月1日——7月15日 | 创建并初始化 seatactl 工具、 admin 接口 |
---|---|
7月16日——7月29日 | 服务状态检查 |
7月30日——8月12日 | 注册中心配置 |
8月13日——8月26日 | 配置中心配置 |
8月27日——9月9日 | 存储配置 |
9月10日——9月23日 | 事务模拟 |
9月24日——10月1日 | 项目结项相关 |