Something About NFS





项目中遇到使用NFS挂载的存储很正常,但是最近却遇到一些怪事,让自己有了一次研究这玩意儿的机会。

当时的环境为OS: RHEL 5.7 64bit,DB: Oracle DB 11.2.0.2 64bit,nfs server不详。

当时我们用尽各种参数都无法使Oracle DB对NFS文件进行写操作,但是touch小文件都没有问题,这里其实说明权限不是问题,而对NFS的配置或许是问题的关键。在当时还有一个问题,就是nfs client中oracle用户的UID与NFS server上一个VM的用户UID冲突,当时存储工程师解释为这是无法正常挂载的关键,并且即使在最后我们使Oracle DB可以对NFS进行操作,还强调这存在一定的安全隐患。

具体我们是用了哪个很牛叉的参数,我们最后公布。当然为什么为用到这个参数,这要感谢那个存储工程师,他提了一个思路,让我们从alert日志中,发现了端倪;也要感谢google,你的无比强大让我们有继续下去的勇气;最要感谢的是 DB CONF,是你在一年前的测试,点燃了我们最后的希望。

2个实验

1个参数

1个疑问

实验一

Oracle DB无法在NFS挂载点上写操作。

环境:

OS: Linux stream1 2.6.18-194.el5 #1 SMP Mon Mar 29 22:10:29 EDT 2010 x86_64 x86_64 x86_64 GNU/Linu

DB: SQL*Plus: Release 10.2.0.1.0 – Production on Thu Jan 12 10:17:47 2012

–server

—server

/archivelog

172.16.6.211/32(rw,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)

—client

stream2:/archivelog on /archivelog type nfs (rw,sync, addr=172.16.6.212)

Thu Jan 12 09:32:55 2012

WARNING:NFS file system /archivelog mounted with incorrect options

WARNING:Expected NFS mount options: rsize>=32768,wsize>=32768,hard

Thu Jan 12 09:32:55 2012

Errors in file /u01/app/oracle/admin/outer/udump/outer_ora_10045.trc:

ORA-19504: failed to create file "/archivelog/1_55_772122304.dbf"

ORA-27054: NFS file system where the file is created or resides is not mounted with correct options

Additional information: 3

ARCH: Error 19504 Creating archive log file to ‘/archivelog/1_55_772122304.dbf’

Thu Jan 12 09:38:00 2012

create tablespace test datafile ‘/archivelog/test01.dbf’ size 10M

Thu Jan 12 09:38:00 2012

WARNING:NFS file system /archivelog mounted with incorrect options

WARNING:Expected NFS mount options: rsize>=32768,wsize>=32768,hard

ORA-1119 signalled during: create tablespace test datafile ‘/archivelog/test01.dbf’ size 10M…

依据alert日志的提示,在mount时增加 rsize>=32768,wsize>=32768,hard

创建失败,但得到提示

修改配置

—server

/archivelog 172.16.6.211/32(rw,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)

—client

stream2:/archivelog on /archivelog type nfs (rw,sync,rsize=32768,wsize=32768,hard,addr=172.16.6.212)

Thu Jan 12 09:42:09 2012

create tablespace test datafile ‘/archivelog/test01.dbf’ size 10M

Thu Jan 12 09:42:42 2012

Completed: create tablespace test datafile ‘/archivelog/test01.dbf’ size 10M

创建文件成功。

但是在另外的一个环境中

OS: Linux middle.oracle.com 2.6.18-194.el5 #1 SMP Mon Mar 29 22:10:29 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

DB: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – 64bit Production

–nfs

—server

/u01/arch 192.168.1.81/32(rw,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)

—client

middle:/u01/arch on /u01/arch type nfs (rw,sync,addr=192.168.1.71)

Thu Jan 12 10:06:50 2012

create tablespace test datafile ‘/u01/arch/test01.dbf’ size 10M

Thu Jan 12 10:07:34 2012

Completed: create tablespace test datafile ‘/u01/arch/test01.dbf’ size 10M

创建成功

小结一

2个场景,操作系统一样,都为OEL 5.5 64bit,挂载方式都为SYNC,RW,唯有Oracle DB版本不同,说明,Oracle DB对于NFS,在后续的版本中做出了优化。

却引发了一个问题,就是虽然可以创建,但是都花费近1分钟时间才完成,这是一个10M的文件,这种速度,是无法忍受的。所以有了后续的个实验。

实验二

服务端采用随后sync与async模式

–sync模式

—server

/archivelog 172.16.6.211/32(rw,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)

—client

stream2:/archivelog on /archivelog type nfs (rw,sync,rsize=32768,wsize=32768,hard,addr=172.16.6.212)

Thu Jan 12 09:42:09 2012

create tablespace test datafile ‘/archivelog/test01.dbf’ size 10M

Thu Jan 12 09:42:42 2012

Completed: create tablespace test datafile ‘/archivelog/test01.dbf’ size 10M

近1分钟才完成一个10M文件的创建!

–async模式

—server

/archivelog 172.16.6.211/32(rw,async,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)

—clinet

stream2:/archivelog on /archivelog type nfs (rw,hard,rsize=32768,wsize=32768,addr=172.16.6.212)

Thu Jan 12 09:50:39 2012

create tablespace test datafile ‘/archivelog/test01.dbf’ size 10m

Thu Jan 12 09:50:39 2012

Completed: create tablespace test datafile ‘/archivelog/test01.dbf’ size 10m

瞬间完成。

小结二

async All I/O to the file system should be done asynchronously.

sync All I/O to the file system should be done synchronously. In case of media with limited number of write cycles (e.g. some flash drives) "sync" may cause lifecycle shortening.

From man mount

sync与async与nfs性能有关,与能否挂载无关。

神奇的参数

我们最后是在mount挂载选项中加入了nolock才实现的写操作。

关于这个参数,我们引用man nfs中的一段。

nolock

Disable NFS locking. Do not start lockd. This has to be used with some old NFS servers that don’t support locking.

最后的疑问

NFS CLIENT与NFS SERVER中存在共同的UID会对系统造成什么样的影响?权限引发的问题?还是其他?但是这在系统中似乎并没有告警?又或者在其他什么地方。




Related posts

coded by nessus
分享:  DeliciousGReader鲜果豆瓣CSDN网摘
Trackback

no comment untill now

Add your comment now

无觅相关文章插件