概要描述
本篇文档仅适用于Manager 8.x之前的版本。
生成tdh-client的前提是已经存在该目录/var/lib/transwarp-manager/master/content/resources/tdh_client,该目录在上传产品包时生成,内容也均来自产品包。
生成tdh-client的过程中只会更新tdh_client下的conf目录、hosts文件以及/etc/krb5.conf文件。
配置项
属性定义
在application.conf中,只有在这里conf-link里定义的sid(key即为sid,sid即namePrefix),才会下载conf到tdhclient中。
tdh-client {
tar-filename = "tdh-client.tar"
conf-link {
hadoop = [yarn, hdfs, argodbcomputing]
hyperbase = [hyperbase]
inceptor = [inceptor, argodbcomputing]
zookeeper = [zookeeper]
hbase = [hbase]
}
conf-filter {
file-name = ["\\*.keytab", "\\*.jks", "guardian-site.xml", "ldap-conn-pass.txt"]
}
}
tar-filename:打包后的文件名
conf-link:产品和服务的链接管理,后面会根据此关系生成软链接
conf-filter:需要过滤的配置文件
文件目录
tdh-client.tar所在目录:/var/lib/transwarp-manager/master/content/resources
服务器上可用tdh-client目录:/var/lib/transwarp-manager/master/content/resources/tdh_client
配置所在目录:/var/lib/transwarp-manager/master/content/resources/tdh_client/conf
原理解析
用一句话总结,其实就是把所有已安装的service的相关配置copy到/conf目录下,并打包生成tdh-client.tar文件,以供客户端下载并使用。
具体的流程可以分三步看:
权限校验
组装入参
准备&打包
一、权限校验
check当前登录用户是否具有类型为ADMIN权限,有则继续,否则抛出异常
获取当前已安装并且当前登录用户具有权限的service列表,这里的service不区分集群
校验权限的逻辑(满足一条即可):
具有ADMIN权限
具有service所在集群的CLUSTER_ADMIN权限
具有service的SERVICE_ADMIN权限
二、组装入参
sidHostMultiMap(Map),当前的所有具有admin权限的service,sid与roles的映射
key:service.sid
value:当前service下,所有role的hostname的列表(去重)
ipHost(Map),hostname和ip的映射
key:hostname对应的机器ip地址
value:hostname
kerberosEnabled(Boolean):是否有开启了Kerberos服务,true:有,false:无
三、生成tdhclient
该步骤在代码中
拷贝服务的配置文件
初始化conf目录,即createAndClean
拷贝符合条件的service的conf/到/tdh_client/conf下
过滤已安装服务中不符合条件的服务
sid满足规则:([^0-9])[0-9],即非数字的字符+数字,例如:inceptor1
具有role,并且存在role安装成功
对满足条件的所有service
创建sid的目录,如安装了inceptor1和hdfs1,这里创建两个目录,/conf/inceptor1和/conf/hdfs1
将etc下的conf目录及内容复制到sid目录下
fromDir:/etc/${sid}/conf/
toDir:/var/lib/transwarp-manager/master/content/resources/tdh_client/conf/${sid}/
fromHost:role对应的host,如果有多个host,取第一个
filter:过滤匹配了conf-filter规则的文件
Yarn的定制逻辑
如果/etc/$yarnSid/conf/yarn-env.sh中有配置HDFS_CONF_DIR=/etc/(hdfs[0-9]+)/conf,那么将此hdfsSid复制到yarnSid目录下。
例如:HDFS_CONF_DIR=/etc/hdfs1/conf并且安装了yarn1,会将/etc/hdfs1/conf目录下的文件也拷贝到/var/lib/transwarp-manager/master/content/resources/tdh_client/conf/yarn1/下
将产品的目录链接到sid目录
将conf-link的key作为产品目录,取value中匹配的第一条,作为服务目录,创建产品目录->服务目录的软链
如果一个产品有多个sid,只会指向一条,目前的规则是会关联到最新创建的那一个sid
例如:hadoop = [yarn, hdfs, argodbcomputing]
产品目录为hadoop
服务目录为yarn1,如果此时没有安装yarn1,便会指向hdfs1
如果安装多个yarn(多个集群或单个集群),存在yarn1和yarn2,便会指向yarn2
lrwxrwxrwx 1 root root 5 11月 16 14:51 hadoop -> yarn1
drwxr-xr-x 2 root root 185 11月 16 14:51 hdfs1
drwxr-xr-x 2 root root 4096 11月 16 14:51 yarn1
lrwxrwxrwx 1 root root 10 11月 16 14:51 zookeeper -> zookeeper2
drwxr-xr-x 2 root root 128 11月 16 14:51 zookeeper1
drwxr-xr-x 2 root root 128 11月 16 14:51 zookeeper2
生成hosts文件
在/var/lib/transwarp-manager/master/content/resources/tdh_client目录下创建hosts文件,并写入当前host配置(从入参获取)
如:
172.22.8.200 tdh-200
172.22.8.201 tdh-201
172.22.8.202 tdh-202
拷贝kerberos配置
1,如果kerberos为true,需要更新kerberos/krb5.conf目录
fromDir:/etc/krb5.conf
如果已存在文件,覆盖更新
2,如果kerberos为false,删除kerberos/krb5.conf目录
生成压缩包以供下载
1,准备供打包的临时目录(createAndClean)
临时目录地址:/var/lib/transwarp-manager/master/content/resources/tdh_client_package_root
2,创建目录:TDH-Client
,3,将所需文件复制到TDH-client目录下
即:将/var/lib/transwarp-manager/master/content/resources/tdh_client目录下所有文件复制到TDH-Client文件下
cp -r -p -d /var/lib/transwarp-manager/master/content/resources/tdh_client/* TDH-Client/
4,将TDH-client目录压缩打包成tar文件
将会在/var/lib/transwarp-manager/master/content/resources目录下生成tdh-client.tar
5,清空打包临时目录
TIPS
tdh-client这个目录何时会被更新
1,tdhclient下载(需要在页面手动触发)
会去更新/var/lib/transwarp-manager/master/content/resources/tdh_client下,conf和kerberos目录,并copy文件进来,文件的源头是/etc/
2,上传产品包
上传产品包本质其实是执行这一条指令,就是去执行产品包里的脚本,具体会对tdhclient目录做什么,要看脚本是怎么编写的
bash <untarDir> /scripts/install.sh --FTP_DIR=<ftpDir> --META_DIR=<metaDir> --TDH_CLIENT_DIR=<tdhClientDir> --TDH_PLUGIN_DIR=<tdhPluginDir>
tdhClientDir 就是/var/lib/transwarp-manager/master/content/resources/tdh_client
/scripts/install.sh 是由组件的产品包里提供的