Oracle集群文件系统(OCFS2)用户指南

来源:互联网 发布:经常疲劳知乎 编辑:程序博客网 时间:2024/06/06 04:12

Oracle集群文件系统(OCFS2)用户指南

翻译:谭怀远

1:介绍
    一个集群文件系统能使运行在集群中所有节点并发的通过标准文件系统接口来访问存储设备。这给管理跨越整个集群的应用系统带来方便。
    OCFS1 问世于2002 年10 月,它是Oracle 公司为了让RAC 用户避免必须要与裸设备打交道而开发出来的。这个文件系统用来存放数据库相关的文件,比如数据文件,控制文件,在线日志文件,归档日志文件等。
    OCFS2 是下一代的ORACLE 集群文件系统,它已经被设计成为一种为通用的文件系统,它不仅可以存放数据库相关的文件,还可以存放oracle 二进制文件(指Oracle_home下的软件文件 译者注)和配置文件,从而使RAC 的管理更加轻松。

2:安装
    OCFS2 的发行版包括了2 个安装包,一个称为核心模块,另一个叫工具包。
    核心模块可以从以下链接下载:
    http://oss.oracle.com/projects/ocfs2/files/
    工具包可以从以下链接下载;
    http://oss.oracle.com/projects/ocfs2tools/files/
    首先要下载相应的软件包.对于核心模块,下载时要考虑它的发行号,适用的平台,操作系统内核版本以及内核的类型(比如SMP,HUGEMEM,PSMP 等),对于工具包,只要符合发行版本和平台就可以了。
    工具包又分为两部分,ocfs2tools命令行工具,ocfs2console 图形工具,用户可以选择不安装这部分,但它的确可以令操作简单化。
    使用rpm 命令来安装软件包,使用rpm install进行新的安装或者使用rpm upgrade来升级现有的软件包。

3:配置
    OCFS2 有一个配置配置文件,路径为/etc/ocfs2/cluster.conf.在这个文件中,你需要指定RAC 中所有的节点信息,并且所有的节点上都应该保留相同的一份。你可以动态的增加新节点到RAC,或者改变一些节点的IP,名字,但这需要重起RAC 以便于使更改生效。
    我们强烈建议用户使用OCFS2CONSOLE工具来对RAC 中所有的节点进行配置。
    运行OCFS2CONSOLE,进入cluster 菜单,选择configure nodes.如果cluster 已经停止,控制台会启动它,并且返回一个成功的信息。如果cluster.conf 文件不存在,控制台将会创建一个并给一个默认的集群名字ocfs2.点击add 按钮将节点添加到RAC 中,每一个节点需要输入节点名称,ip 和端口号。控制台从0254顺序的分配节点序号。一旦所有的节点都添加到RAC 当中,通过点击菜单cluster 里propagate configration 项,我们可以在任何一台节点上将配置文件cluster.conf 分发到所有节点相应的位置上去,由于控制台使用的是ssh 协议来传送文件,所以之前需要在所有节点上建好彼此的信任,以避免在文件传递过程中出现提出输入口令的问题。
    附录A 是一个cluster.conf 的示例。

4:O2CB 集群服务
    OCFS2 有自己的集群服务结构,叫做O2CB,它包括:
    NM:节点管理器,它对cluster.conf 文件中所有节点进行的监控。
    HB:心跳服务(Heart beat service),他在节点离开或加入rac 时提示up 和down 的消息。
    TCP:控制节点间的通讯。
    DLM:分布式锁管理器,它持续跟踪所有的锁,锁的所有者及状态。
    CONFIGFS:用户配置文件系统驱动空间,挂节点是/config
    DLMFS:用户空间和内核空间DLM 的接口。
    所有这些cluster 服务都已经被打包在o2cb 系统服务当中,所有的操作,比如format,mount 等,都需要cluster 可用。在使用format 等命令前,要先启动这些服务。
    可以通过以下方式检查所有服务的状态:
    # /etc/init.d/o2cb status
    Module "configfs": Not loaded
    Filesystem "configfs": Not mounted
    Module "ocfs2_nodemanager": Not loaded
    Module "ocfs2_dlm": Not loaded
    Module "ocfs2_dlmfs": Not loaded
    Filesystem "ocfs2_dlmfs": Not mounted

    通过以下方式启动所有服务:
    # /etc/init.d/o2cb load
    Loading module "configfs": OK
    Mounting configfs filesystem at /config: OK
    Loading module "ocfs2_nodemanager": OK
    Loading module "ocfs2_dlm": OK
    Loading module "ocfs2_dlmfs": OK
    Mounting ocfs2_dlmfs filesystem at /dlm: OK

    通过以下方式使cluster ocfs2 启动:
    # /etc/init.d/o2cb online ocfs2
    Starting cluster ocfs2: OK

    通过以下方式停止cluster ocfs2:
    # /etc/init.d/o2cb offline ocfs2
    Cleaning heartbeat on ocfs2: OK
    Stopping cluster ocfs2: OK

    通过以下方式停止所有服务:
    # /etc/init.d/o2cb unload
    Unmounting ocfs2_dlmfs filesystem:
    Unloading module "ocfs2_dlmfs": OK
    Unmounting configfs filesystem: OK
    Unloading module "configfs": OK

    通过以下方式使O2CB 在系统启动时自动被加载:
    # /etc/init.d/o2cb configure
    Configuring the O2CB driver.
    This will configure the onboot
    properties of the O2CB driver.
    The following questions will determine whether the driver is loaded on
    boot. The current values will be shown in brackets ('[]'). Hitting
    <ENTER> without typing an answer will keep that current value. CtrlC
    will abort.
    Load O2CB driver on boot (y/n) [n]: y
    Cluster to start on boot (Enter "none" to clear) []: ocfs2
    Writing O2CB configuration: oK
    #

    如果cluster 已经被配置为系统启动时加载,可以通过以下方式启动和停止它:
    # /etc/init.d/o2cb start
    Loading module "configfs": OK
    Mounting configfs filesystem at /
    Loading module "ocfs2_nodemanager":
    Loading module "ocfs2_dlm": OK
    Loading module "ocfs2_dlmfs": OK
    Mounting ocfs2_dlmfs filesystem at
    Starting cluster ocfs2: OK
    # /etc/init.d/o2cb stop
    Cleaning heartbeat on ocfs2: OK
    Stopping cluster ocfs2: OK
    Unmounting ocfs2_dlmfs filesystem:
    Unloading module "ocfs2_dlmfs": OK
    Unmounting configfs filesystem: OK
    Unloading module "configfs": OK

5:格式化(format):
    如果O2CB CLUSTER 没有启动,首先启动它。格式化操作依赖于这些服务。同时它需要你确保所有的节点上都没有挂载需要格式化的设备。
    你可以使用图形界面或者命令行来格式化分区。
    如果你使用图形界面,选择task/Format 来执行操作,在下拉列表中选择可用的设备。同时控制台会尽可能的列出设备上存在的文件系统。
    为要格式化的设备输入一个标签,为了便于管理,我们建议你输入一个标签,你仍然可以在格式化之后修改它。
    为设备选择一个集群单元大小(cluster size),它支持从4k 到1M。如果这个设备用来存储数据文件或者大的文件,比较合适的大小是128K。
    选择一个块单元大小(block size),它支持从512 字节到4k,由于OCFS2 在格式化的时候并不分配一个静态的inode 区域,所以4k 是我们强烈推荐的大小,它几乎适合所有的磁盘大小,换句话说,即时这些磁盘支持512 字节,但我们仍然不建议使用小的单元。
    一旦格式化完毕,集群单元和块单元都不可以再改变。
    输入一个节点槽位(node slots),这个数值决定了允许多少节点同时挂载这个设备。这个数值随后可以修改,但只能增加,不能减小。
    点击ok 按钮执行格式化操作。
    要格式化一个3k 块大小,32k 集群单元大小,包括4 个节点的设备,在命令行下,可以通mkfs.ocfs2 工具按如下操作完成:
    # mkfs.ocfs2 -b 4K -C 32K -N 4 -L oracle_home /dev/sdf2
    mkfs.ocfs2 1.2.0
    Overwriting existing ocfs2 partition.
    Proceed (y/N): y
    Filesystem label=oracle_home
    Block size=4096 (bits=12)
    Cluster size=32768 (bits=15)
    Volume size=21474820096 (655359 clusters) (5242872 blocks)
    21 cluster groups (tail covers 10239 clusters, rest cover 32256 clusters)
    Journal size=33554432
    Initial number of node slots: 4
    Creating bitmaps: done
    Initializing superblock: done
    Writing system files: done
    Writing superblock: done
    Writing lost+found: done
    mkfs.ocfs2 successful
    可以通过man 获得mkfs.ocfs2 的帮助信息。

6:挂载(mount)
    启动o2cb 服务,mount 操作需要这些服务的支持。
    你可以使用图形界面或者命令行工具:mount 来完成操作。
    如果使用图形界面:运行ocfs2console,选中一个设备,点击mount 按钮,在弹出的对话框中输入挂接点,在可选项中输入defaults,点击ok.成功执行者后,你在列表中会看到这个设备以及它的挂接点。
    命令行下的操作:
    # mount -t ocfs2 /dev/sdf2 /u01
    要取消挂接(umount)一个设备,可以在控制台上选中该设备点击umount 或者在命令行下输入:
    # umount /u01
    Oracle 数据库用户在将Ocfs2 挂接点用来存放voting disk(CRS),cluster registry(OCR),数据文件,redo file,归档日志和控制文件时,在mount 操作时,一定要使用'datavolume,nointr'的mount 选项。
    其中datavolume 选项确保Oracle 进程在打开文件时使用o_direct 标记。nointr 选项确保在这个设备上的读写不会被一些信号中断。其他的设备,比如用于存放Oracle_Home 文件的挂节点不需要使用这些选项。
    通过以下命令来完成包含数据文件,voting disk 等设备的挂载:
    # mount -t ocfs2 -o datavolume,nointr /dev/sdf2 /u01
    # mount
    /dev/sdf2 on /u01 type ocfs2 (rw,datavolume,nointr)
    如果你想在系统启动时挂接ocsf2,你需要保证o2bc 和ocfs2 服务使用chkconfig 来配置o2bc 在启动时被加载。并且要在/etc/fstab 文件中加入如下项:
    # cat /etc/fstab
    ...
    /dev/sdf2 /u01 ocfs2 _netdev,datavolume,nointr 0 0
    /dev/sdg2 /orahome ocfs2 _netdev 0 0
    ...
    _netdev 选项对于mount ocfs2 设备是必须的,这个选项说明设备需要在网络启动时候挂载,在网络关闭之后取消挂载(datavolume 和nointr 选项只在存储数据文件等设备上需要)。
    ocfs2 的服务可以用来挂载和取消挂在ocfs2 设备,它通常用来确保ocfs2 设备必须在网络服务关闭之后再取消挂载。
    # chkconfig --add ocfs2
    ocfs2 0:off 1:off 2:on 3:on 4:off 5:on 6:off
    # chkconfig --add o2cb
    o2cb 0:off 1:off 2:on 3:on 4:off 5:on 6:off
    #
    #
    # /etc/init.d/o2cb configure
    ...
    Load O2CB driver on boot (y/n) [n]: y
    Cluster to start on boot (Enter "none" to clear) []: ocfs2
    Writing O2CB configuration: OK
    可以通过标签来挂载设备:
    # mount -L datafiles /u01

7:调整(tune)
    调整的操作允许你增加节点数(增加并发访问mount 设备的节点数),修改设备的标签和修改。
    tunefs.ocfs2 命令行工具用来完整这个操作,你也可以使用控制台来完成。
    确保O2cb 服务启动,tune 操作需要这些服务的支持。
    如果是用控制台增加节点数,点击:task,选择Edit Node Slot count,在对话框中输入你需要的节点数,Ok 完成。
    通过以下命令从命令行完成上面的操作:
    # tunefs.ocfs2 -N 8 /dev/sdf2
    tunefs.ocfs2 1.2.0
    Changing number of node slots from 4 to 8
    Proceed (y/N): y
    Added node slots
    Wrote Superblock
    在控制台下修改一个设备的标签,点击:task/Change Label,在对话框中输入新的标签。

    命令行下的操作:
    # tunefs.ocfs2 -L "old datafiles" /dev/sdf2
    tunefs.ocfs2 1.2.0
    Changing volume label from datafiles to old datafiles
    Proceed (y/N): y
    Changed volume label
    Wrote Superblock
    通过man 命令来获得tunefs.ocfs2 的完整帮助。

8:文件系统检查:
    文件系统检查操作用来检查设备的健康情况,定期做这种操作有助于发现和修复设备的故障和消除无序化。
    fsck.ocfs2 命令用来完成这个工作,你也可以使用控制台来完成。
    运行ocfs2 控制台,task/check,会执行一次只读的检查操作,它允许在设备mount 状态下进行。
    命令行下的操作如下:
    # fsck.ocfs2 -n /dev/sdf2
    Checking OCFS2 filesystem in /dev/sdf2:
    label: oracle_home
    uuid: dc a2 90 1b 24 1f 40 6e 80 e9 85 dd 6b 45 2d 1a
    number of blocks: 5242872
    bytes per block: 4096
    number of clusters: 655359
    bytes per cluster: 32768
    max slots: 4
    /dev/sdf2 is clean. It will be checked after 20 additional mounts.
    控制台下要对设备进行修复执行:task/repair,它需要o2bc 服务启动以保证设备不被任何节点挂载。相应的命令行操作:
    # fsck.ocfs2 -y /dev/sdf2
    Checking OCFS2 filesystem in /dev/sdf2:
    label: oracle_home
    uuid: dc a2 90 1b 24 1f 40 6e 80 e9 85 dd 6b 45 2d 1a
    number of blocks: 5242872
    bytes per block: 4096
    number of clusters: 655359
    bytes per cluster: 32768
    max slots: 4
    /dev/sdf2 is clean. It will be checked after 20 additional mounts.
    使用man 来获得fsck.ocfs2 的完整帮助。

9:CDSL(Context Dependent Symbolic Links)
    在一个共享存储的cluster 环境,实例需要通过cluster 来访问一些文件和路径,通常它可能只对这个路径感兴趣,比如在一个共享的ORACLE_HOME 中,/admin/listener.ora 对所有的节点都是相同的,但listener.ora 的内容却各不相同,同理,对于一个共享的启动环境,/etc/对所有节点是相同的,但它里面的内容却各不相同。
    对于所有的这些实例,这个文件或者路径的内容依赖于各个节点的主机名,而对于另外的一些实例,它可能会依赖于各个节点的架构(x86,x86_64 或者IA64),也可能会依赖于各个节点的节点号。
    为了解决这些问题,OCFS2 使用了一种称为CDSL(Context Dependent Symbolic Links)的技术,简单的说,就是它使用软连接来实现各个节点自己需要的文件内容。
    可以使用ocfs2cdsl 命令行工具来建立这些软链接:
    建立一个节点需要的文件:
    root@node32:admin/# ocfs2cdsl listener.ora
    root@node32:admin/# ls –l listener.ora
    lrwxrwxrwx 1 root root 50 Aug 8 11:41 listener.ora >
    ../.cluster/hostname/{hostname}/10g/network/admin/listener.ora
    编辑这个文件,然后保存,要从其他节点山访问这个文件,先要在那个节点上创建CDSL,然后再像刚才那样把正确的内容写进去。
    root@node31:admin/# ocfs2cdsl listener.ora
    把一个已经存在的文件变成cdsl 文件:
    root@node32:admin/# ocfs2cdsl –c sqlnet.ora
    同理,在其他节点上也这样做。
    root@node31:admin/# ocfs2cdsl sqlnet.ora
    这是你也许会发现对于所有的节点这个文件里面的内容是一样的,在任何一个检点上对该文件的更新对于其他节点都是不可见的。
    删除一个CDSL 链接:
    root@node31:admin/# rm listener.ora
    可以通过man 来获得ocfs2cdsl 的完全帮助。

10 其他的一些工具:
    mounted.ocfs2
    mounted.ocfs2 是一个命令行下列出一个节点上所有OCFS2 设备的工具。它扫描/proc/partitions 文件中列出的所有分区。
    列出一个节点上ocfs2 分区信息:
    # mounted.ocfs2 -d
    Device FS UUID Label
    /dev/sdb1 ocfs2 e70c75a0a08c480abf50ebda4191da30 mm_v2_dbf1
    /dev/sdb2 ocfs2 f49163e8628843c4a792e9401fde45fa mm_v2_ctrl
    /dev/sdb3 ocfs2 2d441be2adb64c529e199a7c2c485dc4 mm_v2_dbf2
    /dev/sdb5 ocfs2 8607eae98e4f449584e88db0bc9da60c mm_v2_log1
    /dev/sdb6 ocfs2 acfb7b7da27747419791620ea9b82670 mm_v2_log2
    /dev/sdf1 ocfs2 84749537df454a97aa28fad63760b674 9ihome
    /dev/sdq1 ocfs2 dca2901b241f406e80e985dd6b452d1a oracle_home
    /dev/sdcf1 ocfs2 663764bd1eed4b3caa48a98f0be0e574 10ghome
    /dev/sdcf2 ocfs2 8e2d9c21ef474fea8ac52306cc60455e mm_v2_log3
    列出所有节点上ocfs2 分区信息:
    # mounted.ocfs2 -f
    Device FS Nodes
    /dev/sdb1 ocfs2 node31, node32, node33, node34
    /dev/sdb2 ocfs2 node31, node32, node33, node34
    /dev/sdb3 ocfs2 node31, node32, node33, node34
    /dev/sdb5 ocfs2 node31, node32, node33, node34
    /dev/sdb6 ocfs2 node91, node90
    /dev/sdf1 ocfs2 Not mounted
    /dev/sdq1 ocfs2 node34, node35
    /dev/sdcf1 ocfs2 Not mounted
    /dev/sdcf2 ocfs2 Not mounted
    注意:这个命令只列出起了o2bc 服务的节点机的名字,对于那些没有起o2bc 服务的节点,将以节点号代替。
    通过man 命令获得mounted.ocfs2 的完全帮助。

附录A
    一个cluster.conf 例子:
    Sample /etc/ocfs2/cluster.conf
    cluster:
    node_count = 2
    name = racdb
    node:
    ip_port = 7777
    ip_address = 192.168.0.107
    number = 7
    name = node7
    cluster = racdb
    node:
    ip_port = 7777
    ip_address = 192.168.0.106
    number = 6
    name = node6
    cluster = racdb

译着注:本文档译自Oracle官方文档:ocfs2_users_guide.

转载自百度文档

原创粉丝点击