linux:ds3400_sas_failover
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
linux:ds3400_sas_failover [2014/07/09 10:34] – [Luns im Host für Oracle ASM vorbereiten] gpipperr | linux:ds3400_sas_failover [2016/05/02 13:59] (aktuell) – [Bekannte Luns in OS anzeigen lassen] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== 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:// | ||
+ | |||
+ | ==== Die Notwendige Software ermitteln==== | ||
+ | |||
+ | Wie in der IBM Welt üblich, ist das Finden der Information, | ||
+ | |||
+ | === Schritt 1 - Kompatibilitäts Matrix einsehen ==== | ||
+ | |||
+ | * Firmware Version der DS3500 ermitteln, in meinen Fall: 07.36.32.00 | ||
+ | * {{: | ||
+ | * 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:// | ||
+ | |||
+ | Auf der Webseite : [[ http:// | ||
+ | |||
+ | |||
+ | 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: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | 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:// | ||
+ | |||
+ | Leider hier nur die Version 15.00 gefunden : [[ http:// | ||
+ | |||
+ | |||
+ | Evtl. helfen diese Seiten wieder etwas weiter | ||
+ | |||
+ | * [[http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | ==== 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: | ||
+ | - | ||
+ | - | ||
+ | - | ||
+ | | ||
+ | | ||
+ | | ||
+ | ===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: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===Luns den Servern zuordnen === | ||
+ | |||
+ | |||
+ | IBM DS Storage Manager starten: | ||
+ | |||
+ | |||
+ | |||
+ | A) Eine Host Gruppe für die beiden Cluster Knoten definieren | ||
+ | |||
+ | - {{: | ||
+ | - {{: | ||
+ | | ||
+ | | ||
+ | B) Die Hosts anlegen | ||
+ | |||
+ | Dazu muss die passende PORT ID bekannt des Hosts bekannt sein. | ||
+ | <code bash> | ||
+ | |||
+ | # 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: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Die Ports den Hosts zuordnen | ||
+ | |||
+ | - {{: | ||
+ | - {{: | ||
+ | - {{: | ||
+ | |||
+ | |||
+ | |||
+ | 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: | ||
+ | |||
+ | * {{: | ||
+ | * {{: | ||
+ | |||
+ | |||
+ | |||
+ | ===== Luns im Host für Oracle ASM vorbereiten ===== | ||
+ | |||
+ | === Bekannte Luns in OS anzeigen lassen === | ||
+ | |||
+ | <code bash> | ||
+ | # falls lsscsi nicht vorhanden: | ||
+ | yum install lsscsi | ||
+ | |||
+ | # SCSI Devices anzeigen lassen: | ||
+ | |||
+ | lsscsi -l | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Neu hinzugefügte Luns müssen aber zuerst neu erkannt werden. | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | echo "- - -" > / | ||
+ | echo "- - -" > / | ||
+ | |||
+ | lsscsi -i | ||
+ | |||
+ | </ | ||
+ | |||
+ | Die "- - -" => The three values stand for channel, SCSI target ID, and LUN. The dashes act as wildcards meaning " | ||
+ | |||
+ | |||
+ | |||
+ | === Welche Karte und Treiber === | ||
+ | |||
+ | Die IBM SAS Karte verwendet den LSISAS2008 Chip Satz: | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | [lspci | ||
+ | |||
+ | 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:// | ||
+ | |||
+ | Fehlermeldung: | ||
+ | |||
+ | |||
+ | === Driver === | ||
+ | |||
+ | Laut Matrix wird der Treiber 13.101.00.00 benötigt | ||
+ | |||
+ | Prüfen ob das Kernel Modul geladen ist (mpt2sas): | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | lsmod | grep mpt | ||
+ | |||
+ | mptctl | ||
+ | mptbase | ||
+ | mpt2sas | ||
+ | scsi_transport_sas | ||
+ | raid_class | ||
+ | |||
+ | modinfo mpt2sas | ||
+ | filename: | ||
+ | version: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === 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:// | ||
+ | |||
+ | Auf jeden Server im Cluster! | ||
+ | |||
+ | |||
+ | siehe auch => https:// | ||
+ | |||
+ | |||
+ | === RDAC für Multipath=== | ||
+ | |||
+ | Laut Matrix wird die Version 09.03.0C05.0652 or Later benötigt: | ||
+ | |||
+ | Download von: | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | Nicht getestet | ||
+ | |||
+ | |||
+ | |||
+ | === Was wird nun im OS daraus ? ==== | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | # übersicht: | ||
+ | cat / | ||
+ | |||
+ | # falls sg_map nicht vorhanden | ||
+ | yum install sg3_utils | ||
+ | |||
+ | #Übersicht | ||
+ | |||
+ | sg_map -x | ||
+ | |||
+ | </ | ||
+ | |||
+ | Erster Test: | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | # Platten Geometrie anzeigen, damit da ja doch keine interne oder bereits verwendete Platte ist! | ||
+ | |||
+ | fdisk / | ||
+ | |||
+ | |||
+ | # Mit dd 10G auf das Storage schreiben: | ||
+ | |||
+ | dd if=/ | ||
+ | |||
+ | # | ||
+ | hdparm -tT / | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Um später Fehler wie: "// | ||
+ | The kernel still uses the old table. The new table will be used at | ||
+ | the next reboot//" | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Ein Logical Volumen zu einem OS Multipath Device zuordnen ==== | ||
+ | |||
+ | **Storage** | ||
+ | |||
+ | Im Storage Manager ein Logical Drive aussuchen und Logical Drive ID auslesen: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | Diese ID kopieren, in diesen Beispiel: " | ||
+ | und alle ":" | ||
+ | |||
+ | |||
+ | |||
+ | **Host** | ||
+ | |||
+ | Auf dem Host mit " | ||
+ | |||
+ | <code bash> | ||
+ | multipath -l | grep -A 6 60080e5000370786000003b652ac33a5 | ||
+ | </ | ||
+ | |||
+ | Ergebnis: | ||
+ | {{: | ||
+ | |||
+ | Aus dem Ergebnis können wir herauslesen: | ||
+ | * Mapper Device **mpathf** verweist auf das Logical Drive **" | ||
+ | * 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: | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | # 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. | ||
+ | loaded on boot and what permissions it will have. The current values | ||
+ | will be shown in brackets (' | ||
+ | answer will keep that current value. | ||
+ | |||
+ | 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: | ||
+ | |||
+ | |||
+ | # Load | ||
+ | |||
+ | / | ||
+ | |||
+ | Loading module " | ||
+ | Mounting ASMlib driver filesystem: / | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===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, | ||
+ | - Als ASM disk registrieren / | ||
+ | - mit "/ | ||
+ | |||
+ | |||
+ | Falls etwas nicht stimmt, kann eine ASM Platte auch mit "dd if=/ | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | oracleasm deletedisk OCR_VOT_01 | ||
+ | |||
+ | Clearing disk header: failed | ||
+ | Unable to clear disk " | ||
+ | |||
+ | dd if=/ | ||
+ | |||
+ | 2+0 records in | ||
+ | 2+0 records out | ||
+ | 16384 bytes (16 kB) copied, 0.000345647 s, 47.4 MB/s | ||
+ | |||
+ | oracleasm scandisks | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | == Fehler: | ||
+ | |||
+ | Tritt beim Anlegen einer Partition der folgende Fehler auf: | ||
+ | |||
+ | "// | ||
+ | The kernel still uses the old table. The new table will be used at | ||
+ | the next reboot//" | ||
+ | |||
+ | |||
+ | A) Partitionstabellen mit partprobe einlesen | ||
+ | |||
+ | <code bash> | ||
+ | partprobe | ||
+ | </ | ||
+ | |||
+ | B) Device pointer mit **" | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | # Partition wurde mit Warning anlegen | ||
+ | |||
+ | fdisk / | ||
+ | |||
+ | # ( „n“, „p“, „1“, „Return“, | ||
+ | |||
+ | 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 / | ||
+ | .. / | ||
+ | |||
+ | ls -la /dev/dm-21 | ||
+ | | ||
+ | | ||
+ | #ASM Platte anlegen | ||
+ | oracleasm createdisk OCR_VOT_03 / | ||
+ | |||
+ | ls -la / | ||
+ | brw-rw---- 1 oracle dba 252, 21 Dec 15 19: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 " | ||
+ | |||
+ | <code bash> | ||
+ | oracleasm createdisk OCR_VOT_01 | ||
+ | |||
+ | Unable to open device "/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | A) Pürfen, ob die Platte nicht **/ | ||
+ | Muss immer die erste Partition auf der Platte sein! | ||
+ | |||
+ | B) Die Platte kann auch mit folgenden Befehl angelegt werden | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | / | ||
+ | |||
+ | </ | ||
+ | Dabei wird dann aber NICHT die Partition " | ||
+ | |||
+ | |||
+ | Bei Fehler auch immer das Logfile von ASM unter / | ||
+ | |||
+ | |||
+ | == Zweiten Knoten einbinden == | ||
+ | |||
+ | **Knoten 2 als root** | ||
+ | |||
+ | |||
+ | Nach dem Anlegen der Disk auf dem ersten Knoten auf dem zweiten Knoten die Platten einlesen: | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | / | ||
+ | |||
+ | Reloading disk partitions: done | ||
+ | Cleaning any stale ASM disks... | ||
+ | Scanning system for ASM disks... | ||
+ | |||
+ | / | ||
+ | |||
+ | </ | ||
+ | |||
+ | Werden nun die auf Knoten 1 erzeugten Platten (besonders die mti kpartx registrierten) nicht erkannt, hilft nur ein kpartx | ||
+ | |||
+ | |||
+ | |||
+ | ** 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 "/ | ||
+ | |||
+ | |||
+ | Nun ist es empfehlenswert, | ||
+ | |||
+ | |||
+ | ==== Erste Performance Messungen ======= | ||
+ | |||
+ | Test a) | ||
+ | |||
+ | 100G Dauerbetrieb auf eine SAS Lun/Logical Drive auf einem Disk Pool (Raid 6) über 41 Platten. | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | dd if=/ | ||
+ | |||
+ | 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 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Auswertung der Performance über das Storage(Background Performance Monitor): | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | 100G Dauerbetrieb auf eine SSD Lun/Logical Drive auf einem DISK Array (Raid 10) über 4 Platten. | ||
+ | <code bash> | ||
+ | |||
+ | 19:28 | ||
+ | |||
+ | dd if=/ | ||
+ | |||
+ | 100000+0 records in | ||
+ | 100000+0 records out | ||
+ | 104857600000 bytes (105 GB) copied, 434.208 s, 241 MB/s | ||
+ | |||
+ | |||
+ | ########################## | ||
+ | #Wieder einlesen | ||
+ | |||
+ | time dd if=/ | ||
+ | |||
+ | 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 | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Leider wurden in dem Background Performance Monitor keine Charts generiert. | ||
+ | |||
+ | |||
+ | Über die Datenbank: | ||
+ | |||
+ | <code sql> | ||
+ | CONN / AS SYSDBA | ||
+ | |||
+ | SET SERVEROUTPUT ON | ||
+ | DECLARE | ||
+ | l_latency | ||
+ | l_iops | ||
+ | l_mbps | ||
+ | BEGIN | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | DBMS_OUTPUT.put_line(' | ||
+ | DBMS_OUTPUT.put_line(' | ||
+ | DBMS_OUTPUT.put_line(' | ||
+ | END; | ||
+ | / | ||
+ | |||
+ | Max IOPS = 24826 | ||
+ | Max MBPS = 1134 | ||
+ | Latency | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | Übersicht bei diesem Lauf: | ||
+ | |||
+ | {{ : | ||
+ | {{ : | ||
+ | |||
+ | |||
+ | Mehr zu DBMS_RESOURCE_MANAGER.calibrate_io und Oracle I/O Performance siehe auch: | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
linux/ds3400_sas_failover.txt · Zuletzt geändert: 2016/05/02 13:59 von gpipperr