-
Notifications
You must be signed in to change notification settings - Fork 8.8k
ctl design
jimin edited this page Dec 21, 2023
·
1 revision
- 命令行支持集群节点健康检查状态返回。
- 命令行支持事务的模拟,包括但不限于事务 begin、commit 和 rollback。
- 命令行支持配置项的打印和动态修改,包括配置中心、注册中心配置、存储和事务控制配置。
- 命令行支持 Raft 存储模式运行中动态加入和摘除节点。
- 服务状态检查
- 元数据配置(registry.conf)
- 配置中心配置 (file.conf or 配置中心)
- 存储配置
- 事务模拟
命令工具:seatactl
设计:复用 7091
端口服务,每个 seata-server 实现针对各基础组件的增删改查的 HTTP 接口
安全性:由 **7091**
端口服务的身份认证提供 (用户名&密码,JWT 做 auth)
$ seatactl [action] [type] [flags]
actions:
get
set
delete
reload
type:
status
metadata
config
storage
txn
flags:
-e, --endpoint=<url> Single node with server address
-u, --user=<username> Seata console admin username
-p, --password=<pass> Seata console admin password
-c, --connection=<conn> Connection info (includes -e, -u,-p) configured in local
-d, --data=<data> Data
针对 Seata 服务状态、注册中心、配置中心、存储的相关修改,广义上均为“CRUD”语义,因此 Action 进行了对应(get/set/delete),并增加了 reload 用于热加载/更新相关配置。 HTTP 接口形式为:
http://host:port/api/v1/admin/{type}/{action}
-
seata-server (a.k.a TC)
:扩展7091
端口服务,除了提供 Seata Console 功能之外增加上述 admin 功能 -
seatactl
:新 repo/project,通过7091
端口的认证方式,调用 admin HTTP 接口实现节点管理
- seata-server admin 接口 增强:原有 Java SpringBoot 服务增加 HTTP 接口
- seatactl: 建立新的 repo,采用 shell 开发,既可以跟随 server 节点部署,也可以独立在其他环境使用
- 第三方依赖引入:无
- 使用
-e
指定 seata 节点的地址,例如http://localhost:7091
- 使用
-u
,-p
指定 admin 连接密码:默认为seata/seata
- seatactl 在此节点上对 type 执行 action
- 按照上述“连接节点”的方式连接任意集群中节点
- seatactl 在此节点上对 type 执行 action 后,转发同步至其他节点
- 连接 Seata 集群时默认所有 TC 节点的 console (默认为 7091 端口的服务)“用户名/密码”相同!
如果想规避在命令中一直使用 -e
指定节点端口, -u``-p
指定用户名和密码的繁琐参数,可将连接信息保存至 ~/.seata/seatactl.conf
中:
[conn1]
endpoint=http://xx.xx.xx.xx:7091
username="seata"
password="seata"
...
这样连接时可使用 -c
指定连接配置,简化命令:
seatactl [action] [type] -c <conn>
访问任意一个 TC 节点,如果是集群部署,将获取其他集群节点的状态并合并返回:
$ seatactl get status -c conn1
Cluster mode (or single node mode)
ID IP PORT AGE STATUS
1 10.100.0.1 8080 24d UP
2 10.100.78.115 8080 22d DOWN
...
提示单机/集群部署状态。除展示 Server 相关硬件信息外,还包含 UP / DOWN 两种节点状态。
- 获取元数据配置,访问任意一个 TC 节点即可:
$ seatactl get metadata -d '<json>' -c <conn>
- 修改元数据配置,seatactl 修改指定集群节点后,同步修改至其他集群节点:
$ seatactl set metadata -d '<json>' -c <conn>
集群所有节点的元数据修改是一个由连接节点发起的分布式事务,成功/失败回滚由事务保证。
- 获取配置中心公共配置,访问任意一个 TC 节点即可:
$ seatactl get config -d '<json>' -c <conn>
- 修改配置中心公共配置,修改任意一个 TC 节点配置,成功后其他节点执行 reload:
$ seatactl set config -d '<json>' -c <conn>
- 删除配置中心公共配置,同上:
$ seatactl delete config -d '<json>' -c <conn>
- 如果用户手动更新了配置,触发 reload 重新读取
$ seatactl reload config -c <conn>
集群的配置修改是一个由连接节点发起的分布式事务,成功/失败回滚由事务保证。
seatactl 可对存储配置(file, redis, raft)进行管理。
- 获取当前存储配置状态
$ seatactl get storage -c <conn>
ID IP TYPE STATUS
1 10.100.0.1 raft UP
2 10.100.78.115 raft DOWN
- 当在 Raft 模式下时,可加入/修改存储节点
$ seatactl set storage -d <json> -c <conn>
- 当在 Raft 模式下时,可删除存储节点
$ seatactl delete storage -d <json> -c <conn>
其中 <config>
为加入/修改/删除 Raft 集群的节点 IP 列表。
提供事务 try、commit、rollback 模拟命令,以确认部署的 seata-server 是否正常可用