GPFS通用并行文件系统之CentOS上部署GPFS集群

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GPFS通用并行文件系统之CentOS上部署GPFS集群
GPFS文件系统能够横跨在所有主机上,分布在所有磁盘上,条带化读写,高性能。

信令管理机制,并发性好。

可配置failgroup组,可用性高。

下面是GPFS 集群的部署过程......
1.环境准备:
yum install -y compat-libstdc++-33 rpm-build kernel-headers kernel-devel imake gcc-c++ libstdc++ RedHat-lsb
2.GPFS安装:
多台服务器都要安装
rpm -ivh gpfs.base-3.4.0-0.x86_64.rpm
rpm -ivh gpfs.docs-3.4.0-0.noarch.rpm
rpm -ivh gpfs.gpl-3.4.0-0.noarch.rpm
rpm -ivh gpfs.msg.en_us-3.4.0-0.noarch.rpm
[root@Web02_a base]# rpm -qa|grep gpfs
gpfs.msg.en_US-3.4.0-0
gpfs.gpl-3.4.0-0
gpfs.base-3.4.0-0
gpfs.docs-3.4.0-0
3.GPFS升级
多台服务器都要安装
rpm -Uvhgpfs.base-3.4.0-21.x86_64.update.rpm
rpm -Uvh gpfs.docs-3.4.0-21.noarch.rpm
rpm -Uvh gpfs.gpl-3.4.0-21.noarch.rpm
rpm -Uvh gpfs.msg.en_US-3.4.0-21.noarch.rpm
[root@Web02_a update]# rpm -qa|grep gpfs
gpfs.gpl-3.4.0-21
gpfs.msg.en_US-3.4.0-21
gpfs.base-3.4.0-21
gpfs.docs-3.4.0-21
4.编译GPFS源码
多台服务器都要安装
[root@Web02_a update]# cd/usr/lpp/mmfs/src/
[root@Web02_a src]# makeLINUX_DISTRIBUTION=REDHAT_AS_LINUX Autoconfig [root@Web02_a src]# make World
[root@Web02_a src]# make InstallImages
[root@Web02_a src]# make rpm #生成rpm包,生成路径会有提示
[root@Web02_a src]# rpm -ivh
/usr/src/redhat/RPMS/x86_64/gpfs.gplbin-2.6.18-308.el5-3.4.0-21.x86_6 4.rpm
[root@Web02_a src]# rpm -qa|grep gpfs
gpfs.gpl-3.4.0-21
gpfs.msg.en_US-3.4.0-21
gpfs.gplbin-2.6.18-308.el5-3.4.0-21
gpfs.base-3.4.0-21
gpfs.docs-3.4.0-21
5.配置主机的时间同步
如果服务器之间时间不同步,部署GPFS集群时会失败
[root@Web02_a src]# crontab -l
#time sync by yangrong at 2014-1-24
*/10 * * * * /usr/sbin/ntpdate >/dev/null 2>&1
[root@Nagios update]# crontab -l
#time sync by yangrong at 2014-1-24
*/10 * * * * /usr/sbin/ntpdate >/dev/null 2>&1
6.配置ssh免密钥登陆
注:也可以配置rsh免密钥,且gpfs默认是使用rsh密钥登陆远端主机
[root@Web02_a src]# cd /root/.ssh/
[root@Web02_a .ssh]# ssh-keygen -t rsa
[root@Web02_a .ssh]# cp id_rsa.pubauthorized_keys
[root@Web02_a .ssh]# ssh Web02_a #登陆自己测试
[root@Web02_a .ssh]# cat /etc/hosts
10.0.0.243 Nagios
10.0.0.236 Web02_a
[root@Web02_a .ssh]# scp -r /root/.sshroot@Nagios:/root #把密钥拷贝到其它主机
[root@Web02_a .ssh]# ssh Nagios
Last login: Fri Jan 24 13:59:19 2014 from192.168.2.53
[root@Nagios ~]# exit
[root@Nagios src]# ssh Web02_a
Warning: Permanently added the RSA host keyfor IP address '10.0.0.236' to the list of known hosts.
Last login: Fri Jan 24 15:03:44 2014 fromlocalhost.localdomain
[root@Web02_a ~]# exit
7.配置GPFS环境变量
[root@Web02_a .ssh]# echo
'exportPATH=$PATH:/usr/lpp/mmfs/bin' >>/etc/profile
[root@Web02_a .ssh]# source /etc/profile
[root@Web02_a .ssh]# mmfs
mmfsadm mmfsd mmfsfuncs.Linux
mmfsck mmfsenv mmfsmnthelp
mmfsctl mmfsfuncs mmfsmount
#接下来的操作只需要在一台服务器上操作即可。

此时已配置好互信,所有的配置文件信息自动同步到其它的服务器上。

8.创建集群
[root@Web02_a .ssh]# cat /tmp/gpfsfile
Web02_a:quorum-manager
Nagios:quorum-manager
[root@Web02_a .ssh]# mmcrcluster -N/tmp/gpfsfile -p Web02_a -s Nagios -r /usr/bin/ssh -R /usr/bin/scp
#默认GPFS使用rcp拷贝,使用rsh远程。

此处修改远程方式和复制方式
#查询命令:mmlscluster
9.许可配置
[root@Web02_a ~]# mmchlicense server--accept -N Web02_a,Nagios
注:服务节点或quorum节点用server,其它节点用client,client节点只有挂载文件系统的权限,不能更改配置。

命令如:
mmchlicense client --accept -N host_a,host_b
10.配置nsd盘
当前采用多个分区部署GPFS集群
当前分区:
[root@Web02_a ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device
Boot Start End Blocks Id System
/dev/sdb1 1 13 104391 83 Linux
/dev/sdb2 14 26 104422+
83 Linux
/dev/sdb3 27 39 104422+
83 Linux
/dev/sdb4 40 130 730957+ 5 Extended
/dev/sdb5 40 52 104391 83 Linux
/dev/sdb6 53 65 104391 83 Linux
/dev/sdb7 66 78 104391 83 Linux
[root@Nagios ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device
Boot Start End Blocks Id System
/dev/sdb1 1 13 104391 83 Linux
/dev/sdb2 14 26 104422+
83 Linux
/dev/sdb3 27 39 104422+
83 Linux
/dev/sdb4 40 130 730957+ 5 Extended
/dev/sdb5 40 52 104391 83 Linux
/dev/sdb6 53 65 104391 83 Linux
/dev/sdb7 66 78 104391 83 Linux
编辑nsd配置
[root@Web02_a ~]# cat /tmp/nsdfile
/dev/sdb1:Web02_a::dataAndMetadata:01:
/dev/sdb2:Web02_a::dataAndMetadata:01:
/dev/sdb3:Web02_a::dataAndMetadata:01:
/dev/sdb5:Web02_a::dataAndMetadata:01:
/dev/sdb1:Nagios::dataAndMetadata:02:
/dev/sdb2:Nagios::dataAndMetadata:02:
/dev/sdb3:Nagios::dataAndMetadata:02:
#注:此时failgroup组1与组2磁盘数并不相同,但是磁盘不等是没关系的。

两个组相当于raid1。

[root@Web02_a ~]# mmcrnsd -F /tmp/nsdfile-v no
#生成NSD文件
[root@Web02_a ~]# cat /tmp/nsdfile
# /dev/sdb1:Web02_a::dataAndMetadata:01: gpfs1nsd:::dataAndMetadata:01::system
# /dev/sdb2:Web02_a::dataAndMetadata:01: gpfs2nsd:::dataAndMetadata:01::system
# /dev/sdb3:Web02_a::dataAndMetadata:01: gpfs3nsd:::dataAndMetadata:01::system
# /dev/sdb5:Web02_a::dataAndMetadata:01: gpfs4nsd:::dataAndMetadata:01::system
# /dev/sdb1:Nagios::dataAndMetadata:02: gpfs5nsd:::dataAndMetadata:02::system
# /dev/sdb2:Nagios::dataAndMetadata:02: gpfs6nsd:::dataAndMetadata:02::system
# /dev/sdb3:Nagios::dataAndMetadata:02: gpfs7nsd:::dataAndMetadata:02::system
# /dev/sdb5:Nagios::dataAndMetadata:02: gpfs8nsd:::dataAndMetadata:02::system
11.配置仲裁盘
#仲裁盘作用,当定义的仲裁盘有一半的磁盘不可用时,该集群不可用。

另:有效磁盘数小于等于整个磁盘数一半时,整个文件系统不可用。

[root@Web02_a ~]# mmchconfig
tiebreakerDisks="gpfs1nsd;gpfs2nsd;gpfs3nsd"
Verifying GPFS is stopped on all nodes ...
mmchconfig: Command successfully completed
mmchconfig: Propagating the clusterconfiguration data to all
affected nodes. This is anasynchronous process.
[root@Web02_a tmp]# mmgetstate -a
[root@Web02_a tmp]# mmgetstate -a
Nodenumber Node name GPFS state
------------------------------------------
1 Web02_a active
2 Nagios active
如果mmgetstate -a状态为down,请确保:防火墙关闭,两台服务器时间同步(注意时区也要一致),/etc/hosts中没有对应127.0.0.1字段。

gpfs错误日志路径:/var/adm/ras/test
#修改节点IP mmchnode --daemon-interface=10.0.0.236 -NWeb02_a
12.创建GPFS文件系统
[root@Web02_a tmp]# mmcrfs vol_data -F/tmp/nsdfile -B 256K -m 2 -r 2 -j cluster -T /vol_data -v no
The following disks of vol_data will beformatted on node Web02_a:
gpfs1nsd: size 104391 KB
gpfs2nsd: size 104422 KB
gpfs3nsd: size 104422 KB
gpfs4nsd: size 104391 KB
gpfs9nsd: size 104391 KB
gpfs10nsd: size 104422 KB
gpfs11nsd: size 104422 KB
gpfs12nsd: size 104391 KB
Formatting file system ...
Disks up to size 6.4 GB can be added tostorage pool 'system'. Creating Inode File
Creating Allocation Maps
Creating Log Files
Clearing Inode Allocation Map
Clearing Block Allocation Map
Formatting Allocation Map for storage pool'system'
Completed creation of file system/dev/vol_data.
mmcrfs: Propagating the clusterconfiguration data to all
affected nodes. This is anasynchronous process.
13.挂载文件系统:
[root@Web02_a ras]# mmmount /vol_data -a
Fri Jan 24 20:04:25 CST 2014: mmmount:Mounting file systems ...
[root@Web02_a ras]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext3 19G 11G 7.0G 60% /
/dev/sda1 ext3 190M 12M 169M 7% /boot
tmpfs tmpfs 123M 0 123M 0% /dev/shm
/dev/vol_data gpfs 814M 333M 481M 41% /vol_data
[root@Nagios ras]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext3 6.6G 3.5G 2.8G 56% /
/dev/sda1 ext3 190M 12M 169M 7% /boot
tmpfs tmpfs 249M 0 249M 0% /dev/shm
/dev/vol_data gpfs 814M 333M 481M 41% /vol_data
安装完成。

14.开机自启动
mmchconfig autoload=yes
或在/etc/rc.local中添加:/usr/lpp/mmfs/bin/mmstartup -a
15.可靠性测试
down掉Nagiogs服务器测试。

看数据是否读取正常
[root@Web02_a ras]# cd /vol_data/
[root@Web02_a vol_data]# cp /etc/hosts .
[root@Web02_a vol_data]# ll
total 0
-rw-r--r-- 1 root root 375 Jan 26 09:25hosts
[root@Web02_a vol_data]# cat hosts
# Do not remove the following line, orvarious programs
# that require network functionality willfail.
127.0.0.1 localhost.localdomain localhostbogon ::1 localhost6.localdomain6 localhost6
10.0.0.236 Web02_a
10.0.0.243 Nagios
[root@Web02_a vol_data]# ssh Nagios
Last login: Sun Jan 26 09:08:28 2014 fromweb02_a
[root@Nagios ~]# /etc/init.d/networkstop #down掉Nagios服务器网卡
Shutting down interface eth0:
[root@Web02_a vol_data]# mmgetstate -a #查看状态已经有一个节点down 掉
Nodenumber Node name GPFS state
------------------------------------------
1 Web02_a active
2 Nagios unknown
[root@Web02_a vol_data]# cat/vol_data/hosts #还能正常读取,保证集群的高可用。

# Do not remove the following line, orvarious programs
# that require network functionality willfail.
127.0.0.1 localhost.localdomain localhostbogon ::1 localhost6.localdomain6 localhost6
10.0.0.236 Web02_a
10.0.0.243 Nagios
GPFS通用并行文件系统之Python自动部署GPFS集群
GPFS文件系统能够横跨在所有主机上,分布在所有磁盘上,条带化读写,高性能。

信令管理机制,并发性好。

可配置fail组,可用性高。

下面是GPFS集群的自动安装部署python代码......
注:该脚本只能自动识别到系统盘之外的物理磁盘,不会识别到分区。

1、gpfs文件包目录结构
脚本中都按照这个目录结构进行安装
2、脚本执行方法
输入的是拥有存储磁盘的主机名。

按回车完成
[root@vuestor01 scripts]# python auto.py
Input node's info. Usage:hosta/192.168.0.101. Press Enter is complete. Please input Node info: stor01/192.168.2.67
check ip address success!
Input node's info. Usage:hosta/192.168.0.101. Press Enter is complete. Please input Node info: stor02/192.168.2.85
执行成功后,自动挂载到/vol_data目录下。

[root@vuestor01 scripts]# df -hT
Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 197G 1.6G 185G 1% /
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 ext4 504M 46M 433M 10% /boot
/dev/vol_data gpfs 1.2T 918M 1.2T 1% /vol_data
[root@stor02 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 197G 1.6G 185G 1% /
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 ext4 504M 46M 433M 10% /boot
/dev/vol_data gpfs 1.2T 918M 1.2T 1% /vol_data 3、gpfs自动安装python代码分析
#!/usr/bin/python
import datetime
import os,sys,time
import commands
def output_log(): #定义输出log函数
time=datetime.datetime.now()
with open('loginfo.txt','wb') as f:
f.write('%s \n'%time)
def check_ip(ipaddr): #校验IP有效性函数
import sys
addr=ipaddr.strip().split('.')
#print addr
if len(addr) != 4:
print "check ip address failed!"
sys.exit()
for i in range(4):
try:
addr[i]=int(addr[i])
except:
sys.exit()
if addr[i]<=255 and addr[i]>=0:
pass
else:
print "check ip address failed!"
sys.exit()
i+=1
else:
print "check ip address success!"
def install_rpm():#定义安装gpfs相关软件包函数
print "Install rpm packages..."
os.system("rpm
-ivh ../dependency/nss-softokn-freebl*.rpm >>/loginfo.txt;\
rpm -ivh ../dependency/rsh*.rpm >>/root/loginfo.txt;\
rpm -ivh ../dependency/glibc*.rpm >>/root/loginfo.txt;\
rpm -ivh ../dependency/libgcc*.rpm >>/root/loginfo.txt;\
rpm -ivh ../dependency/ksh*.rpm >>/root/loginfo.txt;\
rpm
-ivh ../dependency/compat-libstdc++*.rpm >>/root/loginfo.txt;")
os.system("rpm -ivh ../base/gpfs.base*.rpm >>/root/loginfo.txt") os.system("rpm -ivh ../base/*noarch.rpm >>/root/loginfo.txt")
os.system("rpm -Uvh ../update/*.rpm >>/root/loginfo.txt")
#判断内核版本,安装相应版本的源码编译包
a,b=commands.getstatusoutput("uname -r|grep 220")
c,d=commands.getstatusoutput("uname -r|grep 358")
if (a == 0):
commands.getstatusoutput("rpm
-ivh ../rpm/gpfs.gplbin-2.6.32-220.el6.x86_64-3.4.0-21.x86_64.rpm") elif (c==0):
commands.getstatusoutput("rpm
-ivh ../rpm/gpfs.gplbin-2.6.32-358.el6.x86_64-3.4.0-21.x86_64.rpm") else:
print "can't support this kernel!"
sys.exit()
#判断是否安装成功
num_status,num_result=commands.getstatusoutput("rpm -qa |grep gpfs|wc -l")
if (num_result<5):
print "RPM packages check failed!"
sys.exit()
print "Done."
#获取节点信息,该处需用户输入
node_dict={}
host_all=[]
def get_nodes():
while True:
node=raw_input("""Input node's info. Usage: hosta/192.168.0.101. Press Enter is complete.
Please input Node info: """)
if len(node)==0:
return 2
node_result=node.strip().split('/')
#print node_result
#获得信息后判断IP,主机名合法性
if len(node_result[0])==0:
print "Hostname is failed!"
sys.exit()
check_ip(node_result[1])
#node_dict[node_result[0]]=[node_result[1]] host_all.append(node_result[0])
#print node_dict
local_ip_status,local_ip_result=commands.getstatuso utput("""ifconfig |grep 'inet addr'|awk -F '[: ]+' '{print $4}' """) local_ip=local_ip_result.split('\n')
#print host_all
#指定第一个输入的IP必须为本地IP
if len(host_all)==1:
if node_result[1] in local_ip:
pass
else:
print "The first IP must be native IP."
sys.exit()
#获得磁盘信息
avail_disk={}
def get_disks():
import os,commands
print "Getting avail disks... ... list as fllow:"
#循环主机列表
for host in host_all:
#把对方的分区信息,系统盘信息输出文件并拷贝到本机
os.system("""ssh %s " cat
/proc/partitions >/tmp/part_%s;scp /tmp/part_%s %s:/root/"
"""%(host,host,host,host_all[0]))
os.system("""ssh %s " df -h >/tmp/osdisk_%s;scp /tmp/osdisk_%s %s:/root/" """%(host,host,host,host_all[0]))
disk_status,disk_result=commands.getstatusout put("cat /root/part_%s |awk '{print $4}'|grep -v name \
|grep -v [0-9]|grep -v ^$"%host)
disk_a=disk_result.split('\n')
#从所有磁盘列表中移除系统盘
os_status,os_result=commands.getstatusoutput( "cat /root/osdisk_%s |grep '/$'|awk '{print $1}' \
|awk -F '/' '{print $3}'|awk -F [0-9] '{print $1}'"%host)
#print '111',disk_a,'1111'
disk_a.remove(os_result)
avail_disk[host]=disk_a
#输出除系统盘外的所有空闲磁盘
print avail_disk.items()
for a,b in avail_disk.items():
print '''On the host %s's disk:'''%a
for i in b:
print '/dev/%s'%i
#配置nsd文件
def config_file():
print 'Configuring diskef....'
with open('/root/diskef','w') as f:
num=[]
#如果只有一台主机,则把这台主机的所有磁盘分成两个fail组,通过磁盘数取余来配置
if len(avail_disk.keys())==1:
for n,m in avail_disk.items():
for i in range(len(m)):
num.append(i)
if len(num)%2 ==1:
f.write(" /dev/%s:%s:::01:\n"%(m[i],n))
elif len(num)%2 ==0:
f.write(" /dev/%s:%s:::02:\n"%(m[i],n))
time.sleep(1)
#如果主机数大于等于2台,则按主机分组两个fail组,通过主机数取余来配置。

elif len(avail_disk.keys())>=2:
n_num=[]
for n in range(0,len(host_all)):
n_num.append(n)
for m in avail_disk[host_all[n]]:
if len(n_num)%2 ==1:
f.write(" /dev/%s:%s:::01:\n"%(m,host_all[n]))
elif len(n_num)%2==0:
f.write(" /dev/%s:%s:::02:\n"%(m,host_all[n]))
#for n,m in avail_disk.items():
# n_num.append(n)
# for i in range(len(m)):
# #num.append(i)
# if len(n_num)%2 ==1:
# f.write("/dev/%s:%s:::01:\n"%(m[i],n))
# elif len(n_num)%2==0:
# f.write("/dev/%s:%s:::02:\n"%(m[i],n))
# time.sleep(1)
print 'Done.'
#def sel_tiebreakerD():
#配置gpfs集群
def config_gpfs():
print 'Configuring gpfs:\n'
#avail_disk.keys():
print 'Check crcluster...'
#print host_all,'host_all'
#校验主机数,一台时无从服务器。

if len(host_all)==1:
print ''"mmcrcluster -N %s:quorum -p %s -r
/usr/bin/ssh -R /usr/b\
in/scp "%(host_all[0],host_all[0])
crcluster_status,crcluster_result=commands.ge tstatusoutput("mmcrcluster -N %s:quorum -p %s -r /usr/bin/ssh -R
/usr/bin/scp "%(host_all[0],host_all[0]))
#主机数有多台时指定一台从服务器。

elif len(host_all)>=2:
print "mmcrcluster -N %s:quorum,%s -p %s -s %s -r
/usr/bin/ssh -R /usr/bin/scp
"%(host_all[0],','.join(host_all[1:]),host_all[0],host_all[1])
crcluster_status,crcluster_result=commands.ge tstatusoutput("mmcrcluster -N %s:quorum,%s -p %s -s %s -r /usr/bin/ssh -R /usr/bin/scp
"%(host_all[0],','.join(host_all[1:]),host_all[0],host_all[1]))
#如果主机名为空,则退出
else:
print "Host list is empty. exit..."
sys.exit()
#if crcluster_status!=0:
# print 'Fail.'
# sys.exit()
#else:
# print 'Done.'
#校验集群配置
print 'Check cluster configuration...'
cluster_status,cluster_NAME=commands.getstatusoutput('''m mlscluster|grep 'GPFS cluster name'|awk '{print $4}' ''')
cluster_name=cluster_NAME.split('\n')
#如果集群里的主机数,和用户输入的不致,则退出
if cluster_name[len(cluster_name)-1].strip()==host_all[0]:
print 'Done.'
else:
print 'Check cluster fail...'
sys.exit()
#配置gpfs授权,配置所有输入的主机都有权进行配置与挂载。

if len(avail_disk.keys())==1:
os.system('mmchlicense server --accept
-N %s'%(host_all[0]))
elif len(avail_disk.keys())>=2:
os.system('mmchlicense server --accept
-N %s'%(','.join(host_all)))
print 'mmchlicense server --accept
-N %s'%(','.join(host_all))
#校验nsd的配置,如果配置文件中的磁盘数,与成功添加进集群的磁盘数不致,则退出
print 'Checking NSD configuration... ...'
os.system('mmcrnsd -F /root/diskef -v no ')
nsd_status,nsd_result=commands.getstatusoutput('mmlsnsd
|grep nsd|wc -l')
nsd_split=nsd_result.split('\n')
nsd_num=nsd_split[len(nsd_split)-1]
nsdfile_status,nsdfile_num=commands.getstatusoutput("cat
/root/diskef |grep -v 'gpfs'|wc -l")
#print '2',nsd_num,'22',nsdfile_num
if int(nsd_num)==int(nsdfile_num):
print 'Done.'
else:
print 'Checking NSD Failed.'
sys.exit()
#启动gpfs服务
print 'Starting gpfs service, needs about 20 seconds...'
os.system('mmstartup -a')
#import time
time.sleep(20)
#如果所有的主机不是active状态,则退出。

node,node_state=commands.getstatusoutput('mmgetstate
-a|grep active|wc -l')
if len(avail_disk.keys())==int(node_state):
print 'Done.'
else:
print 'fail... mmgetstate -a have
down/unknown...'
sys.exit()
#创建集群文件系统,如果创建失败则退出。

crfs_status,crfs_result=commands.getstatusoutput('mmcrfs vol_data -F /root/diskef -B 256k -r 2 -m 2 -j cluster -T /vol_data -v no ')
if crfs_status==0:
print 'Done.'
else:
print 'mmcrfs is failed.'
sys.exit()
#挂载文件系统,如果挂载失败,则退出。

os.system('mmmount vol_data -a')
print 'Checking mounting state......'
mount_status,mount_result=commands.getstatusoutput('df -h |grep vol_data')
if mount_status!=0:
print 'Fail.'
sys.exit()
else:
print 'Done.'
#设置环境变量,如果存在路径不执行,不存在则添加。

def set_profile():
for host in host_all:
print 'Check mmfs profile... ...'
path_status,path_result=commands.getstatusoutput("""
scp %s "echo $PATH|grep '/usr/lpp/mmfs/bin'" """)
if path_status==0:
print 'Done.'
else:
print "Auto set PATH profile..."
with open("/etc/profile",'ab') as f:
f.write("PATH=$PATH:/usr/lpp/mmfs/bin")
os.system("source /etc/profile")
#配置所有节点的gpfs软件包安装
def set_another_node():
uname_status,uname_result=commands.getstatusoutput('uname -r')
print 'Checking the another node state...'
if len(host_all)==1:
print "Don't have another host... Done."
return
#node_host=node_dict.keys()
#把当前服务器的gpfs的安装包拷贝到其它主机上,只要内核版本一致,就能自动安装其它节点
for i in range(0,len(host_all)):
os.system('scp -r ../* %s:/tmp'%host_all[i])
os.system('''ssh %s 'sleep 1; sh -c " rpm -ivh /tmp/dependency/nss-softokn-freebl*.rpm; \
rpm -ivh /tmp/dependency/rsh*.rpm; \
rpm -ivh
/tmp/dependency/glibc*.rpm; \
rpm -ivh
/tmp/dependency/libgcc*.rpm; \
rpm -ivh /tmp/dependency/ksh*.rpm; \
rpm -ivh
/tmp/dependency/compat-libstdc++*.rpm;" ' '''%host_all[i])
os.system('''ssh %s 'sh -c "sleep 1;rpm -ivh /tmp/base/gpfs.base*.rpm;rpm -ivh /tmp/base/*noarch.rpm;rpm -Uvh
/tmp/update/*.rpm" ' '''%host_all[i])
os.system('''ssh %s 'sh -c "sleep 1;rpm -ivh /tmp/rpm/gpfs.gplbin-%s-3.4.0-21.x86_64.rpm" >>/root/loginfo.txt'
'''%(host_all[i],uname_result))
# rpm_status,rpm_result=commands.getstatusoutp ut('ssh %s "rpm -qa|grep gpfs|wc -l"'%host_all[i])
# if rpm_result<5:
# print "The %s's rpm check failed!"%host_all[i]
# sys.exit()
# else:
# print 'rpm check complete.'
#
#
#
#
#执行上面的函数,并捕获异常,让错误更友好。

try:
#install_rpm()
get_nodes() #获得节点
get_disks() #获得空闲磁盘
set_profile() #设置环境变量
config_file() #磁盘文件配置
#print avail_disk
set_another_node() #安装所有节点的gpfs包
config_gpfs() #集群配置
except:
print '\n bye bye...' #如果中间有异常,则捕获退出
(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。

可复制、编制,期待你的好评与关注)。

相关文档
最新文档