FusionInsight 产品 之 preinstall 功能简介 及 FAQ
FusionInsight 产品 之 preinstall 功能简介 及 FAQ
本文主要对FusionInsight中preinstall工具功能简单介绍,以及在使用过程中常见的问题进行了简单总结, 目的在于帮助大家对preinstall相关功能有个简单的认识,并在使用过程中方便问题排查。
1. 背景及目的
FusionInsight产品在部署时对操作系统、系统软件、OS配置、磁盘等有特定的要求,故在产品安装前需要对OS进行配置,以保证大数据稳定、高效运行,实现大数据版本与OS版本的解耦
2. preinstall功能:
preinstall工具会配置OS设置系统参数,补充RPM包、配置hostname、关闭swap、磁盘分区格式化、安装statmon服务、rngd服务和diskmgt服务(根据配置是否安装)
2.1 配置OS设置系统参数
RedHat/CentOS
1. 设置系统服务
1) 配置启动crond服务
2) 配置启动sshd服务
3) 配置关闭iptables服务
4) 如果存在cgconfig服务,配置关闭cgconfig服务
5) 配置启动ipmi服务
6) 配置启动ipmievd服务
7) 配置启动sssd服务
8) 配置启动ntp服务
2. 设置系统配置
1) 修改/etc/sysconfig/i18n文件,将LANG设置为en_US.UTF-8
2) 修改/etc/security/limits.d/90-nproc.conf文件,将nproc设置为600000
3) 修改/etc/security/limits.d/90-nofile.conf文件,将nofile设置为640000
4) 修改/etc/fstab文件,如果存在/、/boot、/home、/opt、/tmp、/var、/var/log的挂载点,那么在挂载参数中增加errors=panic配置项,并重新挂载
5) 在/etc/profile添加配置export NSS_SDB_USE_CACHE=no
6) 根据配置文件中的g_swap_off开关关闭swap
7) 根据配置文件中的g_hostname_conf设置节点的主机名并配置/etc/hosts
3. 修改系统参数
1) 修改/etc/sysctl.conf文件,配置kernel.sysrq = 1
2) 修改/etc/sysctl.conf文件,配置kernel.kstack_depth_to_print = 20
3) 修改/etc/sysctl.conf文件,配置kernel.panic_on_oops = 1
4) 修改/etc/sysctl.conf文件,配置kernel.panic = 5
5) 修改/etc/sysctl.conf文件,配置kernel.hung_task_timeout_secs = 3600
6) 修改/etc/sysctl.conf文件,配置kernel.hung_task_panic = 1
7) 修改/etc/sysctl.conf文件,配置vm.panic_on_oom = 2
8) 修改/etc/sysctl.conf文件,配置vm.oom_dump_tasks = 1
9) 修改/etc/sysctl.conf文件,配置kernel.softlockup_panic = 1
10) 修改/etc/sysctl.conf文件,注销 net.bridge.bridge配置项
11) 修改/etc/sysctl.conf文件,配置vm.swappiness = 0
12) 修改/etc/sysctl.conf文件,配置fs.file-max = 640000
13) 修改/etc/sysconfig/selinux文件,配置SELINUX=disabled
14) 修改/etc/sysconfig/cpuspeed文件,配置GOVERNOR=preformance
SUSE
1. 设置系统服务
1) 配置启动crond服务
2) 配置启动sshd服务
3) 配置启动ipmi服务
4) 配置启动ipmievd服务
5) 配置启动nscd服务
6) 配置启动ntp服务
2. 设置系统配置
1) 修改/etc/sysconfig/language文件,将LANG设置为en_US.UTF-8
2) 修改/etc/sysconfig/clock文件,将HWCLOCK 设置为 –u
3) 修改/etc/security/limits.d/90-nproc.conf文件,将nproc设置为60000
4) 修改/etc/security/limits.d/90-nofile.conf文件,将nofile设置为64000
5) 修改/etc/fstab文件,如果存在/、/boot、/home、/opt、/tmp、/var、/var/log的挂载点,那么在挂载参数中增加errors=panic配置项,并重新挂载
6) 在/etc/profile添加配置export NSS_SDB_USE_CACHE=no
7) 根据配置文件中的g_swap_off开关关闭swap
8) 根据配置文件中的g_hostname_conf设置节点的主机名并配置/etc/hosts
3. 修改系统参数
1) 修改/etc/sysctl.conf文件,配置kernel.sysrq = 1
2) 修改/etc/sysctl.conf文件,配置kernel.kstack_depth_to_print = 20
3) 修改/etc/sysctl.conf文件,配置kernel.panic_on_oops = 1
4) 修改/etc/sysctl.conf文件,配置kernel.panic = 5
5) 修改/etc/sysctl.conf文件,配置kernel.hung_task_timeout_secs = 3600
6) 修改/etc/sysctl.conf文件,配置kernel.hung_task_panic = 1
7) 修改/etc/sysctl.conf文件,配置vm.panic_on_oom = 2
8) 修改/etc/sysctl.conf文件,配置vm.oom_dump_tasks = 1
9) 修改/etc/sysctl.conf文件,配置vm.swappiness = 0
10) 修改/etc/sysctl.conf文件,配置fs.file-max = 640000
11) 修改/etc/sysconfig/selinux文件,配置SELINUX=disabled
2.2 自动补齐OS缺失的rpm包
如果用户配置了g_add_pkg参数,那么会根据需要配置rpm包.
需要补齐的rpm包配置路径:FusionInsight_SetupTool/preinstall/script/function/add_packages/conf/${OS_NAME}-${VERSION}_must
-rpms-{ARCHITECTURE}.lst
ARCHITECTURE: aarch64/x86_64(默认缺省)
2.3 配置hostname
如果用户配置g_hostname_conf参数,那么preinstall会根据配置修改HostName,并且修改对应的/etc/hosts文件。
2.4 关闭swap
如果用户配置了g_swap_off参数,那么preinstall会自动将系统的swap关闭,并将swap分区卸载。
2.5 磁盘分区格式化
当配置了g_add_pkg值, preinstall工具会根据g_parted_conf配置中指定的配置文件(master.ini, host0.ini, host1.ini……), 对指定主机进行磁盘分区并格式化
master.ini/host*.ini 文件中配置项含义举例说明:
文件master.ini/host*.ini内容样例:
#mount required care condition
common.conf y y common_condition.sh
zookeeper.conf y y zookeeper_condition.sh
journaldir.conf y y journaldir_condition.sh
namenode.conf y y namenode_condition.sh
datanode1.conf n y n
datanode2.conf n y n
datanode3.conf n y n
配置项说明:
1. mount列:表示要挂载的配置明细(下面会描述到)。如果要多个模块并区,可把配置文件通过#号连接在一起,比如要把ZooKeeper模块和
NameNode模块的目录合在一个盘符上,则可配置mount项为zookeeper.conf#namenode.conf。不过基于FusionInsight组网规划的要求,此并区功能请谨慎使用。
2. required列:表示是否必须挂载,如果填写了y(yes),那么若由于盘数不够或者无符合挂载条件的盘符,则整个流程将失败;而如果填写了n(no),
那么表示不强求挂载此配置项,即其挂载成功与否,不会影响整个流程的结果。
3. care列:表示是否关注此配置项,如果为y表示进行监控处理,如果为n表示只在预安装阶段进行挂载,此后硬盘管理服务不会去监控它,即完全忽略它的存在。
4. condition列:表示配置项的盘符要求条件,比如要求是硬盘容量等。如果为n表示任何一个可用的盘符即可满足条件。
文件common.conf内容样例:
ver=1.0
name=common
dir=/srv/BigData/common
size=300 #unit: G
filesystem=ext4
user=omm
group=wheel
permission=755
notify=common_notify.sh
notifytimeout=60 #unit: second
description="This is for PT storage."
参数配置说明:
1. ver:表示版本,用于后续升级的判断。
2. name:表示配置项名称。
3. dir:表示挂载目录。
4. size:表示分区大小,单位为G。如果填写max表示剩余的全部盘符空间。
5. filesystem:表示分区的文件系统格式,目前支持ext3/ext4/default三种,其中default是表示同操作系统根分区的挂载文件系统格式,
主要是用来解决redhat和suse的默认文件系统差异。
6. user:表示目录所属用户。
7. group:表示目录所属群主。
8. permission:表示目录权限。
9. notify:表示目录可用/不可用/只读后的通知脚本。
10. notifytimeout:表示执行通知脚本的超时时间。
11. description:表示大数据模块目录配置项的描述。
文件common_condition.sh内容样例:
#!/bin/bash
if [ $1 is RAID1 ]; then
exit 0
else
exit 1
fi
脚本说明:
此条件脚本的唯一参数是硬盘设备逻辑盘符(如sda),用来判断此盘符是否符合大数据模块对盘符的要求,如果返回0表示符合;返回其它值则表示不符合。
若条件脚本不存在(比如被误删等),则同填写n处理方式,即表示对盘符无条件要求
2.6 statmon服务:
statmon服务是一个操作系统运行状态的监控服务,它不设置操作系统,而是对操作系统进行监控,监控的日志全部记录在/var/log/osinfo/statistics
/目录下(需要root用户权限)。
statmon对定位问题至关重要,可使用service命令对该服务进行启动、停止和查看状态。
2.7 rngd服务:
当配置了g_feed_random_setup值,preinstall工具会向系统安装rngd服务,preinstall会优先使用系统的haveged服务,如果系统存在haveged服务
(SUSE11.2和SUSE11.3),
那么仅仅是将haveged服务启动,并设置开机启动,如果不存在haveged服务,那么会启动系统的rngd服务
(RedHat/CentOS启动rngd服务,SUSE11.1启动rngd进程,并将进程写入cron中监控)
2.8 diskmgt服务
diskmgt服务是一个磁盘监控服务,它会对通过它挂载的磁盘进行监控,当磁盘分区丢失或者出现只读时(磁盘故障)发送告警,并且尝试修复故障。
它也就是我们常说的磁盘热插拔服务。
如果用户没有通过preinstall对磁盘进行分区挂载,那么diskmgt服务将不会安装。
preinstall运行完成之后
diskmgt服务并不会自动启动,需要安装nodeagnt才会启动,当然也可以手动启动
3. 配置说明:
3.1 对应的配置文件为:preinstall.ini (FusionInsight_SetupTool/preinstall/preinstall.ini)
3.2 必须配置的几个配置项:
g_hosts="" 含义:需要配置的 主机名(IP地址)列表
g_parted_conf="" 含义:指定磁盘格式化的配置文件(支持不同节点有不同的分区配置)
相关配置:g_parted=
如果 g_parted=0,该配置项可以为空。
g_pkgs_dir="" 含义:指定rpm源(如果是iso,需要把ISO挂载至目录)
相关配置:g_add_pkg=
如果 g_add_pkg=0,该配置项可以为空。
g_platform="" 含义:指定系统的cup类型,可以执行命令'uname -p'查看
可选项 'x86_64' 'aarch64'
配置项的详细信息可以参考 preinstall.ini 中的说明.
4. 运行(可以在集群中的任一节点上运行)
4.1 运行方式
-
./preinstall.sh (路径:FusionInsight_SetupTool/preinstall/preinstall.sh)
-
./setuptool.sh preinstall (路径:FusionInsight_SetupTool/setuptool.sh)
4.2 输入集群密码(默认为集群的root密码)
5. 当前支持的OS版本
redhat-6.3;redhat-6.4;redhat-6.5;redhat-6.6;redhat-6.7;redhat-6.8;redhat-6.9;
redhat-7.0;redhat-7.1;redhat-7.2;redhat-7.3;redhat-7.4;redhat-7.5;redhat-7.6;
neokylin-5.5;neokylin-6.9;neokylin-7.2;neokylin-7.4;neokylin-7.5;neokylin-7.6;
kylin-V10;kylin-V10-fedora;
bclinux-7.6;
oracle-7.4;oracle-7.5;oracle-7.6;
suse-11.1;suse-11.2;suse-11.3;suse-11.4;suse-11;
suse-12.0;suse-12.1;suse-12.2;suse-12.3;suse-12.4;suse-12.5;
suse-15;suse-15.1;
centos-6.4;centos-6.5;centos-6.6;centos-6.7;centos-6.8;centos-6.9;centos-6;
centos-7.0;centos-7.1;centos-7.2;centos-7.3;centos-7.4;centos-7.5;centos-7.6;centos-7.9;centos-8.0;
euleros-2.0;euleros-2.0sp1;euleros-2.0sp2;euleros-2.0sp3;euleros-2.0sp5;euleros-2.0sp8;openEuler-20.03;euleros-2.0sp9;euleros-2.0sp10;
6. 常见故障处理
preinstall运行出现意外的失败,一般和用户的运行环境有关系,以下为常见的一些问题的处理,仅供参考。
- 6.1 运行失败,打印Don’t login 192.188.45.182. Return code:255失败信息
出现了Don't login ip地址. Return code:255的失败信息打印,一般是输入的密码不对导致的。解决办法:
1. 检查输入的密码是否正确,如果输入错误,请重新输入正确密码。
2. 检查所有节点的密码是否一致,如果不一致,请将所有节点的密码设置成一致。
3. 检查ip地址指定的节点的sshd的设置是否正确,是否允许对应的用户登录该节点。一般是将/etc/ssh/sshd_config 文件中的PermitRootLogin配置成no导致的
- 6.2 运行阻塞,preinstall长时间运行没有结束,进度条没有任何变化。
如果节点的磁盘较多,磁盘的容量也比较大,那么preinstall运行确实比较费时,因为格式化大容量磁盘比较慢,在这种场景下,请用户耐心等待。
如果preinstall出现数个小时都没有结束,并且进度条没有任何的变化,那么preinstall可能是出现阻塞了,一般是如下原因导致。
1. 启动ipmi服务阻塞
可查看preinstall的日志,最后的日志是starting ipmievd,而没有其他更多的打印。出现了该问题一般的BMC的ipmi服务存在故障。
解决办法:重启系统。
2. rpm命令阻塞
可运行ps –ef | grep rpm查看rpm命令进程的个数,如果存在几十个甚至上百个rpm相关的命令是可能是rpm命令出现阻塞导致的了。
那么您可以尝试在节点上手工执行rpm -qa | grep glibc命令检查有喜爱rpm命令是否是真的阻塞。
解决办法:运行命令: cd /var/lib/rpm;rm -rf __db*;rpm –rebuilddb,再次运行preinstall。
- 6.3 运行失败,打印os version not supported失败信息
1. 操作系统版本不支持
打印该失败信息,一般是由于该节点的操作系统不在preinstall当前的支持范围内,当前preinstall支持的操作系统版本为:SuSE11 SP1、
SuSE11 SP2、SuSE11 SP3、RedHat 6.4、RedHat 6.5、RedHat 6.6、RedHat 6.7、CentOS 6.4、CentOS 6.5、CentOS 6.6、CentOS 6.7。
解决办法:重新安装操作系统,操作系统版本仅限上述版本。
2. rpm命令阻塞
可运行ps –ef | grep rpm查看rpm命令进程的个数,如果存在几十个甚至上百个rpm相关的命令是可能是rpm命令出现阻塞导致的了。
那么您可以尝试在节点上手工执行rpm -qa | grep glibc命令检查有喜爱rpm命令是否是真的阻塞。
解决办法:运行命令cd /var/lib/rpm;rm -rf __db*;rpm –rebuilddb,再次运行preinstall。
- 6.4 运行失败,打印python version is too low. The minimum version is 2.6.5失败信息
打印该失败信息,一般该节点是SuSE11 SP1,因为FusionInsight要求的Python版本最低为2.6.5,而SuSE11 SP1的Python版本小于2.6.5,所以导致失败。
解决办法:升级Python版本至2.6.5或者以上版本。
- 6.5 运行失败,打印Setup os failed失败信息
打印该失败信息,一般是由于设置系统参数时出现了异常,一般是如下原因造成的(ssh登录到对应失败的节点,进行如下原因排查):
1. /etc/fstab文件异常。该文件存在异常信息,导致preinstall在其中的挂载选项中添加errors=panic项失败。
解决办法:解决/etc/fstab文件异常的问题
2. /etc/hosts中配置的hostname和preinstall.ini中的g_hostname_conf配置的hostname不一致。
解决办法:如果g_hostname_conf配置的对应节点的hostname不正确,那么修改g_hostname_conf的配置,重新执行preinstall。
如果/etc/hosts中的hostname配置不正确,那么将该项删除(preinstall会自动添加正确的hostname)。
3. /etc/hosts中没有配置127.0.0.1 localhost
解决办法:将127.0.0.1 localhost配置到/etc/hosts中
4. /etc/hosts中存在IP地址对应多个主机名的问题。
解决办法:将不正确的主机名删除
5. swapon –s命令显示的swap信息和/etc/fstab中配置的swap信息不一致。一般是由于只运行swapoff将对应的swap关闭,
在没有将swap的配置信息从/etc/fstab中删除。
解决办法,编辑/etc/fstab将swap的配置行全部删除,运行swapoff /dev/sdX将swap关闭。
6. /etc/sysctl.conf文件中包含非法配置项,导致执行sysctl -p失败。
解决办法:删除/etc/sysctl.conf文件中的非法配置项。
- 6.6 运行失败,打印Disk format failed失败信息
出现该失败的打印一般是由于配置和环境不匹配导致的,登录到对应失败的节点查看入选日志,C60之前版本的默认日志路径为/var/log/diskmgt/autopart.log,
C60及以后版本的默认日志路径为/tmp/diskmgt/autopart.log,该文件记录了Disk format failed失败的详细原因:
1. 打印sys swap and fstab swap are different错误。
出现这个错误一般是由于swap没有正确关闭导致的,swapon –s命令显示的swap信息和/etc/fstab中配置的swap信息不一致。一般是由于只运行
swapoff将对应的swap关闭,在没有将swap的配置信息从/etc/fstab中删除。
解决办法,编辑/etc/fstab将swap的配置行全部删除,运行swapoff /dev/sdX将swap关闭。
2. 打印root filesystem(xxxx) is not ext3/ext4错误
当前preinstall仅支持根目录的文件系统为ext3或者ext4的环境,对于其他文件系统的环境,preinstall还不支持。
解决办法:重装系统,将根目录的文件系统设置为ext3或者ext4.
3. 打印fstab mnt(xxxx) dev(xxxx}) dir(xxxx) can not find in system mnt错误
preinstall会检查当前的mount命令显示的挂载和/etc/fstab中的挂载是否一致,如果不一致就会打印上述错误,因为/etc/fstab中的配置
错误可能会导致节点无法重启,所以需要慎重对待。
解决办法:运行mount命令和查看/etc/fstab文件,检查是mount命令错误还是/etc/fstab文件有误,并修正。修正后再次尝试。
4. 打印item(xxxx) dir(xxxxx) already mount错误
指定的目录已经被挂载,而配置中还要求preinstall进行挂载,所以报出这个错误。常见于将diskmgt卸载后,没有将手动将磁盘umount并
修改/etc/fstab,然后就运行了preinstall,实际上这些磁盘都还被挂载着。
解决办法:将对应挂载点的磁盘umount掉,并修改/etc/fstab,修改后重新运行preinstall。
5. 打印item(xxxx) size is max, but pos(xxxx) is not last(xxxxx)错误
出现这种打印,一般常见于并区的场景,也就是一块磁盘划分成多个分区,每个分区挂载在一个目录上。这个使用需要强制指定每一个分区的大小
(并区的最后一个分区不需要),打印上述错误也就是由于在并区的非最后一个分区使用了max来指定分区大小的,这必然会导致分区失败。
只有并区的最后一个分区可用使用max。
解决办法:修改并区的大小配置,出最后一个分区之后,其他的分区必须指定明确的大小,修正后再次运行preinstall。
6. 打印item(xxxx) notify(xxxx) is not exist错误
打印上述错误是由于配置中指定的notify文件不存在。常见于用户手动将整个partition目录删除,然后再将LLD生成的partition目录拷贝过来导致的。
解决办法:重新解压安装包,只需要将LLD生成的文件覆盖到preinstall中即可,请不要删除preinstall中的任何文件。
7. 打印/tmp/fi-preinstall.log do not read or write permissions错误
preinstall没有权限写日志文件/tmp/fi-preinstall.log,该日志文件应该是root:root权限的。常见于用户先使用root用户运行preinstall,
然后又使用非root用户运行preinstall,此时,非root用户就没有权限写/tmp/fi-preinstall.log文件了。
解决办法:使用root用户将/tmp/fi-preinstall.log文件删除或者修改权限。
8. 打印ready line conf(xxxxx}) can not match dev错误
1) 打印上述错误一般是由于当前节点的空白的磁盘数不足导致,比如用户配置挂载10块磁盘,但是当前节点只有5块空白的磁盘,
这就导致空白的磁盘不足,才打印上述错误。
解决办法:修改配置文件,使其和节点上的磁盘数一致;或者在节点上插入足够的磁盘。
2) 也常见于在preinstall.ini文件中将g_parted配置成1导致的。当g_parted配置成1时,他将只会寻找那些没有分区的磁盘,
而节点上可能存在已久被分区的空闲的磁盘,所以导致了和用户预期不一致。
解决办法:将preinstall.ini文件中的g_parted配置成2。
9. 打印disk ready xxxxx need blank disk错误
1) 打印上述错误一般是由于当前节点的空白的磁盘数不足导致,比如用户配置挂载10块磁盘,但是当前节点只有5块空白的磁盘,
这就导致空白的磁盘不足,才打印上述错误。
解决办法:修改配置文件,使其和节点上的磁盘数一致;或者在节点上插入足够的磁盘。
2) 也常见于在preinstall.ini文件中将g_parted配置成1导致的。当g_parted配置成1时,他将只会寻找那些没有分区的磁盘,
而节点上可能存在已久被分区的空闲的磁盘,所以导致了和用户预期不一致。
解决办法:将preinstall.ini文件中的g_parted配置成2。
10. 打印Size of devices /dev/sdX too big to be expressed in 32 bits错误
打印该错误一般是由于磁盘太大导致的,在preinstall的时候,将size配置成max,也就是将整块磁盘全部分配给这个分区,
如果磁盘的大小超过了16T,那么在格式化文件系统的时候,就会报错误,报告磁盘太大而导致了格式化失败。解决办法有两种:
1) 做RAID的时候,将RAID做小一下,比如只有10T等等,只要RAID盘的大小小于16T即可
2) 修改size的大小,也就是说不将整块磁盘分配给该分区,size的大小要小于16T。或者将该磁盘分成多个分区。
- 6.7 运行成功,但是执行时间较长
如果节点的磁盘较多,磁盘的容量也比较大,那么preinstall运行确实比较费时,因为格式化大容量磁盘比较慢,在这种场景下,请用户耐心等待。
可以查看/tmp/diskmgt/atpt_Dprocess.log(C60以前的版本请查看/var/log/ diskmgt/atpt_Dprocess.log),其中记录了mkfs进程的运行状态。
如果是虚拟机,那么需要检查母机的磁盘IO情况。因为有可能将多个虚拟机建在同一块磁盘上,那么对这个多个虚拟机进行格式化的时候,
虚拟机将对该磁盘产生竞争,而磁盘的性能不足于响应这些虚拟机的请求,导致格式化进程大部分阻塞。可以在母机上运行:iostat -x 1查看磁盘的性能统计信息。
- 6.8 运行失败,打印失败信息:Don’t find [XXXXX] rpm package in /media for IP地址
preinstall在/media目录下没有找到XXXXX rpm包,或者rpm命令存在问题导致在补充rpm包是出现错误,可能的原因:
1) 挂载的ISO光盘不完整,导致rpm命令出错。具体可以通过计算ISO光盘的MD5值或者比较大小来确定ISO光盘是否完整。 `
2) rpm命令存在问题。运行rpm –qa | grep glibc等等一系列的rpm命令,如果存在问题,可以运行命令cd /var/lib/rpm;rm -rf __db*;rpm –rebuilddb尝试修复。
- 点赞
- 收藏
- 关注作者
评论(0)