适用于Oracle数据库的NFS配置
NetApp提供企业级NFS存储已超过30年、由于其精简性、随着向基于云的基础架构的推进、其使用量也在不断增长。
NFS协议包含多个版本、但要求各不相同。有关使用ONTAP的完整NFS配置问题描述、请参见 "TR-4067:《基于ONTAP的NFS最佳实践》"。以下各节介绍了一些更关键的要求和常见的用户错误。
NFS版本
NetApp必须支持操作系统NFS客户端。
-
遵循NFSv3标准的操作系统支持NFSv3。
-
Oracle DNFS客户端支持NFSv3。
-
遵循NFSv4标准的所有操作系统均支持NFSv4。
-
NFSv4.1和NFSv4.2需要特定的操作系统支持。请参见 "NetApp IMT" 支持的操作系统。
-
为NFSv4.1提供Oracle DNFS支持需要Oracle 12.2.0.2或更高版本。
。 "NetApp支持表" 对于NFSv3和NFSv4、不包括特定的操作系统。通常支持所有符合RFC的操作系统。在联机IMT中搜索NFSv3或NFSv4支持时、请勿选择特定操作系统、因为不会显示任何匹配项。常规策略隐式支持所有操作系统。 |
Linux NFSv3 TCP插槽表
TCP插槽表相当于主机总线适配器(Host Bus Adapter、HBA)队列深度的NFSv3。这些表可控制任何时候都可以处理的NFS操作的数量。默认值通常为16、该值太低、无法实现最佳性能。在较新的Linux内核上会出现相反的问题、这会自动将TCP插槽表限制增加到使NFS服务器充满请求的级别。
为了获得最佳性能并防止出现性能问题、请调整控制TCP插槽表的内核参数。
运行 sysctl -a | grep tcp.*.slot_table
命令、并观察以下参数:
# sysctl -a | grep tcp.*.slot_table sunrpc.tcp_max_slot_table_entries = 128 sunrpc.tcp_slot_table_entries = 128
所有Linux系统都应包括 sunrpc.tcp_slot_table_entries
,但只有部分包括 sunrpc.tcp_max_slot_table_entries
。它们都应设置为128。
小心 |
---|
如果未设置这些参数、可能会对性能产生显著影响。在某些情况下、性能会受到限制、因为Linux操作系统发出的I/O不足在其他情况下、随着Linux操作系统尝试问题描述的I/O数超过可处理的I/O数、I/O时间会增加。 |
ADr和NFS
一些客户报告了因中的数据量过多而导致的性能问题 ADR
位置。通常、只有在积累了大量性能数据之后、才会出现此问题。I/O过多的原因未知、但此问题似乎是由Oracle进程反复扫描目标目录以查找更改引起的。
卸下 noac
和 / 或 actimeo=0
挂载选项允许进行主机操作系统缓存并降低存储I/O级别。
* NetApp建议*不要放置 ADR 使用的文件系统上的数据 noac 或 actimeo=0 因为可能会出现性能问题。分开 ADR 如果需要、可将数据迁移到其他挂载点。
|
NFS-rootonly和mount-rootonly
ONTAP包含一个名为的NFS选项 nfs-rootonly
用于控制服务器是否接受来自高端口的NFS流量连接。作为一项安全措施、只有root用户才允许使用1024以下的源端口打开TCP/IP连接、因为此类端口通常保留供操作系统使用、而不是供用户进程使用。此限制有助于确保NFS流量来自实际操作系统NFS客户端、而不是模拟NFS客户端的恶意进程。Oracle DNFS客户端是用户空间驱动程序、但该进程以root用户身份运行、因此通常不需要更改的值 nfs-rootonly
。这些连接是从低端口进行的。
。 mount-rootonly
仅选件适用场景NFSv3。它控制是否从大于1024的端口接受RPC挂载调用。使用DNFS时、客户端将再次以root身份运行、因此它可以打开1024以下的端口。此参数无效。
通过NFS 4.0及更高版本打开与DNFS连接的进程不会以root身份运行、因此需要1024以上的端口。。 nfs-rootonly
必须将参数设置为disabled、DNFS才能完成连接。
条件 nfs-rootonly
处于启用状态、则会在打开DNFS连接的挂载阶段挂起。sqlplus输出类似于:
SQL>startup ORACLE instance started. Total System Global Area 4294963272 bytes Fixed Size 8904776 bytes Variable Size 822083584 bytes Database Buffers 3456106496 bytes Redo Buffers 7868416 bytes
可以按如下方式更改此参数:
Cluster01::> nfs server modify -nfs-rootonly disabled
在极少数情况下、您可能需要将NFS-rootonly和mount-rootonly更改为disabled。如果服务器管理的TCP连接数量非常多、则可能没有低于1024的可用端口、并且操作系统会强制使用更高的端口。要完成连接、需要更改这两个ONTAP参数。 |
NFS导出策略:super用户 和set_id
如果Oracle二进制文件位于NFS共享上、则导出策略必须包括超级用户和set_id权限。
用于用户主目录等通用文件服务的共享NFS导出通常会强制转换root用户。这意味着挂载了文件系统的主机上的root用户发出的请求会重新映射为权限较低的其他用户。这有助于防止特定服务器上的root用户访问共享服务器上的数据、从而保护数据安全。在共享环境中、set_id位也可能存在安全风险。set_id位允许以与调用命令的用户不同的用户身份运行进程。例如、由root用户拥有且具有set_id位的shell脚本以root用户身份运行。如果其他用户可以更改该shell脚本、则任何非root用户都可以通过更新脚本以root用户身份问题描述命令。
Oracle二进制文件包含root用户拥有的文件、并使用set_id位。如果在NFS共享上安装了Oracle二进制文件、则导出策略必须包含适当的超级用户和set_id权限。在以下示例中、此规则同时包含这两者 allow-suid
和许可 superuser
使用系统身份验证的NFS客户端的(root)访问权限。
Cluster01::> export-policy rule show -vserver vserver1 -policyname orabin -fields allow-suid,superuser vserver policyname ruleindex superuser allow-suid --------- ---------- --------- --------- ---------- vserver1 orabin 1 sys true
NFSv4/4.1配置
对于大多数应用程序、NFS3和NFSv4之间的差别非常小。应用程序I/O通常非常简单、不会从NFSv4中提供的某些高级功能中显著受益。从数据库存储角度来看、较高版本的NFS不应视为"升级"、而应视为包含其他功能的NFS版本。例如、如果需要Kerberos隐私模式(krb5p)的端到端安全性、则需要NFSv4。
*如果需要NFSv4功能、NetApp建议*使用NFSv4.1。在NFSv4.1中、NFSv4协议有一些功能增强功能、可提高某些边缘情况下的故障恢复能力。 |
与简单地将挂载选项从vs=3更改为vs=4.1相比、切换到NFSv4更为复杂。有关使用ONTAP配置NFSv4的更完整说明、包括有关配置操作系统的指导、请参见 "TR-4067:《基于ONTAP的NFS最佳实践》"。本技术报告的以下各节介绍了使用NFSv4的一些基本要求。
NFSv4域
有关NFSv4/4.1配置的完整说明不在本文档的讨论范围之内、但一个常见问题是域映射不匹配。从sysadmin的角度来看、NFS文件系统似乎运行正常、但应用程序会报告有关某些文件的权限和/或set_id的错误。在某些情况下、管理员错误地得出结论、认为应用程序二进制文件的权限已损坏、并在实际问题是域名时运行了chown或chmod命令。
在ONTAP SVM上设置NFSv4域名:
Cluster01::> nfs server show -fields v4-id-domain vserver v4-id-domain --------- ------------ vserver1 my.lab
主机上的NFSv4域名在中进行设置 /etc/idmap.cfg
[root@host1 etc]# head /etc/idmapd.conf [General] #Verbosity = 0 # The following should be set to the local NFSv4 domain name # The default is the host's DNS domain name. Domain = my.lab
域名必须匹配。否则、中将显示类似以下内容的映射错误 /var/log/messages
:
Apr 12 11:43:08 host1 nfsidmap[16298]: nss_getpwnam: name 'root@my.lab' does not map into domain 'default.com'
应用程序二进制文件(如Oracle数据库二进制文件)包括root用户拥有的具有set_id位的文件、这意味着NFSv4域名不匹配会导致Oracle启动失败、并显示有关名为的文件的所有权或权限的警告 oradism
,位于中 $ORACLE_HOME/bin
目录。它应如下所示:
[root@host1 etc]# ls -l /orabin/product/19.3.0.0/dbhome_1/bin/oradism -rwsr-x--- 1 root oinstall 147848 Apr 17 2019 /orabin/product/19.3.0.0/dbhome_1/bin/oradism
如果此文件的所有权为mody、则可能存在NFSv4域映射问题。
[root@host1 bin]# ls -l oradism -rwsr-x--- 1 nobody oinstall 147848 Apr 17 2019 oradism
要修复此问题、请选中 /etc/idmap.cfg
根据ONTAP上的v4-id-domain设置创建文件、并确保它们一致。如果不是、请进行所需的更改、然后运行 nfsidmap -c
,然后等待片刻,让更改传播。然后、文件所有权应正确识别为root。如果用户尝试运行 chown root
更正NFS域配置之前、可能需要在此文件上运行 chown root
再次重申。