Skip to content

ctl design

jimin edited this page Dec 21, 2023 · 1 revision

项目目标

  1. 命令行支持集群节点健康检查状态返回。
  2. 命令行支持事务的模拟,包括但不限于事务 begin、commit 和 rollback。
  3. 命令行支持配置项的打印和动态修改,包括配置中心、注册中心配置、存储和事务控制配置。
  4. 命令行支持 Raft 存储模式运行中动态加入和摘除节点。

项目实现

  1. 服务状态检查
  2. 元数据配置(registry.conf)
  3. 配置中心配置 (file.conf or 配置中心)
  4. 存储配置
  5. 事务模拟

整体架构

命令工具: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}

研发模块

  1. seata-server (a.k.a TC):扩展 7091端口服务,除了提供 Seata Console 功能之外增加上述 admin 功能
  2. seatactl:新 repo/project,通过 7091端口的认证方式,调用 admin HTTP 接口实现节点管理

技术选型

  1. seata-server admin 接口 增强:原有 Java SpringBoot 服务增加 HTTP 接口
  2. seatactl: 建立新的 repo,采用 shell 开发,既可以跟随 server 节点部署,也可以独立在其他环境使用
  3. 第三方依赖引入:无

seatactl 连接单机/集群

连接节点

  1. 使用 -e指定 seata 节点的地址,例如 http://localhost:7091
  2. 使用 -u,-p指定 admin 连接密码:默认为 seata/seata
  3. seatactl 在此节点上对 type 执行 action

连接集群

  1. 按照上述“连接节点”的方式连接任意集群中节点
  2. seatactl 在此节点上对 type 执行 action 后,转发同步至其他节点
  3. 连接 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 两种节点状态。

元数据配置

  1. 获取元数据配置,访问任意一个 TC 节点即可:
$ seatactl get metadata -d '<json>' -c <conn>
  1. 修改元数据配置,seatactl 修改指定集群节点后,同步修改至其他集群节点:
$ seatactl set metadata -d '<json>' -c <conn>

成功/失败回滚

集群所有节点的元数据修改是一个由连接节点发起的分布式事务,成功/失败回滚由事务保证。

配置中心配置

  1. 获取配置中心公共配置,访问任意一个 TC 节点即可:
$ seatactl get config -d '<json>' -c <conn>
  1. 修改配置中心公共配置,修改任意一个 TC 节点配置,成功后其他节点执行 reload:
$ seatactl set config -d '<json>' -c <conn>
  1. 删除配置中心公共配置,同上:
$ seatactl delete config -d '<json>' -c <conn>

  1. 如果用户手动更新了配置,触发 reload 重新读取
$ seatactl reload config -c <conn>

成功/失败回滚

集群的配置修改是一个由连接节点发起的分布式事务,成功/失败回滚由事务保证。

存储配置

seatactl 可对存储配置(file, redis, raft)进行管理。

  1. 获取当前存储配置状态
$ seatactl get storage  -c <conn>
ID      IP              TYPE        STATUS
1       10.100.0.1      raft        UP
2       10.100.78.115   raft        DOWN
  1. 在 Raft 模式下时,可加入/修改存储节点
$ seatactl set storage -d <json> -c <conn>
  1. 在 Raft 模式下时,可删除存储节点
$ seatactl delete storage -d <json> -c <conn>

其中 <config>为加入/修改/删除 Raft 集群的节点 IP 列表。

事务模拟

提供事务 try、commit、rollback 模拟命令,以确认部署的 seata-server 是否正常可用

Clone this wiki locally