FibreChannel Target unter Solaris 11

Solaris ist ein wirklich gutes Enterprise System welches super stabil läuft. Jedoch muss man sich erst an die Konfiguration gewöhnen. Das System bietet aber die super Möglichkeit ein einen Server als FC-Target laufen zu lassen. Ein FC-Target ist dabei der Anbieter von Speicher. In Kombination mit Multipath kann man damit ein schnelles ausfallsicheres Storagesystem erstellen. Durch ZFS ( wie ich finde eines der besten Dateisysteme ) ist dieses Storage in meinen Augen gleichwertig mit vielen teuren Lösungen. Wer die shell nicht scheut kann sich so ein sehr preiswertes System aufbauen.

Ich finde ja das einige Storageanbieter die Preisschraube doch etwas zu heftig einsetzen. Ich habe wie hier beschrieben mehere Systeme im Rechenzentrum bei uns im Einsatz und die Installation hat nur ca. 1 Stunde gedauert. Die Server stellen Speicher für einen großen VMWARE-Cluster und mehrere Hosts zur Verfügung. Bis heute mehr als stabiel und schön schnell.

Als erstes muss man sich für eine Solaris Version entscheiden. Leider gibt es opensolaris nicht mehr wirklich aktuell und die Express Versionen sind von Oracle eingestampft. Daher kann man openindiana nehmen. Dies wird übrigens in leicht veränderter Form auch bei vielen kommerziellen Storageanbietern genutzt. Zum testen könnt ihr jedoch auch direkt Solaris 11 von Oracle nehmen.

Meine Konfiguration besteht aus:

Supermicro SC846 24 Einschubgehäuse mit SAS Anschluss und SAS Expander

1-2 Emulex FC Enterprise Adapter. Ich Verwende immer gerne den LPe11002 dieser läuft sehr gut und ist schon sehr Preiswert bei Ebay zu bekommen. Man kann jedoch auch Qlogic Adapter nehmen. Dies habe ich persönlich aber noch nicht gemacht. Die Kompatibilität zu COMSTAR muss gegeben sein. Dies ist das System welches unseren FC Adapter zu einen Target macht.

LSI M1015 Raidcontroller im IT Modus ( Ist für ZFS ideal sowas und als IBM Version die man umflashen kann sehr preiswert bei Ebay zu bekommen )

Supermirco X8DT3-LN4F (schönes Mainboard mit IPMI Schnittstelle und 4 Lanbuchsen. Damit kann man dann auch mal ISCSI schön anbieten ) Auch mit Onboardraid welches man nehmen kann da auch IT Modues unterstützt wird.

48 GB Ram und eine Intel 5620 CPU. Dazu dann noch 2 SSD Platten a 30 GB für das System und nochmal 2 x 256GB M4 Cruacial SSD’s als cacheplatten. Als Tipp bitte bei RAM-Speicher nicht geizen. Und als 2ter Tipp mehr RAM. Es gibt nicht besseres als ordentlich Speicher bei ZFS. Dann haben wir noch 24 TB Raidplatten von WD genommen. Macht euch selbst die Freude und investiert die Paar mehr Euro in eine Raidedition. Diese Platten beherrschen ein paar sinnvolle Optionen die Consumer Platten nicht besitzen, ausserdem sind diese für den Dauereinsatz zugelassen. Bei den Setup hier reichen SATA Platten da diese nur an einen Raidcontroller angeschlossen werden. Ich habe auch Systeme mit 2 Raidcontrollern im Einsatz nur muss hier auf SAS Platten gesetzt werden um 2 Pfade aufbauen zu können. Dies kann halt SATA nicht!!! Ok lasst uns loslegen…

Wichtig: Bitte beim Einsatz von ZFS niemals einen Raidcontroller nehmen und ein Raid darauf einrichten!!! ZFS ist optimiert selber sog. RAIDZ einzurichten und zu betreuen. Durch den Einsatz des Raidcontrollers gehen viele sehr nette Funktionen nicht mehr richtig.

Als erstes installieren wir also Solaris, dabei konfigurieren wir gleich das Netzwerk mit. Bei der installation kann man leider kein (Software) Raid einrichten. Dies muss danach erfolgen. Ich verwende immer ssd Platten da wir wenig Speicherplatz benötigen und wir dort keine beweglichen Teile haben. Das System wird immer auf einen Pool namens rpool installiert. Diesen rpool kann man sehr einfach in ein Raid umwandeln siehe:

http://docs.oracle.com/cd/E19963-01/html/821-1448/gjtuk.html oder http://constantin.glez.de/blog/2011/03/how-set-zfs-root-pool-mirror-oracle-solaris-11-express

Nun ist das System ausfallsicher. Bitte achtet darauf immer den Grub ( Bootloader ) auch auf die 2te Platte zu schreiben. Geht ganz einfach z.B über

installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c7t1d0s0

So nun installieren wir noch einige Pakete um unser System in ein Storage umzuwandeln. Wir benötigen hier vorallem das Paket COMSTAR. Dies ermöglicht uns das Setup als FC Target oder aber auch als ISCSI Target. Leider wird dies nicht mehr so aktiv weiterentwickelt.

pkg install storage-server

Nun haben wir alle Pakete installiert. Kommen wir zum konfigurieren des FC-Adapters zum Target-Device.

nano /kernel/drv/emulex.cfg

Dort suchen wir die Zeilen

target-mode=0; und ändern diese nach target-mode=1; 

ddi-forceattach=0 und ändern diese nach ddi-forceattach=1

nun aktivieren wir den COMSTAR Service

svcadm enable stmf

Nun ist guter Zeitpunkt das System neu zu starten.

shutdown -y -i6 -g0

Nach dem neutstart solltet ihr bei der eingabe von

fcinfo hba-port

etwas ähnliches wie folgendes sehen, je nach Anzahl der Anschlüsse auch einige mehr:

HBA Port WWN: 10000000c97b5ea4
Port Mode: Target
Port ID: 611500
OS Device Name: Not Applicable
Manufacturer: Emulex
Model: A8003A
Firmware Version: 2.82a4 (Z3F2.82A4)
FCode/BIOS Version: none
Serial Number: MY10826ECA
Driver Name: emlxs
Driver Version: 2.60k (2011.03.24.16.45)
Type: F-port
State: online
Supported Speeds: 1Gb 2Gb 4Gb
Current Speed: 4Gb

Wichtig ist hier der Port Mode, dieser muss auf Target stehen. Sollte dies nicht der Fall sein, so müsst ihr nochmal den Adapter checken ob dieser auch mit COMSTAR läuft. Solltet ihr mehrere FC/Raidadpater oder mehrere Anschlüsse haben so lohnt es sich Multipath zu aktivieren. Dazu einfach folgendes eingeben:

multipath aktivieren  stmsboot -e ( Achtung Systemneustart!!! )

Nicht wundern danach dauert das booten etwas länger ^^

So nun ist das schlimmste schon eigentlich hinter uns. Wir erstellen nun einen ZPOOL.  In meinem Beispiel wird es ein POOL namens tank.

zpool create -f tank mirror c7t1d0 c7t2d0 mirror c7t3d0 c7t4d0 spare c7t5d0

Ich verzichte hier jetzt mal auf die Eigenschaften von ZPOOL und Co. Da gibt es wirklich super Anleitungen im Web. Solltet ihr es jedoch unter VMWARE wie ich einsetzen. So kann ich wirklich empfehlen ein mirror pool zu erstellen. Der macht am meisten Spass. Ok wenn ihr den POOL erstellt habt erstellen wir nun ein ZFS-Volume drauf.

zfs create -V 1000G tank/lun_0

Nun erstellen wir uns eine LUN mit der wir das Volume tank/lun_0 ansprechen können.

sbdadm create-lu /dev/zvol/rdsk/tank/lun_0
Created the following LU:

GUID                    DATA SIZE           SOURCE
--------------------------------  -------------------  ----------------
600144f0e8efcb000000dfds2bcc60001  10737418240          /dev/zvol/rdsk/tank/lun0

Ab jetzt gibt es 2 mögliche Wege diese LUN zur Verfügung zu stellen. Einmal alles Manuel mit mehr Möglichkeiten der Rechtevergabe wer was wo sehen darf. Oder halt der sehr sehr einfache weg allen einfach alles zu erlauben über

stmfadm add-view 600144f0e8efcb000000dfds2bcc60001

Beim anderen ( von mir empfohlene Weg ) brauchen wir noch die WWN von unseren Adaptern um eine Targetgroup zu bilden.

fcinfo hba-port | grep "HBA Port WWN"
HBA Port WWN: 10000000c97b5ea4
HBA Port WWN: 10000000c95fb27c

Durch eine Targetgroup geben wir welche Adpater unsere LUN anbieten dürfen.

stmfadm create-tg targetgroup1

Nun fügen wir unsere Adapter der Targetgroup zu…

stmfadm add-tg-member -g targetgroup1 wwn.10000000c97b5ea4
stmfadm add-tg-member -g targetgroup1 wwn.10000000c95fb27c

Sollte es hier zu einer Meldung kommen wie „stmfadm: STMF target must be offline“ muss man den Dienst kurz ausschalten:

svcadm disable svc:/system/stmf:default

und die Adapter nochmals hinzufügen. Danach den Service wieder neu starten:

svcadm enable svc:/system/stmf:default

Jetzt erstellen wir uns noch eine Hostgruppe. Dies sind die Clients denen es erlaubt ist auf die LUN zuzugreifen.

 stmfadm create-hg hostsgruppe1

Nun kommen in diese Hostgruppe noch die Hosts. Die WWNs der Adapter müsst ihr über den Host oder den Switch rausbekommen.

# stmfadm add-hg-member -g hostgruppe1 wwn.2100001b32da0003

Jetzt kommen wir zum Finale. Wir erstellen eine View die alles zusammensetzt und regelt welche Hostgruppe auf welche LUN’s zugreifen darf usw…

# sbdadm list-lu

Found 1 LU(s)

GUID                    DATA SIZE           SOURCE
--------------------------------  -------------------  ----------------
600144f0e8efcb0000004e52bcc80001  107374182400          /dev/zvol/rdsk/tank/lun_0

Die GUID ist das was wir jetzt benötigen um das View zu erstellen:

stmfadm add-view -h hostgruppe1 -t targetgruppe1 600144f0e8efcb0000004e52bcc80001

Dies bedeutet sozusagen das alle Hosts aus hostgruppe1 über die Adapter in der targetgruppe1 auf die LUN 600144f0e8efcb0000004e52bcc80001 zugreifen dürfen.

Nun ist das Target für alle sichtbar und kann eingehangen werden. Die Rechtevergabe ist zwar generell etwas aufwändiger macht jedoch schon bei mittleren installationen durchaus sinn.

Als letzten Schritt können wir nun noch das Bootenviroment sichern. Damit haben wir immer einen Snapshot unserer Installation.

beadm list
beadm create -e solaris11 solaris-storageserver

Das wars dann auch schon. Ich hoffe ich konnte euch etwas helfen. Ich finde halt FC besser geeignet für VM Umgebungen als ISCSI wenn viele VMs darauf laufen. Jedoch kann man hier auch noch darauf zurückgreifen.

Über ein Feedback euererseits würde ich mich freuen.

Hier noch ein paar nette Links wo man noch gute Infos herbekommt:

http://www.juhonkoti.net/2012/01/02/building-a-85tb-cheap-storage-server-with-solaris-openindiana ( Sehr nett mit diskpy )

http://constantin.glez.de Nette Seite mit vielen Infos zu ZFS und Co…

Zur Info:

1. Bei einigen internen Tests habe ich Probleme mit Solaris 11.1 und VMWARE. Hier bricht der Durchsatz irgendwann extrem ein und läuft nur noch im KB Bereich. Es scheint als Wenn die LUN ein falschen Befehl bekommt.

2. Am Switch muss unser Storage im F Mode gefahren werden!!! Sonst wird es nicht erkannt…

7 Gedanken zu “FibreChannel Target unter Solaris 11

  1. Pingback: Juho Mäkinen's blog » Building a 85TB cheap storage server with Solaris OpenIndiana

  2. Dein Tutorial liest sich super. Werde in den nächsten Tagen ein ähnliches Projekt für Testzwecke starten.
    Vorerst ohne FC Switch nur für 2 Rechner (1x Openindiana, 1x Esxi).

    • Danke, ich drücke dir die Daumen das alles so klasse läuft wie bei uns. Ich muss wirklich sagen, bis jetzt läuft es ( seit mehr als einem Jahr ) Spitze. Wir haben jetzt auch noch 2 weitere Systeme installiert und sind mehr als zufrieden…

      MfG
      Thomas

  3. Hallo,

    habe heute nach deinem Tutorial einen Storage-Server mit Solaris 11.2 aufgesetzt. Hat super geklappt. Multipath aktivieren war etwas schwieriger, da ich alte Shelves von einer Netapp benutzt habe und deshalb noch die scsi_vhci.conf editieren musste. Ansonsten alles super. Freigegeben habe ich die LUN’s dann an einen esx5i. Leider war der Durchsatz von Anfang an sehr schlecht (30kb/s). Ist so nicht zu gebrauchen. Einen entsprechenden Hinweis hattest du ja schon gegeben. Gibt es hierzu schon eine Lösung?

    Vielen Dank für die gelungene Anleitung und beste Grüße

    uta

    • Moin,
      ich danke dir für das Feedback… Ich würde dir gerne helfen. Brauche aber noch eine kurze Beschreibung zu deinem Aufbau…
      Also sind die shelfs per FC verbunden oder direkt?
      Du musst mal schauen ob bei der LUN der Schreibcache aktiv ist. Dieser wird in neueren Versionen blöderweise automatisch aus gemacht.
      Dann die Frage, wie viel Speicher hat dein Storageserver?
      Nutzt du Compression oder Deduplication? Beides enorme Performancekiller bei falscher Handhabung :)
      MfG
      Thowie

  4. Moin,
    vielen Dank für die schnelle Antwort.
    Leider komme ich erst am Freitag wieder an den Server. Einige Fragen kann ich dir aber so beantworten:
    #1 Insgesamt hängen 8 Shelfves mit jeweils 14 Platten über zwei SAN-Switche am Server. Multipathing ist eingeschaltet.
    #2 Der Server hat 2 Dual-Core Prozessoren mit 2.8 GHz und 16 GB Hauptspeicher, sollte doch eigentlich reichen.
    #3 Kein Compression, kein Dedup.

    Schreibcache kann ich so nicht beantworten, hab ich auch nicht kontrolliert – später.

    Beste Grüße

    uta

    • Moin,
      16 GB Speicher können bei der Menge an Shelves und Platten ein Problem sein da zu wenig ^^
      Wenn du noch mehr INfos hast sag bescheid
      MfG
      Thowie

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *