Crear RAID 1 bootable al Netgear Stora MS2110-100PES

Aquest apartat es pot aplicar a qualsevol equip al qual estiga instal·lat linux Debian. Excepte la última part on s’indica l’ordre per a arrancar el sistema, però al final del post deixe l’enllaç a la web original on ho explica. Tot el que s’indica és com a super usuari.

Per a fer RAID 1 es seguixen els següents passos:
– Instal·lar mdadm.
– Copiar estructura del disc A al disc B.
– Indicar que totes les particions del disc B són per a RAID.
– Crear RAID i afegir les particions del disc B.
– Muntar el RAID a una carpeta temporal i copiar tots els fitxers.
– Reiniciar i arrancar amb el RAID.
– Indicar que totes les particions del disc A són per a RAID.
– Afegir les particions del disc A al RAID.
– Configurar el fitxer mdadm.conf per a muntar el RAID automàticament al iniciar.

Instal·lar mdadm

apt-get install mdadm

Eixim del asistent de configuració si es pot. Com jo no sabia de que anava la cosa quan ho he instal·lat… si que he fet l’assistent i després tenia algun que altre problema.

Per a copiar l’estructura del disc A al disc B s’executa l’ordre:

sfdisk -d /dev/sda | sfdisk /dev/sdb

I ara es modifica el tipus de particions, primer vegem les particions que tenim amb:

fdisk -l

I després les modifiquem:

fdisk /dev/sdb

s’accedix a un menú al qual es farà aquest procediment per cada partició que hi haja:

Command (m for help): <-- t
Partition number (1-4): <-- num de la partició
Hex code (type L to list codes): <-- fd

I per a finalitzar:

Command (m for help): <-- w
The partition table has been altered!

Ara es continua amb la creació dels RAIDs, es crea una partició RAID per cada partició que tingam. Al meu cas tinc una per a dades (sdb1) i altra per a swap (sdb5).

mdadm -C /dev/md0 --metadata=0.90 --chunk=128 --level raid1 --raid-disks 2 missing /dev/sdb1
mkfs.ext3 /dev/md0
mdadm -C /dev/md1 --metadata=0.90 --chunk=128 --level raid1 --raid-disks 2 missing /dev/sdb5
mkswap /dev/md1

Es torna a actualitzar l’arranc per a que puga arrancar des del RAID

mdadm-startall
update-initramfs -u
cd /boot
/root/stora-flash -i vmlinuz-2.6.32-2-kirkwood -r initrd.img-2.6.32-2-kirkwood

I ara es munta la partició de dades del RAID i es copien les dades de l’actual /

mkdir /mnt/newroot
mount -t ext3 /dev/md0 /mnt/newroot
cp -ax / /mnt/newroot

Es reemplaça sda1 per md0 i sdb5 per md1 a la taula de muntatge fstab del nou / (la ruta seria /mnt/newroot/etc/fstab)

Fem un reinici i tornem a cancelar l’autoarranc. Executem les següents ordres per a executar el sistema:

setenv bootcmd_ide 'ide reset; ext2load ide 1 0x200000 /boot/uImage; ext2load ide 1 0x800000 /boot/uInitrd'
setenv bootcmd 'setenv bootargs $(console) root=/dev/md0; run bootcmd_ide; bootm 0x200000 0x800000'
boot

El més segur es que no trobe automàticament el RAID i es quede al (initramfs), aleshores executar aquestes ordres per a configurar els RAIDs i continuar:

mdadm --assemble /dev/md0 /dev/sdb1
mdadm --assemble /dev/md1 /dev/sdb5
exit

Ara continuem amb el procés, li toca al disc A. Copiem la estructura de particions del disc B:

sfdisk -d /dev/sdb | sfdisk /dev/sda

i afegim les particions del disc A al RAID:

mdadm --manage /dev/md0 -a /dev/sda1
mdadm --manage /dev/md1 -a /dev/sda5

Automàticament començarà a regenerar-se el disc A fins que siga igual que el B. Aquest procés es pot veure amb l’ordre:

watch cat /proc/mdstat

I per a eixir pulsar CTRL-C.

Una vegada ja ha acabat de regenerar-se passem a editar el fitxer de configuració de RAID, que al debian està a /etc/mdadm/mdadm.conf, i si hi ha alguna línia que comença amb la paraula ARRAY la borrem o la comentem (posant un # davant).

Ara li posem la configuració correcta d’ARRAY amb la següent ordre:

mdadm --verbose --detail --scan >> /etc/mdadm/mdadm.conf

Es torna a actualitzar l’arranc per a que puga arrancar des del RAID

update-initramfs -u
cd /boot
/root/stora-flash -i vmlinuz-2.6.32-2-kirkwood -r initrd.img-2.6.32-2-kirkwood

*Aquest pas no se si és precís ja que el que he fet jo seguint els manuals és reiniciar després de la regeneració i sempre es quedava en (initramfs). Tenia que muntar manualment el RAID amb les ordres:

mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
mdadm --assemble /dev/md1 /dev/sda5 /dev/sdb5
exit

Finalment googlejant he trobat l’ordre per a posar la configuració correcta d’ARRAY i jo he afegit aquest últim pas. Aixina que igual no fa falta.

Després d’aquest incís reiniciem l’equip, cancelem l’autoarranc i executem les següents ordres:

setenv bootcmd_ide 'ide reset; ext2load ide 1 0x200000 /boot/uImage; ext2load ide 1 0x800000 /boot/uInitrd'
setenv bootcmd 'setenv bootargs $(console) root=/dev/md0 rootdelay=5; run bootcmd_ide; bootm 0x200000 0x800000';
boot

Comprovem que s’ha iniciat correctament i que la partició / està muntada al /dev/md0 (amb el df -h per exemple) i tornem a reiniciar per a guardar els valors d’inici i que l’autoarranc inicie linux. Aixina que es reinicia, cancelem l’autoarranc i executem les següents ordres:

setenv bootcmd_ide 'ide reset; ext2load ide 1 0x200000 /boot/uImage; ext2load ide 1 0x800000 /boot/uInitrd'
setenv bootcmd 'setenv bootargs $(console) root=/dev/md0 rootdelay=5; run bootcmd_ide; bootm 0x200000 0x800000';
saveenv
boot

Com es pot comprovar en la línia de setenv bootcmd_ide, estem apuntant al disc 1 (ide 1), supose que si falla aquest disc el sistema no s’iniciarà a soles i es tindria que connectar via consola al NAS i modificar aquesta línia per:

setenv bootcmd_ide 'ide reset; ext2load ide 0 0x200000 /boot/uImage; ext2load ide 0 0x800000 /boot/uInitrd'
saveenv

Després referent al RAID pot ser que també falle l’arranc del linux al fallar un disc i pot ser s’haja de fer en manual alguna historia com sol passar als servidors quan falla un disc i toca ‘apretar F1’ per a continuar jaja.

Configurar RAID:
http://www.openstora.com/forum/viewtopic.php?f=6&t=396
https://www.howtoforge.com/software-raid1-grub-boot-debian-etch-p2

Servidor Redundant DRBD+HeartBeat

DRBD + HEARTBEAT

Hui explicaré com poder tenir un servidor redundant. No estic parlant d’un simple RAID de HDD’s, sino de redundacia de servidor completa, que si per el que siga el servidor es para es puga donar servei igualment. Està clar que per a això fan falta 2 servers, un que és el principal i l’altre que està ‘dormint’ i quan detecta que el primer està ‘caigut’ es ‘desperta’ i continua donant el mateix servei.
Açò s’aconseguix amb el DRBD i el HEARTBEAT. El que fa el DRBD és el mateix que un RAID1 però a nivell de xarxa i el funcionament és el següent: Es sincronitzen dues particions iguals (una a cada servidor) formant una partició virtual visible pels dos servidors, el servidor principal té accés RW i el secundari sols R. Quan el principal cau, el secundari passa a ser el principal i ja té accés RW. Tota la informació que s’escriu a aquesta partició, s’escriu tant a la partició física del propi servidor principal, com a la partició física del servidor secundari (enviant les dades per la xarxa), així quan el servidor primari torna a estar en funcionament es torna a sincronitzar les particions i torna a ser el principal.
El HEARTBEAT és l’encarregat de monitoritzar l’estat dels dos servidors i activar el servidor secundari quan el primari ha caigut, sense el HEARTBEAT aquesta feina s’hauria de fer en manual, que també l’explicaré per si ho tenim que fer alguna vegada.
Una vegada explicat més o menys els conceptes (qui no tinga qualsevol cosa clara que pregunte, jeje) passe ja a començar el tutorial:
No és requisit indispensable que les dues máquines siguen idèntiques, sols les particions a sincronitzar (encara que per a que no es veja afectat el rendiment del servidor si que deuria de ser igual)
Les particions que van a utilitzar-se en el DRBD no tindran cap format ni estaran muntades, en aquest cas anem a dir que les particions que anem a utilitzar són la /dev/sda7 per als dos servidors i que tenen el mateix tamany.
Les proves les he fet en la debian 6.0 i he utilitzat el repositori per a la instal·lació de les aplicacions, no he compilat res (facilet ehhhh), anem allà.

Instal·lació i configuració del DRBD

Instal·lem el paquet drbd8-utils:
root@pc:/# apt-get install drbd8-utils

I ara passem a configurar-ho, comentar que per a la comunicació entre els dos servidors es neccesita tenir oberts els ports 7788/TCP i 7799/TCP, com estic fent més o menys un ‘copy & paste’ del manual de la web oficial (però traduït, per supost) vaig a utilitzar les mateixes ip’s, configuracions,…. Així que les IP’s dels servidors, és a dir que el servidor1 té la IP 10.1.1.31 i el servidor 2 la 10.1.1.32 i utilitcen la tarjeta de xarxa eth1.
Mantenint la configuració que tenen per defecte sols hem de fer la següent modificació en el fitxer /etc/drbd.conf:

resource r0 {
on alice {
device    /dev/drbd1;
disk      /dev/sda7;
address   10.1.1.31:7789;
meta-disk internal;
}
on bob {
device    /dev/drbd1;
disk      /dev/sda7;
address   10.1.1.32:7789;
meta-disk internal;
}
}

Si ja tenim un resource el borrem i posem este, i ara toca explicar-lo un poc. En el tag resource es definix les particions locals a utilitzar en el servidors i la partició virtual que es crea. Podem vore que el nom que es definix en resource és el r0 i que hi ha dos servidors dins del resource el servidor ‘alice’ i el ‘bob’. En cada servidor està definit la seva IP, la seva partició que s’utilitzarà i la partició virtual a la que pertany.
Així que per a extrapolar-ho al nostre cas sols falta canviar els noms dels servidors, les IP’s i les particions locals que s’utilitzaran, la partició virtual (el ‘device’) podem mantindre el que apareix en l’exemple.
Continuem en l’activació de l’aplicació amb els següents programes (teniu en compte que on diu ‘r0’ es modificarà per el nom del resource que heu posat vosaltres):
Primer carreguem el mòdul al kernel:
root@pc:/#modprobe drbd

Es crea el metadata del resource, aqueta acció sols es farà la primera vegada que es cree el device (en aquest cas el /dev/drbd1)
root@pc:/#drbdadm create-md r0

Apareixerà un resultat paregut a aquest:
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
success

i continuem amb
root@pc:/#drbdadm up r0

Si falla aquest comandament es pot provar d’una altra forma:
root@pc:/#drbdadm attach r0 (asocia el device als servidors)
root@pc:/#drbdadm syncer r0 (configura els paràmetres de sincronització)
root@pc:/#drbdadm connect r0 (connecta els servidors)

Be fent la primera opcció o la segona opcio per a comprovar que està tot correcte es fa un
root@pc:/#cat /proc/drbd

I el que mostre per pantalla serà similar al que es mostra
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:200768

Diu Inconsistent/Inconsistent perquè encara no s’ha sincronitzat.
Si fins a ací ha funcionat tot correcte… ja toca sincronitzar les dues particions, si no ha funcionat tot correcte reviseu la configuració que algo mal hi haurà. Per a sincronitzar les particions i dir quin servidor és el node principal s’executa el següent comandament (sols en el servidor principal):
root@pc:/#drbdadm -- --overwrite-data-of-peer primary r0

i començarà una sincronització completa de les particions, que depenent del tamany de la partició, recursos dels servidors i connexió de xarxa tardarà més o menys (ja vos assegure que tardar si que tarda prou en completar). Per a monitoritzar la sincornització es pot fer un
root@pc:/#watch -n1 cat /proc/drbd

i veurem com va avançant la sincronització.

Posada en marxa i comprovació del sistema

Ara que ja ha acabat de sincronitzar-se les particions ja podem començar a utilitzar-les. Recordar que en aquest sistema el servidor primari té accés de RW a la partició /dev/drbd1 mentre que el servidor secundari sols R.
Com aquesta partició no té format ni està utilitzant-se el primer que es fa és donar-li format
root@pc:/#mkfs.ext3 /dev/drbd1

i la muntem en un directori que creem nosaltres
root@pc:/#mount /dev/drbd1 /mnt
root@pc:/#mount

Aixina que ens mostre si s’ha muntat o no i ja podem accedir a ella i crear qualsevol cosa, ara si s’intenta fer el mateix des del servidor secundari es comprovarà que no es pot fer. Si es necessitara poder accedir es tindria que configurar d’una altra forma (si que es pot) fent els dos servidors com a principals i utilitzar un altre format (GFS per exemple), i açò està explicat en la web principal i en altres blogs.
Passem a comprovar que el que es modifica en el primer servidor també ho fa al secundari. Desmuntem la partició en el primari:
root@pc:/#umount /mnt

Canviem el rol en el server primari a secundari
root@pc:/#drbdadm secondary r0

I ara fem el contrari en el server secundari
root@pc:/#drbdadm primary r0
root@pc:/#mount /dev/drbd1 /mnt
root@pc:/#mount

Així comprovem que està muntat correctament i si accedim al seu punt de muntatge trobarem que les dades són les mateixes, tornem a fer la mateixa operació per a deixar-ho com estava (el servidor principal el tornem a fer principal i el secundari el tornem a fer secundari)
I si tot ha anat be ja tenim en marxa el DRBD!

Instal·lació i configuració del HeartBeat

root@pc:/#apt-get install heartbeat

I ja tenim instal·lada l’aplicació (que senzilles són les coses!), ara passem a la configuració d’aquest. Es necessiten 3 arxius de configuració:
/etc/ha.d/authkeys <- definix el xifratge
/etc/ha.d/ha.cf <-paràmetres per a la monitorització
/etc/ha.d/haresources <- paràmetres d’IPV, servici a monitoritzar,…

Abans de fer res en el fitxer /etc/hosts es posen dues linies amb les ip’s i noms dels dos servidors per a un millor funcionament del heartbeat. Després ja podem passar a crear els arxius de configuració ja que al fer-ho jo he vist que no se me crea cap arxiu, els creem a ma i funciona igual, primer creem el authkeys amb el següent contingut

auth 1
1 crc

és l’autenticació menys forta però per a proves funciona be, per a altres métodes més forts buscar ‘per ahí’

Ara li toca al ha.cf

#       File to write debug messages to
debugfile /var/log/ha-debug
#
#
#       File to write other messages to
#
logfile /var/log/ha-log
#
#
#       Facility to use for syslog()/logger
#
logfacility     local0
#
#
#       A note on specifying "how long" times below...
#
#       The default time unit is seconds
#               10 means ten seconds
#
#       You can also specify them in milliseconds
#               1500ms means 1.5 seconds
#
#
#       keepalive: how long between heartbeats?
#
keepalive       2
#
#       deadtime: how long-to-declare-host-dead?
#
#               If you set this too low you will get the problematic
#               split-brain (or cluster partition) problem.
#               See the FAQ for how to use warntime to tune deadtime.
#
deadtime        30
#
#       warntime: how long before issuing "late heartbeat" warning?
#       See the FAQ for how to use warntime to tune deadtime.
#
warntime 10
#
#
#       Very first dead time (initdead)
#
#       On some machines/OSes, etc. the network takes a while to come up
#       and start working right after you've been rebooted.  As a result
#       we have a separate dead time for when things first come up.
#       It should be at least twice the normal dead time.
#
initdead        120
#
#
#       What UDP port to use for bcast/ucast communication?
#
udpport 694
#       Set up a unicast / udp heartbeat medium
#       ucast [dev] [peer-ip-addr]
#
#       [dev]           device to send/rcv heartbeats on
#       [peer-ip-addr]  IP address of peer to send packets to
#
ucast eth0 (ip_del_otro_servidor)
#
auto_failback   on
#       Tell what machines are in the cluster
#       node    nodename ...    -- must match uname -n
node    server1
node    server2
#
bcast   eth1

D’on es modifica el ‘ucast eth0 (ip_del_otro_servidor)‘ posant-li la IP de l’altre servidor (en el servidor primari es posa la IP del servidor secundari i en el secundari la del primari) i en node es posen els noms dels servers. Si s’utilitzara una altra interficie diferent a eth1, es modificaria el bcast.

Ja donem pas al haresources:

servidor1 drbddisk::r0 Filesystem::/dev/drbd1::/mnt::ext3 IPaddr2::192.168.1.10/24/eth1 apache2

Tot està a la mateixa línia, en primer lloc es posa el nom del servidor principal, després del drbddisk:: es posa el nom del resource que s’havia posat en el DRBD, supose que el que està en el filesystem no fa falta que ho explique, no? partició, punt de muntatge i format de la partició, jejeje
El punt de IPaddr2 és important, aquesta és la IP virtual. Gràcies a aquesta IP el sistema és redundant, ja que encara que cada servidor té una IP diferent, el servidor que estiga en actiu també respondrà a la IP virtual, tenint així sempre un servidor que responga a esta IP (a no ser que es paren els 2). Està format per la IP/màscara/interficie de xarxa.
I al final es posa els servicis a monitoritzar, en aquest cas he posat el apache2, que no ho he dit en aquest post però l’he instal·lat també per a poder ser monitoritzat.
Aquestos 3 fitxers de configuració seran iguals en els dos servidors (exeptuant l’apartat ucast del ha.cf)
Es reinicia el Heartbeat en els dos servidors, que si està tot correcte no donarà cap error
root@pc:/#/etc/init.d/heartbeat restart

I ja ho tenim funcionant!

Posada en marxa i comprovació

He posat “posada en marxa” però és mentida, ja està en marxa, dona igual és per a seguir els mateixos apartats en una aplicació que en l’altra.
El primer pas per a comprovar que el HeartBeat funciona correctament és fer un ping a la IP virtual, si respon es que està tot correcte, de vegades quan es posa en marxa per primera vegada li costa un poc respondre al ping.
I el segon pas de comprovació és simular la caiguda del servidor primar i comprovar que el secundari es ‘desperta’. Per a això deixem un ping constant a la IP virtual des d’una màquina que no siga ni el server1 ni el server2 i executem:
root@pc:/#/etc/init.d/heartbeat stop

El ping es pedrà per uns pocs segons i tornarà a fer-se. En aquest moment intentem accedir al punt de muntatge del servidor2 i es comprovarà que s’ha muntat automàticament.
Ara simulem que torna tot a la normalitat
root@pc:/#/etc/init.d/heartbeat start

I es veu que el ping es torna a perdre i torna a fer-se, també es comprova que la partició s’ha muntat en el servidor1 i que ja no està accesible des del servidor2.

Ara ja si que es pot dir que tenim el servidor redundant en marxa. Ara falta utilitzar-lo en algun servei, si puc més endavant penjaré en un nou post com muntar un servidor FTP amb usuari per MySQL sobre aquest sistema.

Webs d’interés
==============

http://www.drbd.org/users-guide/ –D’on he tret la instal·lació del DRBD
http://bytecoders.net/content/servidores-de-alta-disponibilidad-heartbeat.html –D’on he tret la instal·lació del HeartBeat
http://bytecoders.net/content/servidores-de-alta-disponibilidad-drbd.html –D’on he tret la instal·lació del HeartBeat
https://help.ubuntu.com/10.04/serverguide/C/drbd.html
http://www.howtoforge.com/drbd-on-centos-4.5

Primeres impresions del Netgear MS2110-100PES

Ja l’he rebut i ja està funcionant al meu pis, esta vesprada se’n va cap a ma casa. La primera imrpesió (visual) és molt bona, m’agrada el disseny senzill que té, és un cub. Li he posat el segon disc dur, l’he posat en marxa i… arranca! Per ara tot perfecte, me’n vaig a la web del router per a veure la IP assignada, entre en ella i… ja hi ha una cosa que no m’acaba d’agradar: per a poder configurar la NAS necessites connexió a Internet, ja que es connecta a la seva web i t’obliga a registrar-te en ella, després comprova si hi ha alguna actualització de firmware i acaba la configuració.

Entre a la seva web de configuració… i el que ja havia llegit en altres blogs, que la interficie web dona molt que dessitjar,  coma mínim deixa configurar be la IP estàtica, encara que t’obliga a posar porta d’enllaç i dns (aran o recorde cert si la porta d’enllaç és obligada perquè no estic davant de l’aparell però em sona que si). Veig en la web l’estat del RAID, està sincronitzant els 2 discs durs (diu que tardarà al voltant de 2h) així que ho deixe i me’n vaig a treballar.

A la vesprada torne, intente entrar a la NAS i em done compte que em redirecciona a la seva web (en internet), on tinc que validar-me i després em redirixig a la web de la NAS => no m’agrada tampoc.  Intente crear un nou usuari i no puc, però em done compte que és culpa meva, el password no cumplix els requisits mínims. Ja al final quan ja tinc l’usuari nou creat per a casa, entre als recursos compartits i veig que cada usuari té les seves carpetes, hi ha una general i són recursos compartits predefinits, tot molt senzill però a mi no m’apetix tenir ixa configuració en els recursos compartits, vull tenir el que jo vulga. Total que al final he tingut que entrar per ssh com a root per a editar el fitxer de configuració de samba i crear les carpetes que jo he volgut. No volia “tocar” la NAS tant prompte, però no ha pogut ser, per a una bona configuració millor entrar per consola que per la web que té.

És molt senzill entrar com a root en la NAS, si estàs en la consola s’escriu el següent

ssh AAAA_hipserv2_netgear_XXXX-XXXX-XXXX-XXXX@ip_de_NAS

On AAAA és el nom d’usuari i XXXX-XXXX-XXXX-XXXX és el product code (que no és el mateix que el s/n), el password és el del nom d’usuari que hem creat. Una vegada dins es fa un

sudo -s

Ens demana una altra vegada el password, ens dona un error i ja estem com a usuari root. Pareix ser que està basat en debian, per tant conté la seua estructura i la seva forma de instal·lar nou programari, encara que aquesta part no l’he provada encara.

Aquesta informació l’he treta de http://desinghacks.blogspot.com/2010/04/hacking-en-ms2110-code-name-stora.html

Per a acabar, dir que qui busque unba NAS fàcil d’instal·lar, barata i es conforma en la configuració que té per defecte (no es pot modificar gairebé res) aquesta és una bona NAS. Per a altres més ‘toquejadors’ ens queda curta la interfície web, menos mal que es pot entrar com a root, sino… seria una merda. Ah! el punt més negatiu que veig és que per a entrar a la seva web s’haja d’entrar per la web del fabricant. Com a punt positiu… és hot swap!

Actualitzat a 03/03/2013
Per a accedir per web i en lan (sense accés a internet ja que quan intentes entrar per web per defecte intenta redirigir-te a la seva web) cal escriure http://ip_del_server/?local=1