前几天接到一个工作,应要求写了个文档,共享出来。

一、GFS概念

       Global 文件系统(Global File System, GFS)全局文件系统或是叫集群文件系统。允许多个Linux机器通过网络共享存储设备。每一台机器都可以将网络共享磁盘看作是本地磁盘,而且GFS自己也以本地文件系统的形式出现。如果 某台机器对某个文件执行了些操作,则后来访问此文件的机器就会读到写以后的结果。为底层的共享块设备在文件系统级别提供并发的读写功能。与传统的NAS结构不同,GFS的文件系统层运行于高带宽的FC协议网络(NAS的文件系统层依托传统的IP网络实现),因此更能发挥SAN存储架构的性能优势。    GFS 6.0 集群代码运行于kernel 2.4.xx (RHEL 3 ) 。GFS 6.1代码运行于kernel 2.6.xx 系列 ( RHEL 4) 或其他同级内核的发行版。核心不同实现的方式不同。2.4及2.6.9核心需要核心的配合,2.6.18的核心相对的配置较为简单。下文以Red Hat EL5 为例说明安装是和使用方法。且在Red Hat EL5上还有GFS2(gfs的升级版)

 二、实验环境和前提描述

操作系统

Red Hat Enterprise Linux Server release 5.4 32bit  

kernel: 2.6.18-164.el5xen

软件版本 :所用软件rhel erver5.4-i386-dvd.iso中

Server目录中的:

cman-2.0.115-1.el5.i386.rpm

gfs2-utils-0.1.62-1.el5.i386.rpm

openais-0.80.6-8.el5.i386.rpm

perl-Net-Telnet-3.03-5.noarch.rpm

perl-XML-LibXML-1.58-5.i386.rpm

perl-XML-LibXML-Common-0.13-8.2.2.i386.rpm

perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm

perl-XML-SAX-0.14-5.noarch.rpm

pexpect-2.3-1.el5.noarch.rpm

Cluster目录中的:

rgmanager-2.0.52-1.el5.centos.i386.rpm

system-config-cluster-1.0.57-1.5.noarch.rpm

piranha-0.8.4-13.el5.i386.rpm

ipvsadm-1.24-10.i386.rpm

ClusterStorage目录中的:

gfs-utils-0.1.20-1.el5.i386.rpm

kmod-gfs-0.1.34-2.el5.i686.rpm

kmod-gfs-PAE-0.1.34-2.el5.i686.rpm

kmod-gfs-xen-0.1.34-2.el5.i686.rpm

注:kmod-gfs包的拷贝需要根据uname -a命令的结果拷贝对应的版本;比如我的实验系统执行uname –a的命令的结果如下: [root@gfs1 ~]# uname -aLinux gfs1 2.6.18-164.el5xen #1 SMP Tue Aug 18 16:06:30 EDT 2009 i686 i686 i386 GNU/Linux 所以需要拷贝的kmod-gfs包是:kmod-gfs-xen-0.1.34-3.el5.i686.rpm  

三、检查系统的及安装相关软件包

一)、检查软件包

执行如下命令检查系统是否已经安装了相关的软件包(操作系统版本不同包的版本也不相同)

[root@gfs1 ~]# rpm -qa |grep cman           

cman-2.0.115-1.el5

[root@gfs1 ~]# rpm -qa |grep gfs

gfs-utils-0.1.20-1.el5

gfs2-utils-0.1.62-1.el5

kmod-gfs-xen-0.1.34-2.el5

[root@gfs1 ~]# rpm -qa |grep openais      

openais-0.80.6-8.el5

[root@gfs1 ~]# rpm -qa |grep perl-Net

perl-Net-Telnet-3.03-5

[root@gfs1 ~]# rpm -qa |grep perl-XML

perl-XML-NamespaceSupport-1.09-1.2.1

perl-XML-LibXML-Common-0.13-8.2.2

perl-XML-LibXML-1.58-5

perl-XML-SAX-0.14-5

[root@gfs1 ~]# rpm -qa |grep pexpect

pexpect-2.3-1.el5

[root@gfs1 ~]# rpm -qa |grep piranha

piranha-0.8.4-13.el5

[root@gfs1 ~]# rpm -qa |grep ipvsadm

ipvsadm-1.24-10

[root@gfs1 ~]# rpm -qa |grep rgmanager

rgmanager-2.0.52-1.el5

[root@gfs1 ~]# rpm -qa |grep system-config-cluster

system-config-cluster-1.0.57-1.5

检查有没有相关的包的信息,如果没有请按照下面的方法安装对应得包

二)、安装软件包

请将上文描述的相关的软件包拷贝到系统某一目录中以/home/gfs为例,

#mkdir /home/gfs  (创建目录)

上传相关软件至目录下

#cd /home/gfs

因为个软件包有依赖关系请执行如下命令按序列安装,

rpm -ivh perl-Net-Telnet-3.03-5.noarch.rpm

rpm -ivh perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm

rpm -ivh perl-XML-SAX-0.14-5.noarch.rpm

rpm -ivh perl-XML-LibXML-Common-0.13-8.2.2.i386.rpm

rpm -ivh perl-XML-LibXML-1.58-5.i386.rpm

rpm -ivh pexpect-2.3-1.el5.noarch.rpm

rpm -ivh openais-0.80.6-8.el5.i386.rpm

rpm -ivh ipvsadm-1.24-10.i386.rpm

rpm -ivh piranha-0.8.4-13.el5.i386.rpm

rpm -ivh gfs2-utils-0.1.62-1.el5.i386.rpm

rpm -ivh gfs-utils-0.1.20-1.el5.i386.rpm

rpm -ivh kmod-gfs-xen-0.1.34-2.el5.i686.rpm

rpm -ivh cman-2.0.115-1.el5.i386.rpm

rpm -ivh rgmanager-2.0.52-1.el5.centos.i386.rpm

rpm -ivh system-config-cluster-1.0.57-1.0.noarch.rpm

四、创建GFS系统

格式化文件系统

格式化的命令如下:

gfs_mkfs -p lock_nolock -j NumberJournals BlockDevice

或者

mkfs -t gfs -p lock_nolock -j NumberJournals BlockDevice

参数解释:

-p lock_nolock       定义为nolock锁方式

-j NumberJournals     NumberJournals 为一个数字表示,GFS分区中最多支持多少个节点同时挂载,这个可以在使用中动态调整

BlockDevice  为要格式化的分区

 以要格式化的分区/dev/vg0/lvtest1 为例,请执行如下操作:

[root@gfs1 ~]# mkfs.gfs -p lock_nolock -j 3 /dev/vg0/lvtest1

This will destroy any data on /dev/vg0/lvtest1.

  It appears to contain a gfs filesystem.

Are you sure you want to proceed? [y/n] y

Device:                    /dev/vg0/lvtest1

Blocksize:                 4096

Filesystem Size:           29652

Journals:                  3

Resource Groups:           8

Locking Protocol:          lock_nolock

Lock Table:               

Syncing...

All Done    此处回到#提示符下标示格式化完毕。

五、挂载文件系统

1、 首先在系统中创建一个挂载目录

[root@gfs1 /]#mkdir /pan

2、 然后执行[root@gfs1 ~]# lsmod |grep gfs 命令检查对应的gfs模块是否加载,如果执行上面命令能看到下面类似的结果

gfs                   268644  4   表示对应的模块已经加载,如果没有执行#modprobe gfs 加载模块,一般在安装rpm包的时候会自动加载。
3、 最后执行下面的命令挂载分区
[root@gfs1 /]# mount -t gfs /dev/vg0/lvtest1 /pan/

4、 检查挂载状态执行mount命令能看到类似如下的信息:

[root@gfs1 ClusterStorage]# mount

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)

/dev/mapper/vg0-lvtest1 on /pan type gfs (rw,hostdata=jid=0:id=262145:first=1) 此处说明挂载成功。

5、 检查文件系统状态,进入挂载目录,创建一个文件,使用正常说明文件系统挂载。

[root@gfs1 ClusterStorage]# cd /pan/

[root@gfs1 pan]# ls

[root@gfs1 pan]# touch test   创建一个文件

[root@gfs1 pan]# ls

test

   查看创建文件成功,说明文件系统的读写没有问题。

6、自动挂载

vi /etc/fstab 加入

/dev/mapper/vg0-lvtest1   /pan     gfs     defaults     0 0

对应的信息分别是:

挂载的设备   挂载点 文件系统类型    挂载参数 (0 0 标示开机的挂载时不会自动检测文件系统)