Robocopy

Denhär hjälpte mig att synka två träd efter restore:

robocopy d:\temp2\ d:\skarpserver /e /xo /l

Clariion ALUA

Mycket spännande! Clariion med Flare 26 eller högre (på cx500 är 26 det högsta som kan installeras!) så finns det stöd för ALUA, med andra ord så kan även den inaktiva pathen till ett LUN användas för access.

Till skillnad från aktiv / passiv där all access via ”fel” path refuseras så omdirigeras alla accesser till ”rätt” inom cx500-an om man använder ALUA. Naturligtvis kostar det prestanda att accessa via fel path, och är man inte uppmärksam så sker en trespass vilket kan få kostsamma följder för andra LUN på samma anslutning eller i värsta fall att LUN:et ping-pongas mellan SP:er beroende på vilken server som accessar LUN:et mest.

Jag har vänt ut-och-in på Internet i min jakt på den optimala konfigureringen av multipath för ALUA, och det verkar som om man i princip inte behöver ändra speciellt mycket i konfigurationsfilen /etc/multipath.conf. En intressant åsikt om ALUA är att man inte ska låta den få styra helt, så därför så ser min multipath.conf ut såhär:

defaults {
        user_friendly_names     yes
}

blacklist {
        devnode ”^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*”
        devnode ”^(hd|xvd|vd)[a-z]*”
}

# Make sure our multipath devices are enabled.
blacklist_exceptions {
        wwid    ”*”
}

devices {
        device {
                vendor  DGC
                product .*
                product_blacklist LUNZ
                path_grouping_policy group_by_prio
                path_checker tur
                no_path_retry queue
                prio_callout ”/sbin/mpath_prio_alua /dev/%n”
                failback immediate
                features ”1 queue_if_no_path”
                hardware_handler        ”1 emc”
        }
}

multipaths {
        multipath {
                wwid    3600xxxxxxxxxxxxxxxxxxxxxxxxxde11
                alias   boot
        }
         multipath {
                wwid    3600xxxxxxxxxxxxxxxxxxxxxxxxxdf11
                alias   OVS
        }
}

Det inställningar som skiljer är ”path_checker” som istället för ”alua” har ”tur” samt att ”hardware_handler” har ”1 emc” istället för ”1 alua”. Av någon outgrundlig anledning så finns inte ”1 alua” i OVM så det får helt enkelt stå kvar vid ”1 emc” för alternativet är att det blir ”0” och hur jag än letat så fann jag ingen information om vad detta innebär.

Värt att notera är att aliasen som finns utpekade i konfig-filen funkar, men inte för ”boot” LUN:et. Den listas fortfarande som /dev/mpath/mpath0 till skillnad för aliaset för OVS LUN:et som förväntat listas som /dev/mpath/OVS. Knepigt värre, men huvudsaken är att det funkar 🙂

Vill man se om / ifall inställningarna ”tagit” så kan man starta ett kommandoskal för multipath:

# multipathd -k

Här visar kommandot ”show config” huruvida och vilka inställningar som gäller.

Lite matnyttig info från EMC:

  • Prior to the installation on a CLARiiON LUN, the Linux host must have been manually registered on the array and assigned to a Storage Group. At least one LUN must be bound to the host’s Storage Group and owned by the SP connected to the HBA being used for the fabric boot. The lowest-numbered path to the boot LUN must be the active path.
  • Booting from the SAN requires the use a Navisphere Management station with the Navisphere Manager or NaviCLI. The station must be separate from the boot server, but networked to the CLARiiON array in order to manually register the boot server.
  • It is recommended that the boot LUN be assigned Host LUN ID 0. During the installation procedure, it is recommended that only one LUN be assigned to the Storage Group for ease of use. Once the installation has completed, additional LUNs may be added to the Storage Group.
  • Path follow-over functionality is not available in MPIO. In certain scenarios, this may result in repeated trespasses when connected to CLARiiON arrays resulting in lower performance. In the CLARiiON Storage Group, change the default owner of the LUN to a Storage Processor accessible by all hosts attached to the storage group.
  • On CLARiiON devices, running the multipath command at any time will result in an attempt to restore the device to its default owners. This does not impact availability of the device.
  • The CLARiiON Layered Application SnapView snapshot and the admsnap host utility are supported in Linux native multipathing environments when performed with EMC CLARiiON Release 29 FLARE and layered applications. Support in Linux native multipathing environments is also available for MirrorView, SAN Copy, and SnapView clones.
  • Unfractured SnapView clones are not supported in active storage groups in the Linux native multipathing environment. During a host reboot having unfractured SnapViewclones in a host’s storage group may cause the host to hang. EMC is currently working with the DM-MPIO development community to resolve this problem. Until this can be resolved the workaround is to fracture or remove any unfractured cloned LUNS from the host storage group before that host is rebooted.

Multipath boot för XenServer

Det var inte en enkel eller självklar operation visade det sig. I alla fall inte om man som jag utgår från Citrix XenServer och försöker sätta sig in i hur det är uppbyggt. Eftersom jag kan noll om Linux så började jag där jag stod: med XenServer.

Citrix har visserligen lagt till stöd för dm-multipath för åtkomst till Storage Repository (SR), men det gäller inte för själva bootningen av XenServer. Vad ska man med ett redundant SAN till om måste ha kvar lokala hårddiskar? Nej, jag gav mig fasen på att detta *måste* gå att få att fungera annars är Linux inte moget för affärskritiska installationer.

Det tog inte lång stund innan jag hittade att i alla fall RedHat kan och har alldeles föredömligt enkel installation av sin Linux (RHEL) för bootning via SAN. Det är ypperligt i och med att Citrix bygger XenServer på CentOS, vilket i sin tur är en klon av RHEL.  Tyvärr så måste Citrix ha missat att denna funktionalitet är i allra hägsta grad väsentlig, för det är lögn i h-e att få igång boot via SAN om man samtidigt vill att bootdisken ska vara multipathkapabel.

Visserligen går det alltså bra att installera XenServer på ett LUN som presenteras av BIOS på HBA, men bara för att LUN-et presenteras som en lokal hårddisk så är den inte alls skyddad av multipath. Citrix Xenserver går fetbort med andra ord, oavsett om det är DELL’s paketerade och för-licensierade eller Citrix egen variant.

Så jag vidgade mina vyer och funderade ett tag på att installera XenServer från CentOS, alltså skapa en helt egen installation.  Eller att återigen uppta mina försök med Opensolaris. Inget av alternativen var särskilt lockande, egen komposition skulle innebära att jag mister Citrix nästan ypperliga administrationsverktyg XenCenter och Opensolaris är lite i limbo nu sen Oracle köpte SUN.

Oracle ja. Då kom jag på att dom hade upprört Linuxvärlden för något år sen när dom klonade RHEL (CentOS?) och skapade en egen Linuxvariant: Unbreakable Linux. För övrigt är det den enda Linuxplattform som Oracle stödjer för installation av sin välrenommerade databasserver. Och att dom dessutom efter mycket om och men numera stödjer installation av databasservern på sin egen hypervisor, byggd på Xen.

Oracle sitter alltså numera på en egen välsupportad Linuxdistribution, en egen välsupportad hypervisor samt ett av de bästa (om inte det bästa!) Unixoperativsystemet: Solaris. Dessutom köpte dom upp och lade ner VirtualIron, även den byggd på Xen, till förmån för sin egen distribution av XenServer. Och som om det inte vore nog så äger Oracle numera både MySQL, målet för min utflykt i virtualiserings-djungeln, samt VirtualBox, den enligt mig bästa klientvirtualiseringsmiljön.

Så jag tänkte att om OVM duger för Oracle så kan det knappast vara fy skam. I och med att Oracle tidigare inte tillhandahöll egen hårdvara så måste deras Linux / XenServer distribution fungera på de flesta stora HW leverantärernas servrar. Att Oracle främst förknippas med stora installationer borde innebära att det här med fibrechannel, SAN, multipath, etc. är kända och väldokumenterade företeelser.

Efter lite säkning fick jag napp! EMC har alldeles nyligen skapat ett dokument som steg-för-steg visar hur man sätter upp Oracle VM (OVM, Oracles XenServerdistribution) med multipath och bootning från deras Clariion CX SAN: http://www.emc.com/collateral/hardware/white-papers/h6904-deploying-oracle-vm-clariion-wp.pdf 

Bingo! Det var exakt detta jag behövde. En stabil och välpolerad paketering av XenServer som är gjord med tanke på hög tillgänglighet, dessutom väldokumenterad och det bästa av allt: graaatis! 🙂

Jag laddade hem OVM och började genast plocka isär installations CD-n för att se om den kunde bootas via PXE istället. Även detta visade sig vara väldokumenterat: http://itnewscast.com/chapter-4-oracle-vm-server-sizing-installation-and-updates#Oracle_VM_Server_PXE_Kickstart_Installation

I princip så packade jag upp installations CD skivan till en mapp (http://minserver/boot/ovm) på min webserver och lade till ett nytt menyalternativ i bootmenyn för pxelinux så var det hela klart för testning.

Även om dokumentationen inte alls stämde med vad jag tillslut lyckades snickra ihop så var den en mycket god hjälp på vägen. Det tog faktiskt mindre än två timmar från det att jag ”upptäckte” OVM tills det att installationen bootade via PXE.

Tyvärr tog min tur slut där. Även om själva bootningen via PXE var en smal sak att få igång så hamnade jag i trubbel i och med att installationen inte fattade ett jota av mina LUN-er och misslyckades hela tiden med att rensa / skapa partitioner.

Trots detta bakslag så gav jag mig inte. Själva bootningen och loggningen under uppstart var det den snyggaste (och då menar jag inte snygg såssom estetisk med flashiga färger) och mest polerade som jag har sett hittills. OVM verkade helt enkelt vara för bra för att jag skulle ge upp redan. Så jag lusläste EMC’s dokumentation och på sidan 10 stod det klart och tydligt:

”…you will need the linux mpath option during the initial installation, because Oracle VM Server supports enabling DMMP during installation.”

Äntligen! Nu gällde det bara att para ihop detta magiska kommando med PXE bootning så skulle alltså installationen kunna flyta på såsom jag ville från början.  Nästa steg var alltså att återgå till dokumentet om PXE installation och sy ihop allt. När jag läste dokumentationen så upptäckte jag nästa grej som befäste min tro på OVM: möjlighet till prekonfigurerad och därmed automatiserad installation med hjälp av Anaconda/Kickstart.

Detta var verkligen, verkligen ett stort steg framåt i jämförelse med den futtiga och begränsade ”answerfile.xml” som Citrix Xenserver har att erbjuda. En titt i dokumetationen för Kickstart samt exemplen på sidan för OVM / PXE visade att möjligheterna är om inte helt så nästan oändliga: http://fedoraproject.org/wiki/Anaconda/Kickstart.

Dokumentationen för Anaconda visade sig även den innehålla guldkorn: http://fedoraproject.org/wiki/Anaconda_Boot_Options

Under mina försök med att automatisera installationen av Citrix XenServer mha answerfile.txt blev jag bara frustrerad över att det resulterade i att eth0 pga PXE bootning(?) inte blev konfigurerad trots inställningar i answerfile-en. I jämförelse med OVM lyser det verkligen igenom att Citrix XenServer inte riktigt är redo för enterpriseinstallationer såsom Citrix vill hävda.

Det intressantaste i mitt tycke var möjligheten att kunna peka ut vilket av nätverkskorten som skulle användas för installation efter PXE bootning, nämligen parametern ”ks=bootif”. Denna inställning talar om för Anaconda att den ska använda nätverkskortet med MAC-adressen som pekas ut av parametern BOOTIF, som i sin tur tydligen sätts av pxelinux om man i dess konfigurationsfil sätter parametern ”IPAPPEND 2”.

Det hela resulterade alltså i att följande rader lades till i filen ”pxelinux.cfg/default” i TFTP servern:

LABEL OVM
MENU LABEL ^O Oracle VM Server Install
KERNEL http://minserver/boot/ovm/images/pxeboot/vmlinuz mpath
IPAPPEND 2
INITRD http://minserver/boot/ovm/images/pxeboot/initrd.img ksdevice=bootif ks=http://minserver/boot/ovm/kickstart.cfg

Själva filen ”kickstart.cfg” innehåller följande:

# Kickstartfil för Oracle VM Server

install
url –url http://minserver/boot/ovm

lang en_US.UTF-8
keyboard sv-latin1
timezone –utc Europe/Stockholm

network –device eth0 –noipv6 –bootproto dhcp
network –device eth1 –noipv6 –bootproto static –ip=192.168.99.99 –netmask=255.255.255.0

firewall –enabled –port=21:tcp –port=22:tcp –port=53:udp –port=53:tcp –port=80:tcp –port=2049:tcp –port=5900-5950:tcp –port=8002:tcp –port=8003:tcp –port=8899:tcp –port=7777:tcp –port=6389:tcp
selinux –disabled

authconfig –enableshadow –enablemd5
rootpw –iscrypted XXXXXXXXXX

ovsagent –iscrypted XXXXXXXXXX
ovsmgmntif eth0

# Partitionera hårddisken utan lokal SR (bortkommenterad)
clearpart –all –initlabel –drives=mapper/mpath0
part /boot –asprimary –fstype ext3 –size=100 –ondisk=mapper/mpath0
part / –fstype ext3 –size=3072 –ondisk=mapper/mpath0
#part /OVS –fstype ocfs2 –size=1024 –grow –ondisk=mapper/mpath0
part swap –recommended –ondisk=mapper/mpath0
bootloader –location=mbr –dom0_mem=543 –driveorder=mapper/mpath0

%packages –excludedocs
 @office
 @admin-tools
 @editors
 @text-internet
 @gnome-desktop
 @dialup
 @core
 @base
 @games
 @java
 @base-x
 @graphics
 @printing
 @sound-and-video
 @ovs-virtualization
 @graphical-internet
 tftp
 bridge-utils
 squashfs-tools

%post
 # Sätt på SNMP
 chkconfig snmpd on

# Skapa parameter för serverns IP adress (S_IP)
eval `ifconfig eth0 | awk -F ”[: ]+” ‘NR==2 {print ”export S_IP=” $4}’`

# Hämta konfigurationsfil och skapa parametrar
cd /tmp
wget http://minserver/boot/ovm/hostnames.txt

eval `grep ”DOMAIN=” hostnames.txt | awk -F ”[= \r]” ‘{print ”export S_DOMAIN=” $2}’`
eval `grep ”CONTACT=” hostnames.txt | awk -F ”[= \r]” ‘{print ”export S_CONTACT=” $2}’`
eval `grep ”SPA=” hostnames.txt | awk -F ”[= \r]” ‘{print ”export S_SPA=” $2}’`
eval `grep ”SPB=” hostnames.txt | awk -F ”[= \r]” ‘{print ”export S_SPB=” $2}’`
eval `grep ”$S_IP=” hostnames.txt | awk -F ”[= \r]” ‘{print ”export S_HOSTNAME=” $2}’`
# Sätt serverns namn
sed -i -e ”s/HOSTNAME=.*$/HOSTNAME=$S_HOSTNAME.$S_DOMAIN/” /etc/sysconfig/network
rm -f /var/log/HostIdFile.txt
# Hämta och installera EMC Navisphere Agent
cd /tmp
wget http://minserver/boot/ovm/emc/NaviHostAgent-Linux-32-x86-en_US-6.29.5.0.66-1.i386.rpm
rpm -Uvh NaviHostAgent-Linux-32-x86-en_US-6.29.5.0.66-1.i386.rpm

# Skapa en agentID.txt som talar om hur Navisphere ska kommunicera med Clariion
echo $S_HOSTNAME.$S_DOMAIN > /agentID.txt
echo $S_IP >> /agentID.txt

# Ändra konfigurationsfil för Navisphere Agent så den visar rätt i Navisphere Manager
sed -i -e ”s/Navisphere Agent$/$S_HOSTNAME.$S_DOMAIN/” /etc/Navisphere/agent.config
sed -i -e ”s/John.*$/$S_CONTACT/” /etc/Navisphere/agent.config
# Hämta och installera EMC admsnap kommandot
cd /tmp
wget http://minserver/boot/ovm/emc/admsnap-2.9.0.0.8-0.i386.rpm
rpm -Uvh admsnap-2.9.0.0.8-0.i386.rpm

# Ändra hosts filen
echo $S_IP $S_HOSTNAME.$S_DOMAIN $S_HOSTNAME >> /etc/hosts
# Starta Navisphere Agent
/etc/rc.d/init.d/naviagent start

Det som skiljer denna fil från en ”standardinstallation” är att jag lagt till TCP port 6389 för att EMC’s Navisphere Manager ska kunna ha kontakt med min Clariion samt att jag inte låter den skapa en lokal SR i och med att denna ska ligga på SAN-et och att jag vill att SNMP ska startas i samband med serverstart.

Avslutningsvis så hämtar den EMC Navisphere Agent och snapadm verktyget, installerar dessa och låser upp kommunikationsvägen till EMC Clariion SP-erna samt skapar en agentID.txt fil med information om hur Navisphere ska kommunicera med Clariion.

Ersätt XXXXXXXXXX i filen ovan med en MD5 krypterad sträng för de lösenord som du vill ha. MD5 strängen skapas enklast med följande kommando:

# grub-md5-crypt

Den frågar dig efter lösneordet två gånger och återkommer med den MD5 krypterade strängen.

Ersätt Y.Y.Y.Y och Z.Z.Z.Z med IP adressen för SPA respektive SPB i EMC SAN-et.

Nyhittad?

Denna blogg används för att samla alla mina äventyr kring installation och hantering av mina servrar. 

Utgångspunkten är ett rack fylld med 13 DELL servrar och en EMC Clariion CX fiber SAN, allt sammankopplat med 2st. Gb switchar och 2st. fiberswitchar, säkrat med 2 st. UPS:er, styrd med 2 st. PDU:er och övervakad med en KVM/IP switch. Vissa delar är nya, andra är begagnade och några är fådda 😀

Målet är att ha en fullt redundant, fjärrhanterbar och ”alltid” tillgänglig servertjänst som tillhandahåller websidor med hjälp av PHP och MySQL.

Verktygen för att uppnå målet begränsas av att det hela inte får kosta något utöver det som redan finns. Detta är en utmaning i sig men något som jag verkligen ser fram emot att bevisa, om inte annat så bara för migsjälv.

Så om datateknik intresserar dig och du klarar att följa mina irrfärder så är du välkommen att hänga med på mina äventyr. 🙂