github 代码位置:https://github.com/ADBSQL/AntDB

ADBMGR命令执行流程

​ ADBMGR 是开源分布式数据库AntDB集群管理工具,集成数据库安装、启动、停止、参数设置、数据库guc参数查看、运行状态检查、主备流复制状态查看等功能。ADBMGR通过与部署在各个机器上的AGENT进行通信实现管理功能,如下图所示:

这里写图片描述

ADBMGR节点信息相关系统表库

​ ADBMGR节点信息相关系统表有HOST、NODE、PARAM、HBA,用户可以通过既定命令格式设置节点分布信息,命令处理过程同PostgreSQL数据库SQL命令一致,实现语法约束及检查。

HOST表:安装数据库的机器信息,包括主机名、分发安装包所用ssh协议、分发安装包对应的保存路径、AGENT与ADBMGR通信端口号

NODE表:分布式数据库节点对应的信息,包括节点名称、所在机器的主机名、节点监听端口号、节点数据路径

PARAM表:可以通过在ADBMGR端命令行方式设置各个节点guc参数,对应的设置参数信息保存在该表中

HBA表:可以通过在ADBMGR端命令行方式设置各个COORDINATOR节点pg_hba.conf文件信息,对应的设置信息保存在该表中

命令语法格式示例如下:

ADD HOST host_name (USER=user_name, AGENTPORT=agent_port, ADDRESS=”ip_address”, PGHOME=’path’);

ADD GTM MASTER gtm_name (HOST=host_name, PORT=port, SYNC=on,PATH=’node_path’);

ADD COORDINATOR coordinator_name(HOST=host_name,PORT=port,SYNC=ON,

PATH=’node_path’);

ADD DATANODE MASTER datanode_name (HOST=host_name, PORT=port, SYNC=ON,

PATH=’node_path’);

SET COORDINATOR { ALL | nodename }( { parameter = value } [, …] ) [ FORCE ];

ADD HBA { ALL | coord_name } ( “hba_value” [, …] )

具体命令语法格式请参考《AntDB集群管理工具(AntDB manager)使用手册》 。

​ ADBMGR词法及语法分析通过Lex和Yacc配合完成,AntDB源码中mgr_gram.y文件,在此定义了管理工具所需要的命令语法格式。

​ 节点信息相关表数据可以通过mgr_dump –mgr_table导出。

命令执行过程

​ ADBMGR端命令执行内部流程使用了两种方式:通过mgr_ProcessUtility函数调用具体的用户自定义函数执行;命令直接调用对应的系统函数执行。

​ ADBMGR端命令的查询执行同PostgreSQL非计划数操作的计划生成与处理过程一致, 流程如下所示:

这里写图片描述

​ 在mgr_ProcessUtility函数中定义了对节点信息表处理的函数:相关节点信息增加、删除、修改操作。另外一种命令执行流程为:对节点启停等操作通过定义了一系列系统函数,当用户执行启停等命令操作时,直接调用对应的系统函数执行。

​ ADBMGR与AGENT通信,不同的命令对应不同的命令标示符,从而AGENT端通过函数do_agent_command (StringInfo buf)能够识别出对应的具体命令,通过函数exec_shell (const char *exec, StringInfo out)调用对应的可执行文件进行操作。命令标示符的设置具体见mgr_msg_type.h文件。

有关ADBMGR集群管理命令标识符如下:

typedef enum AgentCommand
{
     AGT_CMD_GTM_INIT = 1
    ,AGT_CMD_GTM_SLAVE_INIT
    ,AGT_CMD_GTM_START_MASTER
    ,AGT_CMD_GTM_START_SLAVE
    ,AGT_CMD_GTM_STOP_MASTER
    ,AGT_CMD_GTM_STOP_SLAVE
    ,AGT_CMD_GTM_CLEAN
    ,AGT_CMD_GTM_SLAVE_FAILOVER
    ,AGT_CMD_AGTM_RESTART
    ...
}AgentCommand 

ADBMGR与AGENT通信类型标识符如下:

#define AGT_MSG_COMMAND 'C'
#define AGT_MSG_ERROR   'E'
#define AGT_MSG_NOTICE  'N'
#define AGT_MSG_IDLE    'I'
#define AGT_MSG_RESULT  'M'
#define AGT_MSG_EXIT    'X'

ADBMGR与AGENT端通信相关函数模块介绍:

  • 与指定主机上的AGENT建立连接

    ma_connect_hostoid(Oid hostoid)

  • 通信内容加载通信类型标识符

    ma_beginmessage(StringInfo buf, char msgtype)

  • 通信内容加载命令类型标识符

    ma_sendbyte(&buf, cmdtype);

  • 通信内容加载命令内容

    ma_sendstring(&buf,cmdstr);

  • 通信内容长度设置

    ma_endmessage(&buf, ma);

  • 调用send()函数发送数据内容

    ma_flush(ma, true)

  • 获取AGENT端返回的执行结果

    mgr_recv_msg_original_result(ManagerAgent*ma, GetAgentCmdRst *getAgentCmdRst , bool bOriginalResult)

小结

​ ADBMGR是开源分布式数据库AntDB的集群管理工具,数据库管理员日常操作:安装部署、节点启停、状态查看、参数设置等均已支持,同时ADBMGR源码文件同数据库源码文件通过宏ADBMGRD进行了隔离,对ADBMGR的修改及功能添加不会对已运行的数据库节点有影响。ADBMGR新功能的添加只需要对特定文件进行修改。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐