1 简介
GFS 文件系统是Linux操作系统上唯一针对企业应用的Native64位集群文件系统,支持x86、AMD64/EM64T和Itanium等处理器平台。它还是Linux系统上扩展能力最强的企业集群文件系统,支持多达300个结点。
由于多个集群节点同时访问/读写同一分区/数据,就必顺通过一个或多个管理服务器来保证数据的一致性,在GFS中,管理服务器叫DLM(distributed lock manager),通过DLM 可以与每个集群节点心跳通讯,以确保数据完整性,及节点健康性,一旦发现某个节点通讯有问题,它会把该节点从集群中隔离出来,直到该节点重新恢复,才能再加入集群节点中。考虑到DLM服务器的高可用性,GFS 可以通过设置多个DLM的备份,一旦主DLM发生故障,备份的DLM就可以接管作为主DLM来管理整个GFS。所以从节点到DLM,都可以实现HA的功能,就不存在单点故障的问题,可以确保GFS 最高程度的高可用性。GFS文件系统支持三种锁管理机制DLM、GULM、nolock。DLM是默认最优的锁管理器。
1)DLM 锁管理器
DLM(Distributed Lock Manager)是最优的锁管理器,它避免了GULM 锁管理方式中必须提供GULM 锁管理服务器的缺点,不再需要设定锁管理服务器,而是采用对等的锁管理方式,大大提供处理性能,DLM 避免了当单个节点失败需要整个恢复的性能瓶颈,DLM 的请求是本地的,不需要网络请求,立即生效,通锁分层机制,DLM 实现多个锁空间,并行锁模式。
2)GULM 锁管理器
GULM 是GFS6.1 以前的锁管理器,它必须要设置一个锁管理服务器,是一种client/Server 的锁管理方式,显示易见,所有的锁请求必须要与锁管理服务器通讯。而且当节点增大的一定数量的时候,可能会出现磁盘的交换,降低了整个GFS 系统的性能。
3)nolock锁管理器
nolock实际并不是一个集群管理锁机制,它只能用于单个节点的GFS 系统。一般用来测试和实验用。GFS 6.1与GFS 6.0对比GFS 6.1是一个成熟的、高可扩展的、高性能的集群文件系统,支持分布式锁管理,成熟的LVM2卷管理系统,而且与Red Hat Enterprise Linux紧密集成的系统。GFS 6.1与GFS 6.0相比尤其在性能上得到很大提升,包括快速的磁盘扫描、避免Kernel Panic,并且与Red Hat Cluster Suite 紧密结合,而且其DLM的锁管理技术已经被Linux Kernel社区接纳。
GFS可以在同一时间内多台服务器同时访问共享磁盘上的同一个磁盘分区,甚至同一个文件。GFS 不仅提供了HA 功能,还同时允许多台服务器同时访问同一个磁盘分区和文件。
2 配置方法
2.1 共享存储设备的配置
Iscsi‐target/Initiator是一个供硬件设备使用的可以在IP协议上层运行的SCSI 指令集。简单地说,iSCSI可以实现在IP 网络上运行SCS 协议,使其能够在诸如千兆以太网上进行路由选择。iscsi分为targe端和initiator端,target端一般是支持iscsi的磁盘阵列或者能提供iscsi服务的server;initiator就是客户端,使用iscsi的。简单的说:target是server端,initiator是client端。
iSCSI target/Initiator设置
1) 配置iscsitarget(存储服务器,其ip为xxx.xxx.xxx.xxx)
vim /etc/ietd.conf
修改内容如下:
Lun 0 Path=/dev/sdx,Type=fileio
Alias Test
说明:参数path 是作为存储设备的文件名称。以上两项在配置文件中被注释,去掉该两项前面的#即可。
2) 启动iscsitarget服务
/etc/init.d/iscsi‐target start
3) 查看信息
tailf /var/log/messages
显示如下:
Jan 16 15:06:24 localhost kernel: iSCSI Enterprise Target Software ‐version 0.4.17
Jan 16 15:06:24 localhost kernel: iscsi_trgt: Registered io type fileio
Jan 16 15:06:24 localhost kernel: iscsi_trgt: Registered io type blockio
Jan 16 15:06:24 localhost kernel: iscsi_trgt: Registered io type nullio
Jan 16 15:06:24 localhostiscsi‐target: ietd启动succeeded
4)在客户端(分布式文件系统的节点)中首先启动iscsi
serviceiscsi start
然后使用iscsiadm管理连接target 服务器,命令如下:
iscsiadm‐m discovery –type sendtargets –portal xxx.xxx.xxx.xxx
其中的ip为target 服务器的地址,结果会显示/etc/ietd.conf中的target信息,例如,Target
iqn.2001‐04.com.example:storage.disk2.sys1.xyz
最后重启iscsi,会显示连接成功(successful)的信息。此时各个客户端可以共享使用服务器中配置的/dev/sdx。
2.2配置集群
1)创建配置文件/etc/cluster/cluster.conf
节点1:192.168.0.47 testnfs
节点2:192.168.0.46 cstc
可以直接在相关目录下创建并编辑该配置文件,内容如下:
<?xml version="1.0"?>
<cluster alias="gfs_cluster" config_version="22" name="gfs_cluster">
<fence_daemonpost_fail_delay="0" post_join_delay="3"/>
<clusternodes>
<clusternode name="testnfs" nodeid="1" votes="1">
<fence>
<method name="1">
<device name="ggg" nodename="testnfs"/>
</method>
</fence>
</clusternode>
<clusternode name="cstc" nodeid="2" votes="1">
<fence>
<method name="1">
<device name="ggg" nodename="cstc"/>
</method>
</fence>
</clusternode>
</clusternodes>
<cmanexpected_votes="1" two_node="1"/>
<fencedevices>
<fencedevice agent="fence_manual" name="ggg"/>
</fencedevices>
<rm>
<failoverdomains>
<failoverdomain name="fd" ordered="1" restricted="0">
<failoverdomainnode name="testnfs" priority="2"/>
<failoverdomainnode name="cstc" priority="1"/>
</failoverdomain>
</failoverdomains>
</rm>
</cluster>
2) 启动服务/etc/init.d/cman start
会显示内容如下:
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing... done [确定]
3)使用lsmod |grep gfs2
会显示加载的gfs2内核模块
4)图形化的配置过程为
在终端中输入system‐config‐cluster
5)创建gfs2 共享磁盘(在其中任意一个节点中进行即可,其他节点无须进行这一步)
mkfs‐t gfs2‐p lock_dlm‐j 2 ‐t gfs_cluster:ggg /dev/sdbx
这里参数‐p 即lockprotoname用于设置使用的锁机制。用于共享存储时使用lock_dlm,如果使用gfs2 文件系统作为本地文件系统,则可以指定lock_nolock。
参数‐j 指定节点个数
参数‐t 集群名称:fence 设备名
6) 挂载磁盘
在各个节点挂载共享磁盘
mount /dev/sdxx /mnt
输入mount 查看挂载的磁盘的格式为gfs2。
7)失效测试
节点1 和节点2 挂载共享的文件系统后,节点1 写入文件,在节点2 中能够正确读取。当节点2 失效时(断网或断电),节点1 将不允许访问磁盘。当节点2 恢复正常时(网络连接正常或重新启动),磁盘恢复正常访问,且磁盘内的数据未丢失。