Controller-Worker架构模式在Greenplum管理命令中的应用

一.背景

Greenplum的管理功能是由很多独立命令实现,如集群启动命令gpstart、集群状态查看命令gpstate。这些命令大部分都是基于python语言。本文通过gpstate命令的分析,解读其中蕴含的架构思想,为进一步理解Greenplum的管理命令提供帮助。

二.概念介绍

1. gpstate命令

gpstate查看集群的状态,通过gpstate –h可以看到该命令完整的使用帮助说明。

常用参数说明:

   -s 查看集群状态的详细信息。

   -m查看集群mirror的状态信息。

   -f 查看集群standby的状态信息。

更多细节参看:https://gpdb.docs.pivotal.io/6-10/utility-guide/ref/gpstate.html

2. Controller-Worker架构模式

图1 架构模式

辅助说明:

  1. Controller-Worker是一种组合架构模式,Controller基于Client的参数动态生成Woker数量,并控制Woker的生命周期,如创建和终止。
  2. Controller属性
    • Controller事先知道自身拥有的Woker类型。
    • Controller依赖一个工作任务池,通过工作任务池Controller监控整体任务执行情况。
  3. Worker属性
    • Worker并行消费工作任务池中任务,并把执行结果返回到任务池中。
    • Worker彼此间没有任何耦合。

三. gpstate命令分析

1. gpstate流程

图2 流程图

2. 模块依赖关系

图3 模块关系

辅助说明:

  1. 虚框中模块为数据结构的定义。
  2. Command命令最终是通过ssh和host进行交互,如 ssh –o StrictHostKeyChecky=no –o ServerAliveInterval=60 HostName “./usr/local/greenplum-db/greenplum_path.sh;$GPHome/sbin/gpgetstatusUsingtransiton.py  …”,结果采用base64编码。
  3. gpstate为python文件,通过#!/use/bin/env python方式,可以直接执行。

3. 架构模式

图4 架构数据流

辅组说明:

  1. Controller通过WorkerPool和Worker进行命令传递。
  2. Controller通过超时机制,保证最后一定有命令结果返回给Client
  3. Controller通过halt命令,停止所有的Woker
  4. Worker采用Thread方式来实现。
  5. Worker1、Worker2、WorkerN无差别,根据获取的Cmd,通过ssh方式在对应的Host执行命令。

 四.总结

对gpstate命令的分析方法,可以应用到其他集群操作命令。当管理命令出现异常,可以基于日志,精准定位问题所在。命令是python脚本实现,可以临时增加想要的日志辅助理解和问题定位。通过本文的学习,让Greenplum的管理命令变的不在那么陌生。

五.代码链接

https://github.com/greenplum-db/gpdb/blob/master/gpMgmt/bin/gpstate

作者:王爱军


20年来一直工作在一线的老码农,目前就职于中兴通讯。主要工作方向为5G网络管理系统架构,近期在使用和研究Greenplum。

关注微信公众号

VMware 中国研发中心

Greenplum官方技术交流群

扫码添加小助手即可入群,添加时请备注 “GP网站”