@wenshizhang
2016-10-26T14:11:52.000000Z
字数 6006
阅读 385
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下的不同的盘。