ZT redhat cluster suite FAQ 的一些翻译(2) -- GFS

redhat cluster suite FAQ 的一些翻译(2) -- GFS

本文遵循 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆 License。

非商业性使用
许可人允许他人复制、发行、展览、表演、放映、广播或者通过信息网络向公众传播本作品。但是,除非取得许可人同意,被许可人不得将本作品用于商业目的。

相同方式共享
许可人只允许他人采用与自己的作品所使用的协议相同的许可协议,来发行演绎作品。

Kevinzou(kissingwolf@gmail.com)
分发此文时,请保留上述文字!

1.什么是gfs,我为什么需要它?

GFS是一种运行在集群节点上的集群文件系统。象其它的文件系统一样,它基本上是一个运行在顶部的vfs(虚拟文件系统)层的内核模块。它可以控制如何将数据储存在一个块设备或逻辑卷上。为了使一组计算机( "节点" )合作共享数据和更新,你需要GFS的协调能力和一组锁协议。目前推崇的一个集群锁协议是DLM (分布式锁管理器),DLM也是一个内核模块。它的职责是确保节点在集群中分享SAN数据的时候加锁 ,以使节点间干净互斥的访问和更新数据。

他文件系统例如 ext3,并不支持集群互锁方式,如果在集群中使在此类文件系统存放多机共享数据的时候,将很快出现脏数据甚至数据被破坏。


2.我在集群中配置GFS的时候需要那些硬件?

你需要某种形式的共享存储---光纤通道和iscsi是比较典型的方式。如果你没有光纤通道或者iscsi,可以使用gnbd代替。此外你还需要两个或两个以上的计算机并用网络设备将其连接起来。


3.我可以使用目前品牌电脑直接作GFS集群存储吗?

不能,GFS不是直接让个人电脑与共享存储,它还需要如SAN与光纤通道交换机等携同完成存储。现货供应电脑没有提供共享存储。


4.一个GFS文件系统支持的最大规模是多少?

GFS 6.1 (rhel 4上的 )在32位RHEL集群系统上支持16TB 。如果集群中所有节点是64位的RHEL ( x86-64 或ia64 ) ,最大理论为8EB(exabytes)。我们实地考察报告的4.5到50TB。仅测试到这些配置的原因是我们缺乏非常大的阵列系统:-)。


5.GFS或GFS2是否支持毫秒时间戳?

目前,GFS和GFS2不使用毫秒文件时间戳,他们还是用秒。这是为了维持兼容性,因为底层虚拟文件系统层的内核是使用秒时间戳的。如果内核有了变化以毫秒为时间戳,我们也会跟着改变。

人们通常并不关心毫秒,所以毫秒仅在使用例如nfs服务的时候比较重要。 例如,如果另一台电脑已经改变了磁盘上的数据,那么在最后那一刻此操作才为人所知。在gfs2 中我们正在策划实施的inode代号码,以掌握这些东西能更准确地比对时间戳。

6.为什么gfs_tool setflag inherit_directio 不影响new_files_directio ?
我作了如下操作:
[root@node-01#] gfs_tool setflag inherit_directio my_directory
[root@node-01#] gfs_tool gettune my_directory

回显:
new_files_directio = 0


是这样的: inherit_directio和new_files_directio是两回事。如果你看了gfs_tool的manpage,你会发现 inherit_directio运行在一个单独的目录,而new_files_directio则是一个文件系统范围的" settune "值。如你所做的:
gfs_tool setflag inherit_directio my_directory

你告诉文件系统说,只有你的目录和所有新的档案在该目录应该有这样的属性,这就是为什么只要你在这个目录中,你的测试正如人们预料的。它基本上是设置在目录内存inode上的一个属性。如若你做:
gfs_tool settune mount-point new_files_directio 1
new_files_directio值就会改变,并且作用于整个挂接点,而不只是该目录中。当然你可以看到gfs_tool gettune my_directory为全局标记。



7.我听说GFS "NFS故障切换" 可防止数据丢失。这是否属实?

不,这不是真的。它可以防止由于节点苏醒或切换导致的数据一致性问题,而由于用户错误地发送写消息给磁盘时而产生的数据丢失,它无法避免。

简单的事实是,在电脑突然关机时没有人能对数据丢失负责。如果突然关机的时候一个客户正在写,其存储的数据将丢失。如果突然关机的时候另一台服务器正在写,本地缓存的数据将丢失,除非该文件系统是使用了"同步(sync)"选项。不幸的是"同步(sync)"选项是以庞大的性能损耗为代价的。GFS的日志可以尽量减少和防范这方面的损失。

"NFS故障切换", 是指如果集群故障恢复域中的一个NFS服务器节点出现宕机情况(这是到目前为止最可能出现的情况),NFS服务将切换到另一台运行GFS的集群故障恢复域节点上。请求该操作的NFS客户会在请求超时后重发操作要求,改请求将被接管NFS故障恢复服务的那个节点的NFS服务所响应。GFS将保证其数据完整而非脏数据。


8.我已经对设备作了mkfs的操作,但当我挂接的时候系统总是抱怨我“没有权限”(permission denied)挂接它!
你可能在mkfs的时候使用了错误的集群名 。使用' dmesg '看看GFS到底在抱怨什么。如果这是前面提到的问题,你可以使用gfs_tool或另一mkfs操作来修复它。

即使这是不是你的问题(通常情况下是你的问题),如果你发现问题越来越多,使用dmesg来查看内核的抱怨也是一个很好的习惯。


9. 有没有简单的方法查看我集群中的那些节点挂接了GFS ?

首先要看你的GFS使用的是何种锁方式。

如果你使用DLM方式的 ,使用这个命令就可以从任意已挂接GFS的节点上得到回显:

#cman_tool services

如果你使用GULM方式 ,或者不是一个已挂接GFS的节点,这里的另一种方式这样做:

#for i in `grep "<clusternode name" /etc/cluster/cluster.conf | cut -d '"' -f2` ; do ssh $i "mount | grep gfs" ; done

当然有个前提: 你在每个节点上都相互作了ssh key !



10.gfs_tool df 后回显inodes 100% 被使用了是什么问题?

不像ext3 文件系统,GFS在他需要inode的时候会动态分配inode 。因此这不是一个问题,不用管它!