序言
本文是学习和研究Greenplum总结,并在社区中分享的文章。这里做了转载,把简书作为近期学习心得一个统一入口。感谢你的阅读,希望你能有所收获,并对文章提出建议。
原文链接:https://cn.greenplum.org/controller-worker/
一.背景
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 架构模式辅助说明:
Controller-Worker是一种组合架构模式,Controller基于Client的参数动态生成Woker数量,并控制Woker的生命周期,如创建和终止。
Controller属性
Controller事先知道自身拥有的Woker类型。
Controller依赖一个工作任务池,通过工作任务池Controller监控整体任务执行情况。
Worker属性
Worker并行消费工作任务池中任务,并把执行结果返回到任务池中。
Worker彼此间没有任何耦合。
三. gpstate命令分析
1. gpstate流程
图2 流程图2. 模块依赖关系
图3 模块关系
辅助说明:
虚框中模块为数据结构的定义。
Command命令最终是通过ssh和host进行交互,如 ssh –o StrictHostKeyChecky=no –o ServerAliveInterval=60 HostName “./usr/local/greenplum-db/greenplum_path.sh;$GPHome/sbin/gpgetstatusUsingtransiton.py …”,结果采用base64编码。
gpstate为python文件,通过#!/use/bin/env python方式,可以直接执行。
3. 架构模式
图4 架构数据流辅组说明:
Controller通过WorkerPool和Worker进行命令传递。
Controller通过超时机制,保证最后一定有命令结果返回给Client
Controller通过halt命令,停止所有的Woker
Worker采用Thread方式来实现。
Worker1、Worker2、WorkerN无差别,根据获取的Cmd,通过ssh方式在对应的Host执行命令。
四.总结
对gpstate命令的分析方法,可以应用到其他集群操作命令。当管理命令出现异常,可以基于日志,精准定位问题所在。命令是python脚本实现,可以临时增加想要的日志辅助理解和问题定位。通过本文的学习,让Greenplum的管理命令变的不在那么陌生。
五.代码链接
https://github.com/greenplum-db/gpdb/blob/master/gpMgmt/bin/gpstate
网友评论