RAC in 11GR2 auf NFS-Shares mit Direct-NFS

 

Ab Oracle 11gR2 besteht die Möglichkeit, die RAC-Datenbank anstatt unter ASM oder OCFS auf ein NFS-Laufwerk abzulegen. Eine ausführliche Installationsanweisung finden Sie hier bei Oracle-Base. Interessant ist, bei dieser Art der Konfiguration, die Verwendung des von Oracle unter 11gR1 zur Verfügung gestellten Direct-NFS-Clients zur Erhöhung der Performance beim Zugriff auf das NFS-System. In diesem Beispiel wurde eine geclusterte Datenbank mit den Instanzen orcl1 und orcl2 erstellt. Voting-Disk, Cluster-Registry und Datenbank liegen jeweils auf einem NFS-Share eines Open-Filers.

[oracle@rac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 1 16:21:46 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> select instance_name from gv$instance;

INSTANCE_NAME
----------------
orcl1
orcl2

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

 

Für die Installation des Direct-NFS-Treibers muss die Standard-Bibliothek ODM (Oracle Disk Manager) gegen den Direct-NFS-Treiber getauscht werden. In diesem Fall werden alle Instanzen des Clusters heruntergefahren und, weil kein gemeinsames ORACLE_HOME der Knoten verwendet wird, die Bibliothek auf jedem Knoten ausgetauscht. Zusätzlich müssen die Shares über die Datei /etc/mtab eingebunden sein. Oracle erlaubt die Einbindung allerdings auch über die Dateien:

  1. $ORACLE_HOME/dbs/oranfstab
  2. /etc/oranfstab
  3. /etc/mtab

In diesem Fall wurde die Einbindung über /etc/mtab durchgeführt.

Herunterfahren der Instanzen:
[oracle@rac1 ~]$ srvctl stop database -d orcl

Austauschen der Bibliothek auf Knoten 1:

[oracle@rac1 ~]$ cd $ORACLE_HOME/lib
[oracle@rac1 lib]$ mv libodm11.so libodm11.so_stub
[oracle@rac1 lib]$ ln -s libnfsodm11.so libodm11.so

Austauschen der Bibliothek auf Knoten 2:


[oracle@rac2 ~]$ cd $ORACLE_HOME/lib
[oracle@rac2 lib]$ mv libodm11.so libodm11.so_stub
[oracle@rac2 lib]$ ln -s libnfsodm11.so libodm11.so

Starten der Instanzen:
[oracle@rac1 lib]$ srvctl start database -d orcl

Nach dem Start der Instanzen können über die Views v$dnfs_servers die Direct-NFS-Shares der Datenbank und über die View v$dfns_files die auf diesen Shares befindlichen Datenbankdateien verifiziert werden.

[oracle@rac1 lib]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 1 16:37:04 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> describe v$dnfs_servers
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ID                                                 NUMBER
SVRNAME                                            VARCHAR2(255)
DIRNAME                                            VARCHAR2(1024)
MNTPORT                                            NUMBER
NFSPORT                                            NUMBER
WTMAX                                              NUMBER
RTMAX                                              NUMBER

SQL> col SVRNAME format a20
SQL> col DIRNAME format a50
SQL> select SVRNAME,DIRNAME from v$dnfs_servers;

SVRNAME              DIRNAME
-------------------- --------------------------------------------------
192.168.1.10         /mnt/rac_nfs/oradata/oradata_share/

SQL> describe v$dnfs_files
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
FILENAME                                           VARCHAR2(513)
FILESIZE                                           NUMBER
PNUM                                               NUMBER
SVR_ID                                             NUMBER

SQL> select FILENAME from v$dnfs_files;

FILENAME
--------------------------------------------------------------------------------
/u01/racdisk/oradata/orcl/control01.ctl
/u01/racdisk/oradata/orcl/control02.ctl
/u01/racdisk/oradata/orcl/system01.dbf
/u01/racdisk/oradata/orcl/sysaux01.dbf
/u01/racdisk/oradata/orcl/undotbs01.dbf
/u01/racdisk/oradata/orcl/users01.dbf
/u01/racdisk/oradata/orcl/example01.dbf
/u01/racdisk/oradata/orcl/undotbs02.dbf
/u01/racdisk/oradata/orcl/temp01.dbf
/u01/racdisk/oradata/orcl/redo01.log
/u01/racdisk/oradata/orcl/redo02.log
/u01/racdisk/oradata/orcl/redo03.log
/u01/racdisk/oradata/orcl/redo04.log

13 rows selected.

Sollte die View v$dnfs_files keine Dateien zurückliefern und die AlertLog-Datei folgende Fehler beinhalten,
Direct NFS: NFS3ERR 1 Not owner. path 192.168.1.10 mntport 729 nfsport 2049

so kann es sein, dass die NFS-Shares in der Datei /etc/exports des NFS-Filers nicht korrekt konfiguriert sind. Die Ursache könnte sich darin begründen, dass sich der Client mit einem reservierten Port (>1024) am NFS-Filer anmeldet. Da der NFS-Treiber des Betriebsystems dieses mit dem Benutzer root durchführt, ist hier kein Problem zu erwarten. Der Direct NFS-Treiber von Oracle vollzieht dieses allerdings mit dem Benutzer Oracle und wird deshalb vom Filer abgewiesen. In der Regel tritt diese Problematik bei Open-Filern auf.

Zur Korrektur muss der Freigabe des Shares in der Datei /etc/exports die Option insecure hinzugefügt werden
/mnt/rac_nfs/oradata/oradata_share/               *(rw,sync,no_wdelay,insecure_locks,insecure,no_root_squash)

Nach Korrektur sollten nach einem erneuten Start der RAC-Instanzen folgende Einträge in der AlertLog-Datei zu finden sein, die eine erfolgreiche Verwendung von Direct-NFS signalisieren.

Wed Feb 01 17:05:54 2012
ALTER DATABASE MOUNT
This instance was first to mount
Direct NFS: channel id [0] path [192.168.1.10] to filer [192.168.1.10] via local [] is UP
Direct NFS: channel id [1] path [192.168.1.10] to filer [192.168.1.10] via local [] is UP
Successful mount of redo thread 1, with mount id 1301906802
Database mounted in Shared Mode (CLUSTER_DATABASE=TRUE)

Einen weiteren schönen Artikel über Direct-NFS finden Sie hier bei Ordix.
Das White Paper für Direct NFS ist hier bei Oracle zu finden.