ASM FILTER DRIVER

02.
Mai
2018
Veröffentlicht von: Kurt Sauer

Mit der Grid Infrastructure Version 12c R1 ist der ASM Filter Driver (ASMFD) als Nachfolger von ASMLib eingeführt worden.

Der vorliegende Monatstipp beinhaltet die grundsätzliche Funktionalität von ASMFD sowie dessen Abgrenzung zu ASMLib. Weiterhin werden die Schritte bei der Installation der Grid Infrastracture Software zur Erzeugung des ASMFD sowie die Migration von ASMlib zu ASMFD in der Grid Infrastructure Version 12.2.0.1  beschrieben.

Funktionalität ASM FILTER DRIVER

Der ASMFD dient ebenso wie ASMLib der eindeutigen Kennzeichnung einer Platte im Real Application Clusters (RAC) Umfeld.
Das ASMFD Kernel Modul beschreibt den Header der Platte mit einem Label, der automatisch beim Starten des Cluster-Systems erkannt wird. So wird das Problem der wechselnden Zuordnung von Platte und logischer Device-Adresse nach einem System-Reboot verhindert.
Im Gegensatz zu ASMLib ist ASMFD integraler Bestandteil der Grid Infrastructure und nicht wie ASMLib Bestandteil der Linux Distribution. Bei ASMLib muss erst die zum Linux Kernel passende ASMLib Version installiert werden. Der ASMFD beschränkt sich mittlerweile nicht nur auf Linux Betriebssysteme, sondern ist z. B. auch unter Solaris installierbar.
Ein großer Vorteil von ASMFD ist der Schutz vor versehentlichem Überschreiben. Im Zuge der Installation eines RAC überschneiden sich oftmals die Tätigkeiten von Storage-Administration und Datenbank-Administration. So ist es häufiger vorgekommen, dass ein Storage-Administrator die Platten (LUNs) eines Datenbank-Administrators überschrieben hat.
Mit dem ASMFD Kernel Modul werden alle Nicht-Oracle Schreibbefehle abgelehnt:

[grid@server1:~]>asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
DATA01                      ENABLED   /dev/sdv1
RECO01                      ENABLED   /dev/sdn1
RECO02                      ENABLED   /dev/sdp1
RECO03                      ENABLED   /dev/sds1

[root@server1:~]>dd if=/dev/zero of=/dev/sdv1 count=100 oflag=direct
dd: writing to `/dev/sdv1': Input/output error
1+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000322502 s, 0.0 kB/s


Zum Vergleich dazu ASMLib:

[root@server2~]>/etc/init.d/oracleasm listdisks | xargs /etc/init.d/oracleasm querydisk -p
Disk "DATA01" is a valid ASM disk
/dev/sdp1: LABEL="DATA01" TYPE="oracleasm"
Disk "RECO01" is a valid ASM disk
/dev/sdq1: LABEL="RECO01" TYPE="oracleasm"
Disk "REC02" is a valid ASM disk
/dev/sdo1: LABEL="RECO02" TYPE="oracleasm"
Disk "REC03" is a valid ASM disk
/dev/sdc1: LABEL="RECO03" TYPE="oracleasm"

[root@server2~]>:/home/grid]>dd if=/dev/zero of=/dev/sdp1 count=100 oflag=direct
100+0 Datensätze ein
100+0 Datensätze aus
51200 Bytes (51 kB) kopiert, 0,0631208 s, 811 kB/s


Der Versuch, die zugehörige Diskgruppe zu mounten (bei ASMLib):

SYS@+ASM1> alter diskgroup data mount;
alter diskgroup data mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15040: diskgroup is incomplete
ORA-15042: ASM disk "1" is missing from group number "1"

Weiterhin gibt Oracle als Vorteil von ASMFD die effizientere Verwaltung von File Deskriptoren an. So können sich mehrere Oracle Prozesse die gleichen File Deskriptoren teilen und infolgedessen System-Ressourcen einsparen.


Installation von ASM FILTER DRIVER

Was ist bei der Installation von ASMFD im Rahmen der Grid Infrastructure-Installation zu beachten?
Zunächst ist es empfehlenswert, in der Zertifizierungsmatrix unter MOS ID 2034681.1 Öffnet externen Link in neuem FensterASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix) nachzuschauen, ob das Betriebssystem, unter dem die Installation durchgeführt wird, die entsprechende Kernel-Version besitzt.
Weiterhin ist zu beachten, dass zunächst die Platten (LUNs) für OCR, Voting Disks und die Grid Infrastructure Repository Datenbank, die Rechte analog zum Installations-User (grid/oracle) erhalten.
Erreichen kann man das über die sogenannte „udev“-Konfiguration. Im Bespiel wird von einem ISCSI ohne „Multipathing“ ausgegangen.

Aus Vereinfachungsgründen ist die „udev“-Konfiguration für eine LUN angegeben:

Ermitteln SCSI ID:

[root@server1~]# scsi_id -g -u -d /dev/sdj
36019cb31026c1e5bf264650783014087

 

Erstellen “udev”-Rule:

#  /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sdj*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk",
ENV{ID_SERIAL}=="36019cb31026c1e5bf264650783014087", OWNER="grid", GROUP="asmadmin", MODE="0660"

 

Rule Laden:

[root@server1 ~]# udevadm control --reload-rules

Bei der Installation von Grid Infrastructure erscheint die Platte als Candidate-LUN:

Beim Anklicken von "Oracle ASM Filter Treiber konfigurieren" erfolgt automatisch auch die Installation des ASMFD Kernel Moduls und das Labeling der ausgewählten LUN.

 

Bei meiner Installation (Grid Infrastructure Standalone) wurde im nächsten Schritt die etwas verwirrende Fehlermeldung ausgegeben:

Ursache waren installierte ASMLib RPM-Packages, nach deren Deinstallation lief die Installation ohne Probleme zu Ende.


Wie ist nun die Platte konfiguriert?
Ein Blick in die ASM-Instanz:


SQL> select name,state,header_status header,mount_status mount,path, library
          from gv$asm_disk
          order by inst_id,group_number,name;

NAME       STATE    HEADER       MOUNT   PATH                 LIBRARY
---------- -------- ------------ ------- -------------------- ---------------------------------------------
DATA1      NORMAL   MEMBER  CACHED  AFD:DATA1      AFD Library - Generic , version 3 (KABI_V3)


Auf welchem Wert steht der Wert für "ASM_DISKSTRING"?

SQL> select name,value from v$parameter where name='asm_diskstring';
NAME                 VALUE
-------------------- --------------------
asm_diskstring       AFD:*


Ist das Kernel-Modul für ASMFD geladen?

[grid@s-sl-rac06c:~]>asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 's-sl-rac06c'


Die Plattenadressen befinden sich im Directory /dev/oracleafd/disks:

cat /dev/oracleafd/disks/DATA01
/dev/sdj1

Im Anschluß können dann alle weiteren LUNS (ohne vorherige udev-Konfiguration) mit asmca oder asmcmd eingerichtet werden:

Beispiel:

[root@server1:~]>asmcmd afd_label REC001 /dev/sdn1


Überprüfung:

[grid@server1:~]>asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
DATA01                      ENABLED   /dev/sdj1
RECO01                      ENABLED   /dev/sdn1


Migration von ASMLIB nach ASM FILTER DRIVER

Nachdem ich vor einigen Jahren große Probleme bei der Migration von ASMLib nach ASMFD unter Grid Infrastructure 12.1.0.2 hatte und in MOS nicht allzu viel zu ASMFD dokumentiert war, wollte ich testen, inwieweit die Vorgehensweise in der MOS-Note 2172754.1 Öffnet externen Link in neuem FensterASMFD : How to Migrate ASM Diskgroups from ASMLIB to ASMFD (ASM Filter Driver) on Oracle Grid Infrastructure (RAC) zutreffend ist.

Bei meiner Installation (2 Knoten-RAC mit Grid Infrastructure 12.2.0.1 unter Oracle Enterprise Linux 6.5 Kernel 3.8.13-16.2.1.el6uek.x86_64 ISCSI ohne „Multipathing“) waren auf allen Knoten folgende Tätigkeiten durchzuführen:


Ermittlung aktueller "ASM_DISKSTRING":

[grid@server1:~]>asmcmd dsget
parameter:ORCL:*
profile:ORCL:*


Setzen “ASM_DISKSTRING” für ASMFD:

[grid@server1:~]>asmcmd dsset 'ORCL:*','AFD:*' 


Stoppen Grid Infrastructure:

[root@server1:~]>crsctl stop crs


Enfernen ASMLib-Konfiguration:

[root@server1:~]>oracleasm exit
Unmounting ASMlib driver filesystem: /dev/oracleasm
Unloading module "oracleasm": oracleasm
 
[root@server1:~]>rpm -qa |grep asm
oracleasm-support-2.1.8-1.el6.x86_64
oracleasmlib-2.0.4-1.el6.x86_64
 
[root@server1~]>rpm -e oracleasm-support-2.1.8-1.el6.x86_64
Warnung: /etc/sysconfig/oracleasm als /etc/sysconfig/oracleasm.rpmsave gesichert
[root@server1:~]>rpm -e oracleasmlib-2.0.4-1.el6.x86_64


ASMFD Kernel-Modul laden:

[root@server1:~]>asmcmd afd_configure
AFD-627: AFD distribution files found.
AFD-634: Removing previous AFD installation.
AFD-635: Previous AFD components successfully removed.
AFD-636: Installing requested AFD software.
AFD-637: Loading installed AFD drivers.
AFD-9321: Creating udev for AFD.
AFD-9323: Creating module dependencies - this may take some time.
AFD-9154: Loading 'oracleafd.ko' driver.
AFD-649: Verifying AFD devices.
AFD-9156: Detecting control device '/dev/oracleafd/admin'.
AFD-638: AFD installation correctness verified.
Modifying resource dependencies - this may take some time.


Überprüfung des Kernel-Moduls:

[root@server1:~]>asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'server1'


Überprüfung Platten nicht erfolgreich:

[grid@server1:~]>asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
(..)

Dieser Fehler konnte mit Hilfe der MOS-ID Öffnet externen Link in neuem Fenster2308860.1 behoben werden.
Es muss der " ASM_DISKSTRING " in /etc/oracleafd.conf geändert werden:

[root@server1:~]> cat /etc/oracleafd.conf
#afd_diskstring='ORCL:*'
afd_diskstring='/dev/sd*'


Anschließend nochmals ein neuer SCAN-Vorgang:

[root@server1:~]>asmcmd afd_scan


Überprüfung der Platten:

[grid@server1:~]>asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ASM_DISK1                   ENABLED   /dev/sdf1
ASM_DISK2                   ENABLED   /dev/sdr1
ASM_DISK3                   ENABLED   /dev/sdv1
ASM_DISK4                   ENABLED   /dev/sdh1
ASM_DISK5                   ENABLED   /dev/sdp1
ASM_DISK6                   ENABLED   /dev/sdk1
OCRVOTE1                    ENABLED   /dev/sdn1
OCRVOTE2                    ENABLED   /dev/sdq1
OCRVOTE3                    ENABLED   /dev/sdj1


Starten der Clustersoftware:

[root@server1:~]>crsctl start crs


Setzen des ASM-Diskstrings auf ASMFD:

[grid@server1:~]>asmcmd dsset 'AFD:*'


Anpassen Linux Run Level:

Bei meiner Migration auf ASMFD musste noch der RUN-Level aktiviert werden, aus dem das ASMFD Kernel Modul gestartet wird.

[root@server1:~]>chkconfig --add afd


Fazit

Aus Sicherheitsgründen ist es empfehlenswert, den ASM Filter Treiber zu installieren bzw. die Migration darauf durchzuführen. Sowohl Installation als auch Migration waren unter der Grid Infrastructure 12.2.0.1 einfach zu erledigen. 

Etwas umständlich ist die Vorbereitung der OCR/VD-Platte(n) mit „udev“ vor der Installation.

Im Vergleich zur Einführung des ASMFD in der Version Oracle 12c R1 sind mittlerweile viele Einträge in der Oracle Knowledge Base zu finden, die bei Problemen weiterhelfen.

Wenn Sie detaillierte Informationen oder eine Beratung zu den Features von Real Application Clusters 12c benötigen, können Sie sich gerne an uns wenden.

DBA RAC ASM

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.