ADBMGR命令执行流程
github 代码位置:https://github.com/ADBSQL/AntDBADBMGR命令执行流程ADBMGR 是开源分布式数据库AntDB集群管理工具,集成数据库安装、启动、停止、参数设置、数据库guc参数查看、运行状态检查、主备流复制状态查看等功能。ADBMGR通过与部署在各个机器上的AGENT进行通信实现管理功能,如下图所示:ADBMGR节点...
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新功能的添加只需要对特定文件进行修改。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)