@wenshizhang
2016-10-26T06:11:52.000000Z
字数 6006
阅读 457
hb_report crmsh suse实习
compatibility_pcmk,hb_report line 271)hb_report line 1340)utillib.sh line 42 getnodes())(允许用户指定收集某些节点的信息)和node数目。如果不指明node list,缺省值是全部节点(缺省时候需要打印提示信息提示用户使用-n参数)。hb_report __collector收集)。如果此节点不需要password,创建新进程后台运行收集collector节点的信息,父进程等待子进程退出(这里多进程运行为了提高收集信息的速度,如果有10个节点需要收集信息,可以创建10个进程,这样会节省很多时间)。master节点和collector节点的父类,抽象了每个节点的共性。
| 成员变量 | 描述 | 相关性 |
|---|---|---|
| SSH_PASSWD | 表示节点是否需要ssh password | 节点相关 |
| WE | 表示当前节点的名称 | 节点相关 |
| WORKDIR | log存储的临时目录位置 | 节点相关 |
| THIS_IS_NODE | 表示此节点是一个合法节点 | 节点相关 |
| 成员函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| compatibility_pcmk | 查找crm,heartbeat等等的daemon目录 | None | None |
| get_cluster_type | 如果用户未指定cluster type,查找type | None | None |
| get_conf | 根据cluster type获得CONF等变量 | None | None |
| check_this_is_node | 判断当前节点是否在收集节点列表中,如果是THIS_IS_NODE=1 | don't know | None |
| getlog | 原脚本中的getlog函数,功能不明 | None | None |
| mktar() | 创建指定的压缩文件 | 待创建压缩文件名 | None |
描述master节点特性的类,继承了node类
| 成员变量 | 描述 |
|---|---|
| SUDO | 表示在collector节点上运行的root节点命令 |
| LOCAL_SUDO | 表示在master节点上运行的root节点命令 |
| ENVIRMENT | 存储envir类的实例 |
注:
1.假设这样一个场景,用户并不是以root身份运行hb_report,这是被允许的。但是当需要ssh到collector节点上时,要求使用root用户,因为收集使用journalctl收集信息要求是root用户。因此在测试ssh之前,需要测试当前用户是否是root用户,如果不是root用户,需要保存切换到root用户命令,SUDO保存ssh到collector节点时候切换root用户命令,LOCAL_SUDO保存收集master节点时候切换到root用户的命令
| 函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| analyzed_argvments() | 解析参数,根据不同的参数为envir类中的成员赋值 | ||
| mktemp() | 在/tmp目录下创建临时目录文件(WORKDIR) | None | 临时文件路径 |
| is_node() | 判断当前的node是否是一个合法的node | None | None |
| find_ssh_user() | 如果用户未指定,查找可以ssh到collector节点的user和ssh的参数 | None | None |
| find_sudo() | 如果当前用户非root,生成切换到远程或者本地root用户的命令 | None | None |
| change_time() | 把用户输入的时间转换为system log中的形式 | None | None |
| collect_for_nodes() | 判断ssh是否需要password | None | None |
| start_collect() | 创建新进程ssh连接到collector节点收集信息 | None | None |
| analyzed() | 原脚本中的analized函数 | 未知 | 未知 |
| events() | 原脚本中的event函数 | 未知 | 未知 |
| check_if_log_is_empty() | 原脚本中函数 | 未知 | 未知 |
| finalword() | 打印提示信息 | None | None |
| send_envir() | 向collector node传递envir成员变量(存储envir类的实例) | None | None |
__init__() |
实例master类后调用的第一个方法 | self,类envir的一个实例 | None |
| run() | master类的入口函数 | 用户调用hb_report输入的全部参数 | None |
注:
1.collector节点都是复制的master节点(不是copy master节点的标志都定义在了collector类中),因此获取这些变量值是在master类中
2.master类创建的WORKDIR是是$tmpdir/$DEST(DEST是用户输入的生成report name)
3.start_collect函数只是开始收集动作并触发收集函数,真正收集的是collector类中的collect_info函数,所有信息的收集都是collector类的collect_info方法完成。此方法通过node类型(collector节点或者master节点)
4.创建新线程运行analyzed和events方法
5.如果cluster node不需要password,为了提升性能创建新进程分别去收集各个节点log,父进程等待子进程结束。
6.在master node上为envir成员变量每个成员赋值,然后用send_envir方法创建对应的xml文件,并使用socket发送给collector node(可以传送xml字符串或者对应的xml文件)。
7.需要创建一个init方法是有一个成员变量是另一个类的实例,因此需要在init方法中给这个成员赋值,
8.
描述collector节点特性的类,继承了node类
| 成员变量 | 描述 | 相关性 |
|---|---|---|
| ENVIRMENT | 表示类envir | 环境变量相关 |
注:
1.此成员为了保存envir类的实例中存储的一些环境变量,收集信息需要用到这些变量。
| 成员函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| mktemp() | 在/tmp目录下创建临时目录文件 | None | 临时文件路径 |
| collect_info() | 真正收集log的函数 | None | None |
| return_result() | collector node返回result给master节点 | None | None |
| get_envir() | 解析master node传递的envir实例 | None | None |
__init__ |
创建实例后调用的方法 | self,envir类的实例 | None |
| run() | collector类的入口方法 | None | None |
注:
1.collector类创建的的WORKDIR是$tmpdir/$DEST/$WE,创建动作完成后需要测试结果
2.collector node返回结果给master节点时候,打成tarball,通过流或者其他方式返回给master节点,master节点再解压缩(压缩是为了降低网络造成的瓶颈)。
3.master node ssh到collector node,实例一个对象,然后执行collector类的某个函数(此处存疑,不确定是执行collector脚本还是执行某一个入口函数)
4.collector类和master类都有一个成员是envir的实例,为了保存整个hb_report运行过程中的每一个全局的环境变量。
5.需要实现一个collector脚本,这个脚本就是调用collector类的run函数
关于定义为模块还是类存疑:模块可以作为一个全局参数不用在每个类和函数之间传递,但是模块在各个节点之间共享麻烦;类可以当作参数从一个节点传递到另外一个节点,但是类在对成员变量修改的函数必须作为参数传递进去,这个还要斟酌一下
根据不同的参数需要设置的不同的全局变量,以及一些其他的标志变量。倾向于把这些变量全部放在同一个类中,这样结构简单。envir类是每个节点都需要一份,因此在调用collector节点上hb_report之前,需要先复制这些变量。
| 成员变量|描述|相关|缺省值|
| FROM_TIME | 表示收集info开始时间 | 参数相关 |
|---|---|---|
| TO_TIME | 表示收集info结束时间 | 参数相关 |
| NODE_SOURCE | 表示节点来源 | 参数相关 |
| USER_NODES | 表示节点列表 | 参数相关 |
| SSH_USER | 表示ssh登陆用户(默认是root和hacluster) | 参数相关 |
| SSH_OPTS | 表示ssh登陆的参数 | 参数相关 |
| DEST | 用户指明的tarball文件名 | 参数相关 |
| HA_LOG | 表示log file的位置(绝对路径) | 参数相关 |
| EDITOR | 表示用户指明的偏好编辑器 | 参数相关 |
| SANITIZE | 参数相关 | |
| DO_SANITIZE | 参数相关 | |
| SKIP_LVL | 快速收集参数 | 参数相关 |
| LOG_PATTERNS | 参数相关 | |
| NO_SSH | 表示只是收集master节点信息 | 参数相关 |
| NO_DESCRIPTION | 不要适应任何一个编辑器 | 参数相关 |
| FORCE_TO_REMOYE | 如果已经存在了目的tarball,删除tarball执行 | 参数相关 |
| EXTRA_LOGS | 需要收集的附加log | 参数相关 |
| USER_CLUSTER_TYPE | 指明cluster类型 | 参数相关 |
| VERBOSITY | hb_report版本 | 参数相关 |
| COMPRESS | 不压缩结果 | 参数相关 |
| SSH_PASSWD_NODES | ssh需要密码的node(不明白怎么判断哪些node ssh需要密码) | 未知相关性 |
| LOGD_CF | logd.cf的位置 | 全局标志 |
| ANALYSIS_F | 收集的analysis.txt文件 | 收集文件相关 |
| DESCRIPTION_F | 收集的description.txt文件 | 收集文件相关 |
| HALOG_F | 收集的ha-log.txt文件 | 收集文件相关 |
| JOURNAL_F | 收集的journal.log文件 | 收集文集相关 |
| BT_F | 收集的backtrace.txt文件 | 收集文件相关 |
| SYSINFO_F | 收集的sysinfo.txt文件 | 收集文件相关 |
| SYSSTATS_F | 收集的sysstats.txt文件 | 收集文件相关 |
| DLM_DUMP_F | 收集的dlm_dump.txt文件 | 收集文件相关 |
| TIME_F | 收集的time.txt文件 | 收集文件相关 |
| CRM_MON_F | 收集的crm_mon.txt文件 | 收集文件相关 |
| MEMBERSHIP_F | 收集的member.txt文件 | 收集文件相关 |
| HB_UUID_F | 收集的hb_uuid.txt文件 | 收集文件相关 |
| HOSTCACHE | 收集的hostcache文件 | 收集文件相关 |
| CRM_VERITY_F | 收集的crm_verity.txt文件 | 收集文件相关 |
| PERMISSIONS_F | 收集的permossion.txt文件 | 收集文件相关 |
| CIB_F | 收集的cib.xml文件 | 收集文件相关 |
| CIB_TXT_F | 收集的cib.txt文件 | 收集文件相关 |
| COROSYNC_RECOERED_F | 收集的fdata.txt文件 | 收集文件相关 |
| CONFIGURATIONS | 常量 | 未知相关性 |
| 成员函数 | 描述 | 参数 | 返回值 |
|---|---|---|---|
__init__() |
设置上面参数相关的成员变量默认值 | None | None |
test COLLECTOR结果是true。集群文件系统和分布式文件系统的区别:
集群文件系统管理的是一块共享盘,实际上是同一块盘,并且数据都是一样的,集群文件系统因为要互斥每个节点对share storage的读写访问,需要使用DLM加锁。分布式文件系统管理的是每个pc下的不同的盘。