1 GFS简介
GFS是RedHat公司Global File System的简称,GFS是一个文件系统,为底层的共享块设备在文件系统级别提供并发的读写功能。与传统的NAS结构不同,GFS的文件系统层运行于高带宽的FC协议网络(NAS的文件系统层依托传统的IP网络实现),因此更能发挥SAN存储架构的性能优势。GFS提供三种存储解决方案架构:
1.1 高性能和高可测性
图一
如图一,多台GFS节点直接通过FC交换机连接到SAN存储体,应用程序直接跑在GFS节点上,避免了传统NAS架构中文件服务器节点的各种瓶颈和IP网络延迟。这种架构可支持300个GFS节点。
1.2 兼顾性能、可测性、价格
图二
如图二,这种方式跨越IP跟FC两种协议,SAN存储通过GNBD(Global Network Block Device)被export到传统的IP网络,这似乎和NAS的架构有点类似,但实际上有巨大的区别,首先NAS的文件服务器只有一个(当然也可以实现互为HA的架构),而GFS种的GNBD可以有多个,且是负载均衡(负载均衡本身包含了HA)的架构;其次NAS在IP网络上运行的是文件系统级别的操作,我们知道,文件系统级别的操作对系统资源的消耗是巨大的,而GFS在IP网络上跑的是比文件系统更底层的类似ISCSI的协议,即数据块被封装在IP包中进行传输,因此在效率上会比NAS高。每一个GNBD在内存中都有一个线程池,线程用于处理到SAN存储中一个数据块的路径映射,因此,每一个SAN存储体都能通过任意一个GNBD来访问,实现了负载均衡和HA。
1.3 更经济,兼顾性能
图三
如图三,这种架构和图二中的架构最大的区别是没有SAN存储体,存储方式是直连存储(DAS),这种方式可以在传统环境中轻松实现,但是需要考虑对GNBD和它的DAS的冗余。
2 物理架构
实现的架构跟图一类似,但有所简化,如下图四所示:
图四
在我们安装环境中,disk array是一个容量达7T的raid6磁盘阵列,两台gfs node:gfs-1和gfs-2通过私有网络192.168.1.0/24进行gfs集群间的通讯,避开了使用服务网络来进行集群通讯。
3 软件包安装
gfs软件包的安装可谓一波三折。gfs需要redhat cluster suite软件来协调gfs node对共享存储的I/O操作,因此需要rhcs套件,套件如下:
cman-2.0.60-1.el5.x86_64.rpm
cman-devel-2.0.60-1.el5.i386.rpm
cman-devel-2.0.60-1.el5.x86_64.rpm
ipvsadm-1.24-8.1.x86_64.rpm
perl-Net-Telnet-3.03-5.noarch.rpm
piranha-0.8.4-7.el5.x86_64.rpm
rgmanager-2.0.23-1.x86_64.rpm
system-config-cluster-1.0.39-1.0.noarch.rpm
gfs套件如下:
gfs2-utils-0.1.25-1.el5.x86_64.rpm
gfs-utils-0.1.11-1.el5.x86_64.rpm
kmod-gfs-0.1.16-5.2.6.18_8.el5.x86_64.rpm
kmod-gfs-xen-0.1.16-5.2.6.18_8.el5.x86_64.rpm
lvm2-cluster-2.02.16-3.el5.x86_64.rpm
另外,cman进程需要openais支持,因此安装套件还包括:
openais-0.80.2-1.el5.x86_64.rpm
openais-devel-0.80.2-1.el5.x86_64.rpm
把所有rpm包放到一个目录,使用rpm -Uvh --nodeps *全部安装。
4 配置
/etc/hosts中包括gfs node的主机名和ip对应关系:
192.168.1.1 gfs-1
192.168.1.2 gfs-2
修改/etc/lvm/lvm.conf中的locking_type值为3:
locking_type = 3
这里与rhel 4u2有不同,lvm.conf里有解释:
# Type of locking to use. Defaults to local file-based locking (1).
# Turn locking off by setting to 0 (dangerous: risks metadata corruption
# if LVM2 commands get run concurrently).
# Type 2 uses the external shared library locking_library.
# Type 3 uses built-in clustered locking.
rhel 5的clvm包没有包含locking_library,只有使用type 3了。
关于cluster的配置,可以使用图形界面的system-config-cluster进行,相关的操作可以参考rh官方文档,下面是配置好的/etc/cluster/cluster.conf文件:
<?xml version="1.0" ?>
<cluster alias="gfs_cluster" config_version="2" name="gfs_cluster">
<fence_daemon post_fail_delay="0" post_join_delay="3"/>
<clusternodes>
<clusternode name="gfs-1" nodeid="1" votes="1">
<fence>
<method name="1">
<device name="f-man" nodename="gfs-1"/>
</method>
</fence>
</clusternode>
<clusternode name="gfs-2" nodeid="2" votes="1">
<fence>
<method name="1">
<device name="f-man" nodename="gfs-2"/>
</method>
</fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices>
<fencedevice agent="fence_manual" name="f-man"/>
</fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
5 启动进程
按照如下步骤分别在两台node启动进程:
service cman start
service clvmd start
service gfs start
service rgmanager start
启动完之后就可以进行磁盘的操作了:
pvcreate /dev/sdb
vgcreate volGFS01 /dev/sdb
lvcreate -l 1668929 volGFS01 -n data01
创建文件系统和挂载:
gfs_mkfs -p lock_dlm -t gfs_cluster:gfs01 -j 10 /dev/volGFS01/data01
mkdir /gfs
mount -t gfs /dev/volGFS01/data01 /gfs