===== IBM DS3500 Storage im Einsatz mit SAS Karten für ein Oracle RAC 11g Cluster ===== ==== Voraussetzung ==== DS3500 ist verkabelt, IP Adresse vergeben, IBM DS Storage Manager kann auf beide Köpfe zugreifen. Siehe auch [[http://www.redbooks.ibm.com/redbooks/pdfs/sg247914.pdf | Redbook für die DS3500]] ==== Die Notwendige Software ermitteln==== Wie in der IBM Welt üblich, ist das Finden der Information, welche notwendigen Software mit welcher Version verwendet werden soll, eine etwas mühselige Aufgabe. === Schritt 1 - Kompatibilitäts Matrix einsehen ==== * Firmware Version der DS3500 ermitteln, in meinen Fall: 07.36.32.00 * {{:linux:ds3500:ds3500-get-firmeware-version_01.png?300|}} * SAS Karte Version ermitteln, in meinen Fall die 46M0907 ( IBM HBA/LSI onboard 6 Gigbit SAS ) * Um den verbauten Kartentyp zu ermitteln auf der Managment Console der Server anmelden " .. The IMM is set initially with a user name of USERID and password ofPASSW0RD (with a zero, not the letter O) as dfault ... siehe Doku hier [[http://download.boulder.ibm.com/ibmdl/pub/systems/support/system_x_pdf/47c9202.pdf | IBM Integrated Management Module ]] " und leider dort nichts darüber finden, daher über das OS "lspci -v | grep SAS" Auf der Webseite : [[ http://www-03.ibm.com/systems/support/storage/ssic/interoperability.wss|IBM System Storage Interoperation Center (SSIC))]] die Komponenten für das gewählte Betriebssystem auf dem Servern auswählen und die Suche starten, dabei zuerst die DS3500 unter Storage Model suchen und dann die Karte 46M0907 auswählen, dann die Linux Version, ganz unten "submit" wählen. Auf der nächsten Seite über Show Details die passende Excel Datei suchen und laden ( müsste die Version des Storage Kopfes im Namen enthalten wie 2EMD_SSIC_Addendum_07.86.xls". Den passenden Reiter für das OS auswählen: {{ :linux:ds3500:ds3500_emd_ssic_addendum_07.86_v01.png?500 | Übersicht über die Zertifizierung}} Wir können also für die Umgebung den OS Device Mapper verwenden und benötigen die min. Version 13.0 für den Karten Treiber. Diesen finden wir evtl. hier [[ http://www-947.ibm.com/support/entry/portal/search_results/system_x_hardware_options/sas~sata_controller/host_bus_adapter/46m0907_-_ibm_6gb_sas_hba?sn=spe&q=driver&filter=language:en&productContext=59455091#q=IBM%20HBA/LSI%20Onboard%206Gb%20SAS/SATA/SSD%20Driver%20for%20Red%20Hat%20Enterprise%20Linux%206&filter=language:en&spew=false | Support und Downloads ]]. Leider hier nur die Version 15.00 gefunden : [[ http://www-947.ibm.com/support/entry/portal/docdisplay?lndocid=MIGR-5093748 | IBM HBA or LSI Onboard 6 Gb SAS/SATA/SSD Driver update 15.00.00.00 for Red Hat Enterprise Linux 6 (RHEL6) ]] Evtl. helfen diese Seiten wieder etwas weiter * [[http://www-947.ibm.com/support/entry/portal/product/system_x_hardware_options/sas~sata_controller/host_bus_adapter/46m0907_-_ibm_6gb_sas_hba?productContext=59455091| SAS/SATA Controller / Host Bus Adapter / 46M0907 ]] * http://www-933.ibm.com/support/fixcentral/swg/selectFixes?parent=Entry-level+disk+systems&product=ibm/Storage_Disk/DS3500&release=All&platform=All&function=all ==== Storage konfigurieren ==== Vorüberlegung: * Uns stehen 44 * 300GB SAS Platten und 4 * 200GB SSD's zur Verfügung * Die SAS Platten werden in einen Disk Pool zusammengefasst (SSD wird in Disk Pool nicht unterstützt) * Die Platten in einen Disk Pool werden als Raid 6 zusammengefasst und die Daten über alle Platten verteilt * Die SSD Platten werden als RAID 10 zusammengefasst === Plattenplatz einteilen === IBM DS Storage Manager starten: ===Storage Subsystems anlegen=== Ein Storage Subystem anlegen (Wizard dazu verwenden). ===Auf dem Subsystem den Disk Pool erzeugen=== * 10% Spare einplanen (3 Platten stehen dann als Reserve zur Verfügung) * Entsprechend die Warning und Critical Thresold anpassen, damit keine Wartung generiert wird * Damit werden 10 Logical Drives a 796 GB netto erzeugt, die für die Datenplatten zur Verfügung stehen * Nach dem Anlegen kann mit Rename ein einheitlicher Name vergeben werden (wie ora_dg2_disk01 usw...) Ablauf: - {{:linux:ds3500:ds3500_storage_definieren_disk_pool_v01.png?300|Menü aufrufen }} - {{:linux:ds3500:ds3500_storage_definieren_disk_pool_v02.png?300|Pool erstellen }} - {{:linux:ds3500:ds3500_storage_definieren_disk_pool_v03.png?300|Spare und Lun Anzahl definieren}} ===Array für die SSD mit Raid 1 anlegen=== - Logical Drives für den Cluster Stack und tmp/undo Tablespace + Redo Logs anlegen - RAID 1 Level auswählen Tipp: erst die kleine Platten anlegen und dann den restlichen freien Platz durch zwei Teilen damit es auch vollständig aufgeht. Logical Drive zu einem Array hinzufügen: {{:linux:ds3500:ds3500_storage_add_logical_drive_array_v01.png?300| Logical Drive hinzufügen}} {{:linux:ds3500:ds3500_storage_add_logical_drive_array_v02.png?300| Logical Drive definieren}} ===Luns den Servern zuordnen === IBM DS Storage Manager starten: A) Eine Host Gruppe für die beiden Cluster Knoten definieren - {{:linux:ds3500:ds3500_storage_host_mapping_v01.png?300| Host Gruppe erzeugen}} - {{:linux:ds3500:ds3500_storage_host_mapping_v02.png?300| Host Gruppe definieren}} B) Die Hosts anlegen Dazu muss die passende PORT ID bekannt des Hosts bekannt sein. # bei Bedarf installieren yum install sysfsutils systool -c sas_host -v systool -c scsi_host -v # ID's filteren systool -c scsi_host -v | grep host_sas_address Ergebniss: {{:linux:ds3500:ds3500_storage_host_mapping_v04.png?400| SAS Host mapping IDs erkennen}} Die Ports den Hosts zuordnen - {{:linux:ds3500:ds3500_storage_host_mapping_v03.png?300| Hostname vergeben}} - {{:linux:ds3500:ds3500_storage_host_mapping_v05.png?300| ID's zuordenen}} - {{:linux:ds3500:ds3500_storage_host_mapping_v06.png?300| Betriebsystem auswählen}} C) Luns vergeben - Mapping erstellen Da es sich hier um ein Cluster handelt werden alle Platten der Host Gruppe zugewiesen. Storage Luns der Host Gruppe zuweisen: * {{:linux:ds3500:ds3500_storage_host_lun_map_v01.png?400| Eine Lun zuweisen}} * {{:linux:ds3500:ds3500_storage_host_lun_map_v02.png?400| Übersicht über die Luns}} ===== Luns im Host für Oracle ASM vorbereiten ===== === Bekannte Luns in OS anzeigen lassen === # falls lsscsi nicht vorhanden: yum install lsscsi # SCSI Devices anzeigen lassen: lsscsi -l Neu hinzugefügte Luns müssen aber zuerst neu erkannt werden. echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/scsi_host/host1/scan lsscsi -i Die "- - -" => The three values stand for channel, SCSI target ID, and LUN. The dashes act as wildcards meaning "rescan everything" === Welche Karte und Treiber === Die IBM SAS Karte verwendet den LSISAS2008 Chip Satz: [lspci | grep SAS2008 11:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03) 20:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03) Für die IBM SAS Karte auf Basis des LSI Modules bietet sich der Einsatz von LSIUitl an ( http://www.lsi.com/downloads/Public/Obsolete/Obsolete%20Common%20Files/LSIUtil_1.62.zip) an. Fehlermeldung: "0 MPT Ports found" -> d.h. wohl das der MPT Treiber noch nicht aktiviert ist. === Driver === Laut Matrix wird der Treiber 13.101.00.00 benötigt Prüfen ob das Kernel Modul geladen ist (mpt2sas): lsmod | grep mpt mptctl 97678 0 mptbase 99360 1 mptctl mpt2sas 257510 0 scsi_transport_sas 34071 1 mpt2sas raid_class 4330 1 mpt2sas modinfo mpt2sas filename: /lib/modules/3.8.13-16.2.1.el6uek.x86_64/kernel/drivers/scsi/mpt2sas/mpt2sas.ko version: 17.00.00.00 === Device Mapper Multipath über das OS === Tools installieren: # Tools installiern falls noch nicht da yum install device-mapper-multipath # einfache default konfiguration starten # Multipath daemon wird gestartet mpathconf --enable --with_multipathd y # check status multipath -l #check autostart chkconfig | grep mul # Refresh map by any change multipath -r Für die parameter in der multipath.con siehe auch => https://help.ubuntu.com/12.04/serverguide/multipath-dm-multipath-config-file.html Auf jeden Server im Cluster! siehe auch => https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/DM_Multipath/mpio_setup.html === RDAC für Multipath=== Laut Matrix wird die Version 09.03.0C05.0652 or Later benötigt: Download von: * http://support.netapp.com/NOW/public/apbu/oemcp/ * http://support.netapp.com/NOW/public/apbu/oemcp/09.03.0C05.0652/ Nicht getestet === Was wird nun im OS daraus ? ==== # übersicht: cat /proc/partitions # falls sg_map nicht vorhanden yum install sg3_utils #Übersicht sg_map -x Erster Test: # Platten Geometrie anzeigen, damit da ja doch keine interne oder bereits verwendete Platte ist! fdisk /dev/mapper/mpathd # Mit dd 10G auf das Storage schreiben: dd if=/dev/zero of=/dev/mapper/mpathd bs=1M count=10000 # hdparm -tT /dev/mapper/mpathd Um später Fehler wie: "//WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot//" beim Formatieren für das Anlegen der ASM Platten zu vermeiden, ist ein reboot der Server empfehlenswert. ===== Ein Logical Volumen zu einem OS Multipath Device zuordnen ==== **Storage** Im Storage Manager ein Logical Drive aussuchen und Logical Drive ID auslesen: {{:linux:ds3500:ds3500_logical_drive_to_multipath_device_v01.png?600|Logical Drive ID ermitteln}} Diese ID kopieren, in diesen Beispiel: "60:08:0e:50:00:37:07:86:00:00:03:b6:52:ac:33:a5" und alle ":" entfernen um mit diesen String auf dem Host zu suchen. **Host** Auf dem Host mit "multipath"* den Device Mapper abfragen: multipath -l | grep -A 6 60080e5000370786000003b652ac33a5 Ergebnis: {{:linux:ds3500:ds3500_logical_drive_to_multipath_device_v02.png?600|Mapping zwischen den ID's}} Aus dem Ergebnis können wir herauslesen: * Mapper Device **mpathf** verweist auf das Logical Drive **"ora_dg2_disk01"** mit der ID "60:08:0e:50:00:37:07:86:00:00:03:b6:52:ac:33:a5" * Mapper Device** mpathf** linkt auf das** dm-6** Devices * **dm-6** besteht aus den beiden physikalischen Devices **sdv** und **sdf** ==== ASM Platten definieren ==== ===Oracle Linux 6 ASM Lib konfigurieren=== Als User Root auf allen Knoten: # install library yum install oracleasm yum install oracleasm-support # Configure oracleasm configure -i Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: y Writing Oracle ASM library driver configuration: done # Load /usr/sbin/oracleasm init Loading module "oracleasm": oracleasm Mounting ASMlib driver filesystem: /dev/oracleasm ===ASM Platten einbinden=== **Knoten 1 als root** Mit der Information welche Logical Driver zu einem mpath Device gehört können wir nun unsere ASM Platten auf dem ersten Knoten erzeugen: - Das richtige Mapper Device zum Logical Drive suchen - Partitionieren, fdisk /dev/mapper/mpathf ( "n", "p", "1", "Return", "Return", "p" and "w". ) - Als ASM disk registrieren /usr/sbin/oracleasm createdisk DG_A_01 /dev/mapper/mpathfp1 - mit "/usr/sbin/oracleasm listdisks" das Ergebniss pürfen Falls etwas nicht stimmt, kann eine ASM Platte auch mit "dd if=/dev/zero of=/dev/dm-x bs=8192 count=2" wieder "gelöscht" werden. oracleasm deletedisk OCR_VOT_01 Clearing disk header: failed Unable to clear disk "OCR_VOT_01" dd if=/dev/zero of=/dev/dm-18 bs=8192 count=2 2+0 records in 2+0 records out 16384 bytes (16 kB) copied, 0.000345647 s, 47.4 MB/s oracleasm scandisks == Fehler: Re-reading the partition table failed with error 22 == Tritt beim Anlegen einer Partition der folgende Fehler auf: "//WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot//" A) Partitionstabellen mit partprobe einlesen partprobe B) Device pointer mit **"kpartx"** anlegen # Partition wurde mit Warning anlegen fdisk /dev/mapper/mpathc # ( „n“, „p“, „1“, „Return“, „Return“, „p“ and „w“. ) WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) #anschauen: kpartx -l /dev/dm-3 mpathcp1 : 0 8385867 /dev/dm-3 63 #anlegen: kpartx -a -v /dev/dm-3 add map mpathcp1 (252:21): 0 8385867 linear /dev/dm-3 63 #test im OS ls -la /dev/mapper/mpathcp1 .. /dev/mapper/mpathcp1 -> ../dm-21 ls -la /dev/dm-21 brw-rw---- 1 root disk 252, 21 Dec 15 19:03 /dev/dm-21 #ASM Platte anlegen oracleasm createdisk OCR_VOT_03 /dev/mapper/mpathcp1 ls -la /dev/oracleasm/disks/OCR_VOT_03 brw-rw---- 1 oracle dba 252, 21 Dec 15 19:03 /dev/oracleasm/disks/OCR_VOT_03 Beim Test auf die Minor,Minor Device Id's achten (in unsere Fall die (252, 21) ), damit lassen sich die Devices wieder zusammen suchen. == Fehler: Tritt der Fehler "Device or resource busy" auf == oracleasm createdisk OCR_VOT_01 /dev/dm-18 Unable to open device "/dev/mapper/mpathr": Device or resource busy A) Pürfen, ob die Platte nicht **/dev/mapper/mpathrp1** heißen muss! Muss immer die erste Partition auf der Platte sein! B) Die Platte kann auch mit folgenden Befehl angelegt werden /usr/sbin/asmtool -C -l /dev/oracleasm -n OCR_VOT_01 -s /dev/mapper/mpathr -a force=yes Dabei wird dann aber NICHT die Partition "mpathrp1" verwendet, sondern die vollständige Platte "mpathr" eingebunden. Bei Fehler auch immer das Logfile von ASM unter /var/log/oracleasm auswerten! == Zweiten Knoten einbinden == **Knoten 2 als root** Nach dem Anlegen der Disk auf dem ersten Knoten auf dem zweiten Knoten die Platten einlesen: /usr/sbin/oracleasm scandisks Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... /usr/sbin/oracleasm listdisks Werden nun die auf Knoten 1 erzeugten Platten (besonders die mti kpartx registrierten) nicht erkannt, hilft nur ein kpartx -a -v auch auf den zweiten Server um einen Boot zu vermeiden. ** Auf jeden Knoten als root** Nach dieser Zuordnung aller Platten darauf achten, dass beim nächsten Boot die ASM Lib auch wirklich das Mapper device verwendet. Dazu den Disk Such Pfad in "/etc/sysconfig/oracleasm" anpassen auf " ORACLEASM_SCANORDER="mpath" und ORACLEASM_SCANEXCLUDE="sd" (damit nur die Mapping Devices gefunden werden!) " Nun ist es empfehlenswert, das System neu zu booten um zu testen ob alles auch richtig erkannt wird. ==== Erste Performance Messungen ======= Test a) 100G Dauerbetrieb auf eine SAS Lun/Logical Drive auf einem Disk Pool (Raid 6) über 41 Platten. dd if=/dev/zero of=/dev/mapper/mpatho bs=1M count=100000 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB) copied, 419.792 s, 250 MB/s ########################## #Wieder einlesen 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB) copied, 284.36 s, 369 MB/s real 4m44.365s user 0m0.075s sys 1m28.012s Auswertung der Performance über das Storage(Background Performance Monitor): {{ :linux:ds3500:ds3500_current_mbs_sec_sas_v01.png?300 | MBs/s }} {{ :linux:ds3500:ds3500_current_io_sec_sas_v01.png?300 | IO/s}} 100G Dauerbetrieb auf eine SSD Lun/Logical Drive auf einem DISK Array (Raid 10) über 4 Platten. 19:28 dd if=/dev/zero of=/dev/mapper/mpathe bs=1M count=100000 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB) copied, 434.208 s, 241 MB/s ########################## #Wieder einlesen time dd if=/dev/mapper/mpathe of=/dev/null bs=1M 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB) copied, 266.207 s, 394 MB/s real 4m26.209s user 0m0.059s sys 1m26.988s Leider wurden in dem Background Performance Monitor keine Charts generiert. Über die Datenbank: CONN / AS SYSDBA SET SERVEROUTPUT ON DECLARE l_latency PLS_INTEGER; l_iops PLS_INTEGER; l_mbps PLS_INTEGER; BEGIN DBMS_RESOURCE_MANAGER.calibrate_io (num_physical_disks => 45, max_latency => 10, max_iops => l_iops, max_mbps => l_mbps, actual_latency => l_latency); DBMS_OUTPUT.put_line('Max IOPS = ' || l_iops); DBMS_OUTPUT.put_line('Max MBPS = ' || l_mbps); DBMS_OUTPUT.put_line('Latency = ' || l_latency); END; / Max IOPS = 24826 Max MBPS = 1134 Latency = 5 Übersicht bei diesem Lauf: {{ :linux:ds3500:ds3500_current_io_sec_sas_v02.png?300 | Test Lauf mit DBMS_RESOURCE_MANAGER.calibrate_io über alle Platten}} {{ :linux:ds3500:ds3500_current_io_sec_sas_v03.png?300 | Test Lauf mit DBMS_RESOURCE_MANAGER.calibrate_io zweiter Teil}} Mehr zu DBMS_RESOURCE_MANAGER.calibrate_io und Oracle I/O Performance siehe auch: * http://www.oracle-base.com/articles/misc/measuring-storage-performance-for-oracle-systems.php * http://www.dba-oracle.com/disk_i_o_speed_comparison.htm