广告位 · 页头(后台-模块管理-新建模块后替换此区域)

Oracle RAC集群中如何使用ACFS文件系统作为FRA?

ACFS是构建在ASM之上的Oracle集群文件系统,支持多个节点同时读写同一套目录和文件。在RAC环境中,把快速恢复区FRA放在ACFS上,可以让所有实例共享归档日志、闪回日志和备份集,避免使用本地文件系统时各节点归档路径不一致带来的麻烦。接下来从架构特点、具体配置以及运维注意事项几个层面展开说明。

Oracle RAC集群中如何使用ACFS文件系统作为FRA?

一、ACFS作为FRA的架构优势与适用场景

快速恢复区是Oracle数据库中集中存放归档日志、控制文件自动备份、闪回日志以及RMAN备份片的关键区域。在单实例环境中,FRA通常使用本地磁盘或ASM磁盘组即可。但在RAC集群中,每个节点都可能产生归档日志,备份操作也可能在任意节点执行,这就要求FRA的存储必须对所有节点可见且支持并发访问。如果继续沿用本地文件系统,每个节点各写各的归档目录,RMAN恢复时需要手动汇总所有节点的归档日志,过程繁琐且容易遗漏。

ACFS文件系统正好解决了这个痛点。它运行在ASM之上,继承了ASM的冗余和故障组特性,同时提供POSIX兼容的挂载点接口。所有节点挂载同一个ACFS文件系统后,看到的文件列表完全一致,文件锁由集群层统一管理。相比NFS方案,ACFS不需要单独的NAS服务器,网络延迟更低,也不会因为NFS服务器宕机而导致整个集群归档失败。对于已经使用ASM作为OCR和Voting Disk存储的RAC环境来说,引入ACFS只是增加一些卷和挂载资源,整体架构更紧凑。

当然,ACFS并非万能。如果数据库版本较老,或者Oracle Grid Infrastructure没有安装ACFS驱动,就无法使用。此外,ACFS的性能受ASM磁盘组底层IO能力影响,当归档写入非常频繁时,需要关注写放大和缓存命中情况。但总体来说,对于中小型RAC、没有专业SAN/NAS设备或者希望统一备份目录的场景,ACFS承载FRA是一个非常实用的方案。

二、配置ACFS承载FRA的操作步骤

配置之前,先确认所有节点的Oracle Grid Infrastructure版本支持ACFS,并且ACFS驱动已经加载。可以通过执行acfsdriverstate -version查看驱动状态,如果返回supported且状态为loaded,说明环境就绪。这一步不能省略,否则后续创建卷和格式化时会遇到驱动不匹配的错误。

接下来需要创建一个ASM磁盘组,或者使用已有的磁盘组来承载ACFS卷。假设磁盘组名称为DATA,下面用一个20GB的卷FRAVOL来演示。第一步使用asmcmd创建卷,然后查看卷对应的设备路径。注意卷设备名可能会带有数字后缀,不同节点可能显示不同,但格式化时以任一节点看到的路径为准即可。

# 创建ACFS卷,指定磁盘组DATA,卷名FRAVOL,大小20G
asmcmd volcreate -G DATA -s 20G FRAVOL
# 查看卷信息,获取设备路径
asmcmd volinfo -G DATA FRAVOL

执行完上述命令后,通常会在/dev/asm/目录下生成类似fravol-123的设备文件。接着使用mkfs.acfs命令对该设备进行格式化,创建挂载点,然后挂载到集群中的所有节点。注意格式化只需要在任意一个节点执行一次,但挂载操作需要在每个节点上分别执行,或者通过集群资源统一管理。

# 格式化ACFS文件系统
/sbin/mkfs.acfs /dev/asm/fravol-123
# 在所有节点创建挂载点
mkdir -p /u01/app/oracle/fra
# 在任一节点执行挂载
mount -t acfs /dev/asm/fravol-123 /u01/app/oracle/fra

手动挂载只对当前节点有效,节点重启后会丢失。为了让ACFS在集群所有节点自动挂载,必须把它注册到Oracle Clusterware中。使用acfsutil registry命令完成注册,之后Clusterware会在节点启动时自动挂载该文件系统。

# 注册ACFS自动挂载资源
/sbin/acfsutil registry -a /dev/asm/fravol-123 /u01/app/oracle/fra

注册完成后,可以使用crsctl stat res -t查看相关的文件系统资源是否已经创建并处于ONLINE状态。此时FRA的存储目录已经就绪,还需要修改数据库参数,让所有实例把FRA指向这个ACFS挂载点。使用SQL命令修改db_recovery_file_dest和db_recovery_file_dest_size即可。

ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/fra' SCOPE=BOTH SID='*';
ALTER SYSTEM SET db_recovery_file_dest_size=20G SCOPE=BOTH SID='*';

修改完参数后,可以手动切换一次日志,检查归档日志是否写入到ACFS挂载点。如果目录下出现新的归档文件,并且所有节点都能看到该文件,说明配置成功。如果切换日志时出现ORA-16038或ORA-19809等错误,需要检查挂载权限和磁盘空间是否满足要求。

三、FRA在ACFS上的权限、故障排查与性能优化

权限问题是ACFS承载FRA时最容易踩的坑。Oracle实例通常以oracle用户运行,而ACFS挂载点默认可能属于root用户或grid用户。如果oracle用户没有写入权限,归档会直接报错并可能导致数据库挂起。正确的做法是在所有节点上将挂载点目录的所有者改为oracle用户,并设置合适的组权限。例如执行chown oracle:oinstall /u01/app/oracle/fra和chmod 775 /u01/app/oracle/fra。修改后需要验证oracle用户能否在目录中创建和删除文件。

自动挂载的可靠性也直接关系到数据库可用性。如果ACFS没有注册到Clusterware,节点重启后挂载点为空,数据库启动时找不到FRA,归档会失败,甚至可能导致实例无法打开。可以通过srvctl status filesystem查看ACFS资源状态,或者使用crsctl stat res -w "TYPE = ora.acfs.type"过滤文件系统资源。如果发现资源不在线,先检查acfsutil registry的输出,确认设备路径与挂载点是否匹配。有时重新注册一次就能解决。

归档日志在ACFS上的可见性需要特别关注。RAC各节点看到的ACFS目录理论上完全一致,但如果某个节点的ACFS驱动异常或者挂载选项不一致,可能出现文件不同步。可以在每个节点执行ls -l /u01/app/oracle/fra对比文件数量和时间戳。如果发现节点间存在差异,先卸载并重新挂载那个异常节点的ACFS,再检查ocrconfig -showbackup确认集群配置没有脑裂。

性能方面,ACFS虽然方便,但相比裸设备或ASM直接管理,多了一层文件系统开销。归档日志写入通常是顺序IO,ACFS的缓存策略对顺序写影响较小,但频繁的元数据更新可能成为瓶颈。可以通过acfsutil info fs /u01/app/oracle/fra查看文件系统统计信息,关注metadata cache和write counts。如果写性能不理想,可以考虑将ACFS卷放在独立的ASM磁盘组中,避免与其他高IO负载竞争。另外,适当增大FRA磁盘组大小,给归档日志预留足够空间,也能减少因空间不足导致的强制日志切换。

常见故障排查命令可以总结如下:

  • 查看ACFS驱动状态:执行acfsdriverstate -version,确认所有节点驱动正常加载。
  • 查看挂载情况:执行mount | grep acfs,确认每个节点都挂载了FRA目录。
  • 查看归档写入情况:执行ls -lt /u01/app/oracle/fra,检查最新归档文件时间戳。
  • 清理FRA空间:如果空间不足,使用RMAN删除过期归档或备份,不要手动删除ACFS下的文件。
  • 检查Clusterware资源:执行crsctl stat res -t | grep acfs,确保文件系统资源ONLINE。

把FRA迁移到ACFS后,数据库备份策略可以进一步简化。RMAN备份脚本只需要指定一个统一的备份目录,不需要再遍历各节点的本地归档目录。同时,ACFS支持在线扩容,后续如果FRA空间不足,可以使用asmcmd volresize扩大卷,再在线扩展文件系统,整个过程无需停机,对生产环境影响很小。这套方案在多个实际RAC项目中验证过,稳定性值得信赖。

广告位 · 文章底部(后台-模块管理替换此区域)