免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3070 | 回复: 1
打印 上一主题 下一主题

OCFS2的问题汇总 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:44 |只看该作者 |倒序浏览
通用的

1、如何使用OCFS2

a)下载安装OCFS2模块和rpm包

b)创建cluster.conf并复制到其他节点

c)配置并启动o2cb服务

d)format卷

e)mount卷




2、如何知道当前运行的OCFS2的版本

# cat /proc/fs/ocfs2/version
OCFS2 1.2.8 Tue Feb 12 20:22:48 EST 2008 (build 9c7ae8bb50ef6d8791df2912775adcc5)

3、如何配置我的系统在遇到kernel-panic的时候自动重启

配置系统遇到kernel panic后60秒重启

# echo 60 > /proc/sys/kernel/panic

保证以上的配置在系统启动后能继续应用,在/etc/sysctl.conf文件内加入:kernel.panic = 60

下载和安装部分

4、从哪里下载OCFS2包

如果是Oracle Enterprise Linux 4 and 5可以使用up2date下载:

# up2date --install ocfs2-tools ocfs2console 
# up2date --install ocfs2-`uname -r` 

如果是SLE9可以使用yast升级内核到最后的SP3以安装相关的模块,同样也安装了ocfs2-tools 和 ocfs2console 包。

如果是SLE10,安装ocfs2-tools and ocfs2console包。

如果是Red Hat's RHEL4 and RHEL5下载并安装适当的模块和2个工具包ocfs2-tools and ocfs2console,

5、最后的OCFS2包的 版本是什么?

1.2.9-1 =》Enterprise Linux 4 and 5

tools/console package version is 1.2.7-1 =》Enterprise Linux 4 and 5.6. 

6、我如何去理解ocfs2-2.6.9-22.0.1.ELsmp-1.2.1-1.i686.rpm这个包的名称?

这个包名包含许多部分通过‘-’分割

* ocfs2 - 包名

* 2.6.9-22.0.1.ELsmp - 内核版本
* 1.2.1 - 包的版本
* 1 - 包的子版本
* i686 - 结构 
7、如何知道在我的环境中应该安装什么版本?

# uname -r
2.6.9-22.0.1.ELsmp

# rpm -qf /boot/vmlinuz-`uname -r` --queryformat "%{ARCH}n"
i686

8、如何安装rpms包

首先安装tools和console包:

# rpm -Uvh ocfs2-tools-1.2.1-1.i386.rpm ocfs2console-1.2.1-1.i386.rpm

然后安装合适的模块包:

# rpm -Uvh ocfs2-2.6.9-22.0.1.ELsmp-1.2.1-1.i686.rpm
9、是否必须安装console包?

不是的,可以不安装,但是建议安装,为了管理方便。

10、ocfs2console包和其他的模块有什么依赖?

ocfs2console需要e2fsprogs,glib2 2.2.3或者更新的,vte 0.11.10 或者更新,pygtk2(RHEL4)或者python-gtk(SLE9)1.99.16或者更新的,python 2.3 或者更新的以及ocfs2-tools

11、OCFS2 1.2安装完后安装了那些模块?

* configfs.ko
* ocfs2.ko
* ocfs2_dlm.ko
* ocfs2_dlmfs.ko
* ocfs2_nodemanager.ko
* debugfs 
在Enterprise Linux 5还包含了configfs.ko 和 debugfs.ko

12、ocfs2-tools安装了那些工具?

* mkfs.ocfs2
* fsck.ocfs2
* tunefs.ocfs2
* debugfs.ocfs2
* mount.ocfs2
* mounted.ocfs2
* ocfs2cdsl
* ocfs2_hb_ctl
* o2cb_ctl
* o2cb - init service to start/stop the cluster
* ocfs2 - init service to mount/umount ocfs2 volumes
* ocfs2console - installed with the console package 

13、debugfs和debugfs.ocfs2之间有什么关系吗?

"debugfs是内存中的文件系统由Greg Kroah - Hartman的发展。这对于调试非常有用,因为它允许内核空间轻松导出数据到用户空间。这是目前正在使用的OCFS2的转储文件系统锁定列表,可用于在未来更多的使用。这是捆绑在一起的OCFS2作为各种发行目前没有捆绑它。虽然debugfs和debugfs.ocfs2表现一般无关,后者是作为前由前年底提供的调试信息。例如,请参阅故障排除部分。"

配置部分

14、如何创建/etc/ocfs2/cluster.conf?

如果你安装了console,可以使用它去创建,如果你没有安装,可以通过查看用户手册通过看一个例子来理解里面的结构组成,不要忘掉了在各个节点上同步cluster.conf文件。

15、可以使用public或者private IP来进行连接么?

"使用私有互连建议。虽然OCFS2的并不需要很多的带宽,它需要的节点在网络上活着,定期发送keepalive报文,以确保他们的会话。为了避免网络延迟被视为一个节点在网络上消失可能导致一个节点死掉,private互连建议。人们可以使用相同的Oracle RAC互连和OCFS2。"

16、节点的名称必须要和IP地址匹配么?

"节点名称必须匹配的主机名。 IP地址不必与该主机名关联的。正如在任何有效的IP地址在该节点上都可以使用。 OCFS2的不会尝试匹配的节点名称与指定的IP地址(主机名)。"

17、我如何修改cluster.conf里面已经存在的例如IP、端口以及其他的信息?

虽然可以使用ocfs2console 动态的添加一个可用的节点到集群环境中,但是其他的操作都要降cluster离线,停止所有的cluster在所有的节点上,编辑 /etc/ocfs2/cluster.conf 在某个节点上,然后拷贝最新的cluster.conf文件到每个节点上,保证所有的节点上使用的同一份cluster.conf的拷贝。

18、如果在线的增加一个新的节点?

你可以通过colsole来增加,但是你要保证在所有的节点上都应该同步,但是 如果操作失败了就会有很多BUG之类的问题( bug#741),在这种情况下,你可以使用o2cb_ctl 工具在每个节点上执行:

# o2cb_ctl -C -i -n NODENAME -t node -a number=NODENUM -a ip_address=IPADDR -a ip_port=IPPORT -a cluster=CLUSTERNAME

19、如果在一个离线的cluster环境中增加新的节点?

你可以使用console或者o2cb_ctl或者直接手动的修改cluster.conf文件,然后通过console或者直接拷贝cluster.conf文件到所有的节点,如果是使用o2cb_ctl可以按照下面的操作来执行:

# o2cb_ctl -C -n NODENAME -t node -a number=NODENUM -a ip_address=IPADDR -a ip_port=IPPORT -a cluster=CLUSTERNAME 
参数“-i”在一个离线的cluster环境中是不需要的。

O2CB 集群服务部分

20、我如何配置cluster服务?

# /etc/init.d/o2cb configure

输入'Y'如果你希望在cluster.conf中的集群自动启动知道超时。

21、我如何启动集群服务?

*首先加载模块:

# /etc/init.d/o2cb load
*使模块online:

# /etc/init.d/o2cb online [cluster_name]

*如果你想使服务在系统启动的时候启动可以执行:

# /etc/init.d/o2cb start [cluster_name]

这集群名称是不需要的,如果你在配置的时候指定了。

22、如何停止集群服务?

*停止集群

# /etc/init.d/o2cb offline [cluster_name]

*unload模块:

# /etc/init.d/o2cb unload
*如果你想使服务在系统启动的时候启动可以执行:

# /etc/init.d/o2cb stop [cluster_name]
这集群名称是不需要的,如果你在配置的时候指定了。

23、如何了解集群服务的状态?

# /etc/init.d/o2cb status

24、如果我不能启动集群服务,是什么原因导致的?

首先查看cluster.conf文件是否和hostname一致的,并且每一个在cluster.conf中的节点都应该是在线的。

FORMAT部分


25、我必须要对硬盘进行分区么?

是的,分区是一个建议,即使是计划使用OCFS2的整个磁盘。

26、我如何格式化卷?

你可以通过console或者mkfs.ocfs2来进行格式化,如果使用console你可以通过查看用户手册。

mkfs.ocfs2 -L "oracle_home" /dev/sdX 
或者

# mkfs.ocfs2 -b 4k -C 32K -L "oracle_home" -N 4 /dev/sdX 

以上格式化的卷为节点4的,block大小为4K,cluster size是32K

27、在格式化的时候节点的槽号是什么?

槽号指的是同时可以连接卷的最大并发数,这个数值可以在格式化的时候指定也可以后期通过tunefs.ocfs2修改。

28、如果确定node slots的大小?

OCFS2使用的是文件系统,因为这个值可以动态设置的,所以开始的时候也不必设置很大,满足则可。

29、每个节点上的NODE SLOTS都要一样么?

不用的,可以不一样

30、多大的block size是比较合适的?

这block size是指定空间 扩张的最小单位,OCFS2支持512bytes、1K、2K和4K,这block size后期是不可以改变 的,在大部分的环境中4K是推荐使用的,还有其他的一些环境也可以使用512BYTES。

31、多大的cluster size比较合适?

cluster size是用来指定在文件中每次扩张的最小的空间值,OCFS2支持4K8K16K32K64K128K256K512K和1M,如果是数据库卷,cluster size 推荐128K或者更大,如果是ORACLE HOME文件,推荐32K到64K。

32、通过对卷进行标签化有什么优势?

在一个硬盘共享的环境中,硬盘的名称(/dev/sdX)在每个节点上挂载后的信息是不一样的,进行标签化是为了容易标示,你可以在mount的时候来指定标签:

# mount -L "label" /dir 
可以通过tunefs.ocfs2工具来修改卷的标签。

RESIZE 部分

33、OCFS2的文件大小可以增长么?

可以的,你可以使用tunefs.ocfs2来操作,但是这个工具只是来增加文件的大小,不能增加分区的大小,如果想要增加分区的大小可以使用fdisk或者其他的工具来操作。

34、当我用fdisk去重置分区大小的时候需要注意什么?

通过fdisk(8)来增加分区大小的时候,你要先删除现有分区然后在重建,当你重建的时候,你要保证先前起始的柱面一致,并且结束的柱面大于先前的柱面,另外,在你resize失败后会丢失数据,所以在操作前需要对数据进行备份

35、突然的重启,我如果去得到集群环境中其他节点的分区?

可以使用blockdev(8)在集群环境中的某个节点上重启扫描分区的表区,

# blockdev --rereadpt /dev/sdX 

36、tunefs.ocfs2在resize文件的时候语法是什么?

# tunefs.ocfs2 -S /dev/sdX

更多的可以查看帮助。

37、当OCFS2在运行的时候是否可以增加大小?

不能,tunefs.ocfs2 1.2.2 只能在OCFS2离线情况下操作,并且文件系统没有挂载在任何节点上,在线的resize操作会在后续版本中增加

38、OCFS2可以 收缩空间大小吗?

不能,现在也没打算将这个功能进行增加,如果你确实觉得需要的话可以理出足够的理由以BUG的形式提交给我们


MOUNT部分

39、我如何mount一个卷?

你可以使用console或者使用mount文件的形式,如果使用console可以查看相关的用户手册。

# mount -t ocfs2 /dev/sdX /dir 
以上的命令会将/dev/sdX挂载在dir目录下。

40、我如何通过label来挂载?

# mount -L "label" /dir 

41、当我将挂载添加到/etc/fstab中的时候,对于ocfs2类型的卷我需要增加额外的什么参数?

/dev/sdX /dir ocfs2 _netdev 0 0 

_netdev 参数代表了当网络启动以后才进行挂载。

42、当系统启动的时候我就将ocfs2卷挂载需要怎么做?

*将o2cb服务加到启动进程里

# chkconfig --add o2cb 

*将ocfs2加入启动进程

# chkconfig --add ocfs2 

*配置o2cb满足系统启动时加载

# /etc/init.d/o2cb configure 

*在/etc/fstab加入新的列表

/dev/sdX /dir ocfs2 _netdev 0 0 

43、我如何确定我的卷是否已经挂载?

*输入不加任何参数的mount命令:

# mount 

*列出/etc/mtab的内容

# cat /etc/mtab 

*列出 /proc/mounts内容

# cat /proc/mounts 

*执行ocfs2服务

# /etc/init.d/ocfs2 status 

mount命令会读取、/etc/mtab的内容加以显示

44、/config 和/dml挂载的作用是什么?

OCFS2其实是捆绑了两个内存文件系统configfs和ocfs2_dlmfs,configfs是用OCFS2中的管理节点以及集群的名单,以及心跳信息;ocfs2_dlmfs用户OCFS2的工具,和DLM模块进行通话,取得并释放资源集群的锁。

45、为什么会花费很多的时间来挂载卷?

大概需要5秒钟的时间,以后准备增加一个全局的心跳。。

46、为什么在unmount的时候会花费很多时间?

当unmount的时候,这dlm要移动所有的抓有的锁到集群环境中的其他的节点,在1.2版本中,这锁移动式同步的,在后期的版本中是异步的,可以在所有的dlm环境 中找到锁的数量:

# cat /proc/fs/ocfs2_dlm/*/stat 
local=60624, remote=1, unknown=0, key=0x8619a8da 

ORACLE RAC部分

47、在RAC环境中是否有一些专有的标志?

OCFS2卷包含 票决磁盘文件(Voting disk CRS)和Cluster registry(OCR)、DATAFILE 、redo log、 archive log以及控制文件必须通过datavolume和nointr选项挂载,这datavolume选项,用来保证oracle进行可以在打开文件的时候通过o_direct标记,nointr选项保证IO信号不被中断。


# mount -o datavolume,nointr -t ocfs2 /dev/sda1 /u01/db 

48、挂载用于存放ORACLE HOME的磁盘需要注意什么吗?

当挂载一块用于安装oracle home的磁盘时候只需要正常的挂载即可,不需要datavolumn和nointr选项

# mount -t ocfs2 /dev/sdb1 /software/orahome 

但是OCFS2当前不支持共享复写mmap,这健康检查(GIMH)文件$ORACLE_HOME/dbs/hc_ORACLESID.dat 以及ASM文件 $ASM_HOME/dbs/ab_ORACLESID.dat 要放到本地的文件系统内,这个问题将在OCFS2 1.4中得到改善以得到支持。

49、以上之意是否说明我的数据文件和oracle的安装文件不能放在同一个卷内?

是的。

移植OCFS数据文件到OCFS2

52、我能以OCFS2的形式mount OCFS卷吗?

不能,OCFS和OCFS2在磁盘上是不兼容的,因为我们需要在今后的版本中增加新的特性。


53、OCFS2和OCFS能同时挂载到同一台机器上吗?

不能,OCFS只能工作在内核是2.4(Red Hat's AS2.1/EL3 and SuSE's SLES8).OCFS2工作的内核版本为2.6(RHEL4, SLES9 and SLES10). 
54、我可以在内核版本为2.6的机器上访问OCFS卷吗?

可以的,你可以通过FSCat 、fsls 或者fscp工具来访问OCFS卷,这些工具可以,以上工具可以在设备级浏览、复制文件到其他的文件系统,FSCat工具可以在oss.oracle.com上得到。

55、我可以改变我的OCFS卷成为OCFS2吗?

不能。

56、有什么快速的方法将OCFS的数据转移到OCFS2上?

最快的方式无非就是完成最少的拷贝,如果你有一个非OCFS的卷上有当前的备份的话你可以直接进行恢复性的转移,如果你没有一个可用的备份,当时你的OCFS2系统上可以访问OCFS的卷,你可以使用FSCat工具来将数据拷贝到OCFS2上

COREUTILS

57、我可以像OCFS(第一版)中设置o_direct参数去允许copymvtar等命令?

不用,OCFS2不需要设置此参数,OCFS2文件系统本身就允许的。

通过NFS输出

58、我能通过NFS服务器来构建OCFS2文件 系统吗?

可以的,你可以通过标准的LINUX NFS服务器来搭建 OCFS2文件系统,但是你要注意只有NFS的版本3和以上的版本可以运行,言外之意就是前段的内核版本必须是2.4或者以上版本。

59、针对NFS V2版本有相应的解决方案吗?

NFS V2也可以工作的,但是服务端应该设置no_subtree_check参数,但是 这样会涉及到一些安全上的因素。

诊断

60、我如何打开和关闭文件系统的跟踪?

显示所有信息

# debugfs.ocfs2 -l 

设置允许跟踪支持

# debugfs.ocfs2 -l SUPER allow 
设置关闭跟踪支持

debugfs.ocfs2 -l SUPER off 

完全关闭支持

# debugfs.ocfs2 -l SUPER deny

打开心跳跟踪

# debugfs.ocfs2 -l HEARTBEAT ENTRY EXIT allow 

关闭心跳跟踪

# debugfs.ocfs2 -l HEARTBEAT off ENTRY EXIT deny 

61、我如何得到文件系统的锁以及它们的结构?

OCFS2 1.0.9+含有此项功能:

mount debugfs挂载在以下位置 /debug (EL4) or /sys/kernel/debug (EL5).

# mount -t debugfs debugfs /debug 
或者

# mount -t debugfs debugfs /sys/kernel/debug

导出锁:

# echo "fs_locks" | debugfs.ocfs2 /dev/sdX >/tmp/fslocks 

62、我如何读懂通过fs_locks输出的内容?

以下为一个输出的示例:

Lockres: M000000000000000006672078b84822 Mode: Protected Read 
Flags: Initialized Attached 
RO Holders: 0 EX Holders: 0 
Pending Action: None Pending Unlock Action: None 
Requested Mode: Protected Read Blocking Mode: Invalid 

首先我们看到的是Lockers,这也是锁名,锁名和锁类型是联合在一起的 , (S superblock, M metadata, D filedata, R rename, W readwrite)

我们可以通过锁名,得到inode 名和generation:

#echo "stat " | debugfs.ocfs2 -n /dev/sdX 
Inode: 419616 Mode: 0666 Generation: 2025343010 (0x78b84822) 
.... 

将锁名映射到一个目录实体:

# echo "locate " | debugfs.ocfs2 -n /dev/sdX 
419616 /linux-2.6.15/arch/i386/kernel/semaphore.c 

还可以只提供一个inode 号:

# echo "locate <419616>" | debugfs.ocfs2 -n /dev/sdX 
419616 /linux-2.6.15/arch/i386/kernel/semaphore.c 

从一个目录实体中得到锁名:

# echo "encode /linux-2.6.15/arch/i386/kernel/semaphore.c" | debugfs.ocfs2 -n /dev/sdX 
M000000000000000006672078b84822 D000000000000000006672078b84822 W000000000000000006672078b84822 

同一个资源上第一个是Metadata锁,接着是Data锁,最后是ReadWrite锁,这DLM支持3种锁类型:NL no lock,PR protected read,EX exclusive

如果你遇到了DLM hang,此时的资源状态将会是“Busy”。

接下来我们查询资源的DLM

说明:dlm指静默的跟踪、诊断

在做dlm 跟踪的时候 ,首先要知道dlm domain,以及每个卷的UUID.

# echo "stats" | debugfs.ocfs2 -n /dev/sdX | grep UUID: | while read a b ; do echo $b ; done 
82DA8137A49A47E4B187F74E09FBBB4B 

接下来执行:

# echo R dlm_domain lockname > /proc/fs/ocfs2_dlm/debug 
例如:

# echo R 82DA8137A49A47E4B187F74E09FBBB4B M000000000000000006672078b84822 > /proc/fs/ocfs2_dlm/debug 
# dmesg | tail 
struct dlm_ctxt: 82DA8137A49A47E4B187F74E09FBBB4B, node=79, key=965960985 
lockres: M000000000000000006672078b84822, owner=75, state=0 last used: 0, on purge list: no 
granted queue: 
type=3, conv=-1, node=79, cookie=11673330234144325711, ast=(empty=y,pend=n), bast=(empty=y,pend=n) 
converting queue: 
blocked queue: 

以上信息显示了节点75获得了资源,79获得了PR锁。

限制

63、在某一个目录下的子目录是否有限制?

OCFS2的目前允许最多32000个子目录。虽然这种限制可能会增加,我们不会那样做,直到我们实现某种类型的高效名称查找(htree等)。

64、ocfs2的文件大小有没有限制?

有的,目前的软件解决了32位的块数。因此,文件系统设备是有限的(2 ^ 32)*块(见的mkfs - b)项。有了这个4KB的块大小相当于一个16TB的文件系统。此块寻址限制将放宽在未来的软件。在这一点上的限制成为解决与32位这导致了4PB 1MB的每一个文件系统集群。

系统文件

65、说明是文件系统?

系统文件时用于存储标准的文件,可以通过执行debugfs.ocfs2工具查看系统文件:

# echo "ls -l //" | debugfs.ocfs2 -n /dev/sdX 
18 16 1 2 . 
18 16 2 2 .. 
19 24 10 1 bad_blocks 
20 32 18 1 global_inode_alloc 
21 20 8 1 slot_map 
22 24 9 1 heartbeat 
23 28 13 1 global_bitmap 
24 28 15 2 orphan_dir:0000 
25 32 17 1 extent_alloc:0000 
26 28 16 1 inode_alloc:0000 
27 24 12 1 journal:0000 
28 28 16 1 local_alloc:0000 
29 3796 17 1 truncate_log:0000 

第一列列出的是块个数。

66、为什么在以上的输出中有的后面有数字?

这里有两种类型的文件,global和local,global文件是为了所有的节点,像local类型的: journal:0000,代表的是指定的节点,最后的数字是slot#,可以执行以下操作列出slot映射的部分:

# echo "slotmap" | debugfs.ocfs2 -n /dev/sdX 
Slot# Node# 
0 39 
1 40 
2 41 
3 42 

心跳

论坛徽章:
0
2 [报告]
发表于 2012-08-10 16:15 |只看该作者
好文,收益
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP