HA (High Availability) cluster építése

A Unix/Linux szerverek üzemeltetése wikiből

Tartalomjegyzék

1 Elméleti alapok

1.1 Computer cluster – számítógépfürt

Egymással összekapcsolt számítógépek, amelyek együttműködve a fürt számára definiált funkciókat valósítják meg. A fürtön belüli gépek kívülről nem látszanak. A fürt mint egyetlen entitás nyújt szolgáltatásokat.

1.2 HA Clusters (Nagy rendelkezésre állású fürtök, feladatátvételi fürtök)

Olyan számítógépfürtök, amelyek a fürtök által nyújtott szolgáltatások rendelkezésre állását próbálják meg növelni. A szolgáltatásokat általában a fürt egyik tagja nyújtja, míg a többi tag annak meghibásodása esetén átveszi a szerepét, így növelve a szolgáltatások rendelkezésre állását.

1.2.1 Feladatátvételi fürtök modelljei

  • Shared disk (Megosztott lemezes) modell – a fürt rendelkezik egy adattárolóval, amelyet a fürttagok egy közös interfészen keresztül érhetnek el konkurens módon.
  • Shared nothing (Megosztott elem nélküli) modell – Minden logikai és fizikai egységet egyszerre csak egy fürttag birtokolhat.
  • Replicated storage (Replikált lemezes) modell - Általában 2 fürttagból álló fürt, ahol egy fürttag (elsődleges fürttag) nyújtja a szolgáltatást és tükrözi az adatokat a többi (másodlagos) fürttag számára. Ha az elsődleges fürttag kiesik, akkor egy másodlagos veszi át a szerepét (elsődlegessé válik).

1.2.2 Feladatátvételi fürtök témakörébe tartozó fogalmak

  • failover – a szolgáltatások kiszolgálásának átvétele a meghibásodott fürttagtól.
  • failback – a szolgáltatások kiszolgálásának visszaadása a megjavított fürttagnak.
  • split brain – bizonyos meghibásodások esetén előfordulhat, hogy a fürt több partícióra esik szét, amely partíciók nem tudnak egymásról, így mindegyik partíció fürtöt fog képezni és megpróbálja nyújtani az eredeti fürt szolgáltatásait. Ez igen hamar az adatok inkonzisztenciájához és hibás kiszolgáláshoz vezet.
    • STOMITH (Sooth The Other Machine In The Head) – split brain elkerülését célzó technika. Hiba esetén a hibás fürttagot egy másik fürttag újraindítja (fejbelövi).
    • Többség (Quorum) garantálása - módszer split brain elkerülésre. Amennyiben a fürt több részre esik szét akkor csak a legtöbb fürttagot tartalmazó rész (ezek alkotnak quorumot) működjön. Amennyiben a fürttagok száma páros, azért, hogy a többség biztosítva legyen a fürthöz hozzávesznek egy erőforrást (általában merevlemez - angolul quorum disk) amely fürttagként viselkedik.
  • Erőforrás - erőforrásnak nevezhetünk minden olyan logikai vagy fizikai eszközt és szolgáltatást, amelyet a fürt használ/kezel.
  • CRM (Cluster Resource Management) - A fürt erőforrásinak kezelését megvalósító eszköz.

2 HA cluster építése mysql szerver számára

2.1 felhasznált eszközök

Több program segítségével oldottam meg a feladatot. A fürtöt a Pacemaker CRM projekt segítségével OpenAIS fürt-keretrendszert felhasználva készítettem. Mivel az OpenAIS shared nothing modell alapján működik, a szerver adatainak a tükrözését a fürttagokra a DRBD projekt segítségével oldottam meg.

Ezen projektek mindegyikére igaz, hogy nem rendelkeznek stabil felhasználói interfésszel, így az itt leírtak újrafelhasználhatósága korlátozott.

2.1.1 Pacemaker

Nagy rendelkezésre állású fürtökhöz készült CRM-rendszer. A Linux HA projektből vált ki. Ez utóbbi projekt egy igen primitív erőforrás-menedzsmenttel rendelkezik - maximum két csomópontot lehet vele definiálni. A Pacemaker két fürt-keretrendszerrel képes együttműködni:

  • heartbeat - a Linux HA projekt része. Mivel a Linux HA projekt az utóbbi években nem igazán fejlődött, nem nagyon tartották karban, így a heartbeat használata gondokat okozhat, nem ajánlott.
  • OpenAIS - ajánlott keretrendszer.

2.1.2 OpenAIS

Az OpenAIS a Corosync általános fürt-keretrendszert felhasználó, nagy rendelkezésre állású fürt-keretrendszert megvalósító eszköz.

2.1.3 DRBD (Distributed Replicated Block Device)

Nagy rendelkezésre állás fürtökhöz készített, megosztott elem nélküli, replikált lemezes modellt követő, blokkeszközök tükrözésére való eszköz. A tükrözés valós idejű, transzparens (azaz a fürttagok számára átlátszó módon történik). Képes szinkron és aszinkron működésre is.

2.2 A példa rövid leírása

A példában 2 csomópontból álló replikált lemezes modellű fürtöt fogok létrehozni, amely mysql-szerverként fog funkcionálni a külvilág felé. Ehhez Ubuntu 9.10-es szervert használok. A szolgáltatást nyújtó programokat egy külön partíción helyezem el, amelyet a /services mappába csatolom. Ezt a partíciót fogom DRBD segítségével tükrözni. Ezután konfigurálom az OpenaAIS keretrendszereket a csomópontokon, majd amikor a még nem beállított fürt már működik az OpeanAIS segítségével, konfigurálom a csomópontokat a Pacemaker használatával.

(Itt jegyezném meg, hogy az OpenAIS felahsználói felülete nagyon erősen változik a fejlesztése közben. A neten található dokumentumok által használt programok (pl.: aiskeygen) jó része egyáltalán nem található meg az általam használt OpenAIS verzióban, így az alatta lévő Corosync segítségével konfiguráltam a csomópontokat. A konfiguráció menete (a konkrét parancsok, beállító fájlok) nem változik, csupán a programokat hívják másképp.)

2.3 A példa

Először telepítjük az Ubuntu 9.10 szervert mindkét csomópontra. A csomópontokban egy merevlemez van. Telepítés közben az alábbi módon particionáljuk a csomópontokat (/etc/fsab kimenet)

2.3.1 A csomópontok partíciói

/dev/sda2       /               ext3    relatime,errors=remount-ro 0       1
/dev/sda1       /boot           ext2    relatime        0       2
/dev/sda5       /drbd           ext3    relatime        0       2
/dev/sda6       /service        ext3    relatime        0       2
/dev/sda3       none            swap    sw              0       0

2.3.2 A szükséges programok telepítése

Az operációs rendszer telepítése után először telepítjük a szükséges programokat:

sudo apt-get install drbd8-utils pacemaker-openais mysql-server apache2 

Minden a DRBD segítségével tükrözött blokkeszközhöz szükség van egy partícióra, ahol a partícióhoz tartozó DRBD metaadatokat a program tárolhatja. A tükrözendő adatokat az sda6 partíción tároljuk, amit a /service csatolási pontra csatolunk. A partícióhoz tartozó metaadatokat pedig a sda5 partíción fogjuk tárolni.

2.3.3 A DRBD és a hálózat beállítása

Azt szeretnénk, hogy a Pacemaker mountolja majd a DRBD meghajtóit, ezért ki kell szedni a hozzájuk tartozó fstab bejegyzéseket.

/dev/sda2       /               ext3    relatime,errors=remount-ro 0       1
/dev/sda1       /boot           ext2    relatime        0       2
#/dev/sda5       /drbd           ext3    relatime        0       2
#/dev/sda6       /service        ext3    relatime        0       2
/dev/sda3       none            swap    sw              0       0

2.3.3.1 A metaadat-partíció törlése

A metaadat-partíciónak üresnek kell lennie; ha volt rajta adat, azt töröljük, például a következő módon:

sudo dd if=/dev/zero of=/dev/sda5


2.3.3.2 A hálózat konfigurálása

Ezután konfiguráljuk a hálózatot. Két hálózatot fogunk létrehozni. Egyet a DRBD adatforgalmához, egyet pedig a Pacemaker adatforgalmához (ezt lehet majd kívülről is elérni). Hozzuk létre a 2 hálózatot:

sudo nano /etc/network/interfaces

(az alpha csomópont adatai példaként)

auto eth1
iface eth1 inet static
address 10.100.100.163
netmask 255.255.255.0
gateway 192.168.0.1 
dns-nameservers gateway 192.168.0.1
auto eth2
iface eth2 inet static
address 192.168.56.101
netmask 255.255.255.0

2.3.3.3 A hosztnevek beállítása

A DRBD konfigurációs fájljaiban a csomópontokra hivatkozni fogunk a neveikkel, amit a DRBD hosztnévként is értelmez. Ezért be kell állítanunk ezeket hosztneveket:

sudo nano /etc/hosts
192.168.56.101    alpha.loc alpha
192.168.56.102    beta.loc beta


2.3.3.4 A DRBD konfigurációs fájljának beállítása

Ezután létrehozzuk a DRBD konfigurációs fájlját. Egy erőforrást fogunk létrehozni (r0), amiben beállítjuk a 2 csomópont adatait, és azt, hogy hogyan használja őket a DRBD. Az adatokat szinkron módon akarjuk tükrözni, azaz az elsődleges csomópont írásának befejezése addig blokkolódik, amíg a másodlagos csomóponton az írás be nem fejeződött (protocol C). A csomópont 60 másodpercig vár, mielőtt átváltana (degr-wfc-timeout 60). Beállítható, hogy a csomópontok között a kommunikáció titkosítottan történjen. Ezt a net szekcióban lehet beállítani. A példában sha1 titkosítást használunk (cram-hmac-alg sha1). A titkosításhoz használt közös kulcsot a shared-secret résznél kell beállítani. Megadjuk mindkét csomóponton, hogy mely partíciókat akarjuk tükrözni, illetve melyek a metaadatok partíciói. Megadjuk, hogy milyen néven hozzon létre a DRBD blokkeszköz-bejegyzést a /dev/ könyvtárba (drbd0). Megadjuk a csomópontok IP-címeit és portszámát. (Ne felejtsük el átengedni a forgalmat a tűzfalon).

sudo nano /etc/drbd.conf
common { syncer { rate 10M; } }

resource r0 {
 protocol C;
 startup {
   wfc-timeout 30;
   degr-wfc-timeout 60;
 }
 syncer {
   rate 10M;
   al-extents 257;
 }
 net {
   cram-hmac-alg sha1;
   shared-secret "seeeecreeet";
} 

 on alpha {					#hostname
   device     /dev/drbd0;
   disk       /dev/sda6;    			#The partition you want to mirror
   address    192.168.56.101:7788;		# the cluster interconnect IP
   meta-disk  /dev/sda5 [0];			#The partition for the meta-data
 }
 on beta {
   device    /dev/drbd0;
   disk      /dev/sda6;
   address   192.168.56.102:7788;
   meta-disk /dev/sda5 [0];
 }
}

2.3.3.5 A DRBD kernelmodul betöltése

Az alap ubuntu telepítés tartalmazza a DRBD csomagjait is, viszont alapból nem tölti be a kernelbe a DRBD kernelmodulját (neve drbd), amely szükséges annak működéséhez (ezt ellenőrizhetjük a lsmod | grep drbd paranccsal). Ezért nekünk kell manuálisan betölteni a modult a következő paranccsal:

sudo modprobe drbd

A drbd szeretné használni a tükrözött és a metaadat-partíciókat (sda6, sda5). Ha azok csatolva vannak, lecsatoljuk őket.

sudo umount /dev/sda5 /dev sda6 /service /drbd

2.3.3.6 Az erőforrás létrehozása és használatba vétele

Most már készen állunk arra, hogy a konfigurációs fájl alapján létrehozzuk az erőforrásunkat (r0).

sudo drbdadm create-md r0

Ha valamiért nem sikerült, akkor újbóli próbálkozás előtt ne felejtsük el törölni a metaadatokat tároló partíció adatait (sudo dd if=/dev/zero of=/dev/sda5).

Ezután csatoljuk az erőforrást, szinkronizáljuk és csatlakozunk hozzá.

sudo drbdadm attach r0
sudo drbdadm syncer r0
sudo drbdadm connect r0

Ha ez idáig sikerült az egyik csomóponton, akkor az idáig megtett lépéseket meg kell ismételnünk a másik csomóponton (ha még nem tettük meg).

Ha mindkét csomópontot beállítottuk, akkor ellenőrizhetjük a csomópontok állapotát:

sudo drbd-overview

a várt kimenet:

0:r0  Connected Secondary/Secondary Inconsistent/Inconsistent C r--- 

2.3.3.7 Az erőforrás szinkronizálása a csomópontok között

Jelenleg a DRBD még nem tudja, hogy melyik csomópontot szeretnénk elsődlegessé tenni, ezért mindkettő másodlagos (Secondary/Secondary), és az adatok még nincsenek szinkronizálva (Inconsistent/Inconsistent).

Amelyik csomópontott szeretnénk elsődlegessé tenni, annak adjuk ki a következő parancsot:

sudo drbdadm -- --overwrite-data-of-peer primary all

Ez elsődlegessé teszi a csomópontot, és megkezdi az adatok szinkronizációját. Ezt ellenőrizhetjük is a drbd-overview segítségével. HA a szinkronizáció befejeződött, akkor a következőhöz hasonló kimenetet kapunk:

0:r0  Connected Primary/Secondary UpToDate/UpToDate C r--- 

2.3.3.8 A /etc/fstab kiegészítése

Hogy a failover működhessen, engedélyeznünk kell a drbd0 eszköz csatolását a /services csatolási pontra. Nyissuk meg a /etc/fstab fájlt:

sudo nano /etc/fstab

és adjuk hozzá a következő sort:

/dev/drbd0      /service  	ext3    defaults        0       2

A DRBDvel kapcsolatos beállításokat ezzel befejeztük.

2.3.4 Az OpenaAIS (Corosync) beállítása

A szócikk írásának pillanatában a Pacemakerhez tartozó OpenAIS-verziót csak Corosync programokon keresztül lehet beállítani, mert több, az OpenAIS beállításához lényeges programot eltüntettek ebből az OpenAIS-verzióból.

2.3.4.1 Autentikációs kulcs generálása és beállítása minden csomóponton

Először autentikációs kulcsot generálunk a fürt számára és azt beállítjuk minden csomóponton. Ehhez először egy csomóponton generálunk egy kulcsot:

sudo corosync-keygen

majd átmásoljuk ezt a kulcsot a többi csomópontra és beállítjuk a másolatok jogosultságait.

Azon a gépen, amelyen létrehoztuk a fájlt (pl.: alpha); lépjünk be a másik gépre (beta).

scp /etc/corosync/authkey beta:

Állísuk be a másolat jogosultságait a béta csomóponton:

sudo mv ~/authkey /etc/corosync/authkey
sudo chown root:root /etc/corosync/authkey
sudo chmod 400 /etc/corosync/authkey

2.3.4.2 A Corosync konfigurációs fájljainak létrehozása/módosítása

Az Ubuntu 9.10-es verziója a telepítés után rendelkezik egy példaértékekkel beállított /etc/corosync/corosync.conf konfigurációs fájllal. Nekünk ez ehhez a példához jórészt megfelel. Csupán az interface rész bindnetadress alpontját kell módosítani. Ide a helyi alhálózat címe kell (amely az OpenAIS adatait fogja forgalmazni).

Nyissuk meg a fájlt:

sudo nano /etc/corosync/corosync.conf file

Keressük meg és módosítsuk a következő szekciót:

interface {
               # The following values need to be set based on your environment
               ringnumber: 0
               bindnetaddr: 192.168.0.0          #<-- Ezt akarjuk az alhálózat címére beállítani
               mcastaddr: 226.94.1.1
               mcastport: 5405
       }
2.3.4.2.1 A Corosync működésének engedélyezése

Alaptelepítésben a Corosync működése le van tiltva a /etc/default/corosync konfigurációs fájljában. Az ebben a fájlban található no értéket kell yes-re módosítani.

Nyissuk meg a fájlt:

sudo nano /etc/default/corosync 

és engedélyezzük a Corosync működését. A módosított fájl:

# start corosync at boot [yes|no]
START=yes

2.3.4.3 Multicast adatforgalom engedélyezése

Amennyiben a multicast adatforgalom tiltva van a tűzfalban, azt engedélyezni kell, hogy a Corosnyc működhessen.

2.3.4.4 A Corosync elindítása

Ha mindent beállítottunk, akkor elindíthatjuk a szolgáltatást:

sudo /etc/init.d/coroync start

Megint kiemelném, hogy az idáig leírtakat minden csomóponton el kell végezni.

Ha minden csomóponton megy a Corosync, akkor tesztelhetjük a crm_mon programmal. Az --one_shot paraméter arra utasítja, hogy ne folyamatosan monitorozzon, csak egyszer nézzen rá a fürtre és írja ki az eredményt. A -V paraméter részletesebb lekérdezést eredményez.

sudo crm_mon --one-shot -V

Ha minden tökéletesen működik, akkor egy a következőhöz hasonló kimenetet kell adjon a program:

rm_mon[2196]: 2009/12/23_21:08:18 ERROR: unpack_resources: No STONITH resources have been defined
crm_mon[2196]: 2009/12/23_21:08:18 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
crm_mon[2196]: 2009/12/23_21:08:18 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity


============
Last updated: Wed Dec 23 21:08:18 2009
Stack: openais
Current DC: alpha - partition with quorum
Version: 1.0.5-3840e6b5a305ccb803d29b468556739e75532d56
2 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ beta alpha ]




Ha nem szerepel minden csomópont az Online részben (az adott csomópont standby státuszúként van megjelölve) akkor megpróbálhatjuk manuálisan online állapotba hozni a következő - a standby csomóponton - kiadott parancsokkal:

sudo crm
crm(live)# node
crm(live)node# online
crm(live)node# bye

Amennyiben így sem sikerül a fenti állapothoz jutni, akkor érdemes minden csomópontot újraindítani, mert lehetséges, hogy megoldja a a problémát.

A fenti részen látható, hogy a Corosync panaszkodik, mivel nem állítottunk be neki a STONITH (ugyanaz mint a STOMITH csak a Machine helyett Node van a rövidítésben) működéséhez szükséges paramétereket, ez normális ennél a résznél.

2.3.5 A Cluster Information Base (CIB) adatainak beállítása

A Cluster Information Base (CIB) tárolja a Cronosync-kel létrehozott fürtünk erőforrásainak az adatait. Ezt a crm (cluster resource management) nevű program segítségével tudjuk menedzselni. A CIB-ben tárolandó erőforrás-adatokat először egy fájlba írjuk, majd felülírjuk a CIB adatokat a crm segítségével. Majd mutatok példákat arra, hogy hogyan lehet egy erőforrásokat közvetlenül a crm-en keresztül kezelni.

2.3.5.1 A CIB-konfiguráció létrehozása fájlban

hozzuk létre egy config nevű fájlt a home könyvtárunkban:

sudo nano ~/config

másoljuk bele a következőket:

primitive drbd_mysql ocf:linbit:drbd \
        params drbd_resource="r0" \
        op monitor interval="15s"
primitive fs_mysql ocf:heartbeat:Filesystem \
        params device="/dev/drbd/by-res/r0" directory="/service/" fstype="ext3"
primitive ip_mysql ocf:heartbeat:IPaddr2 \
        params ip="192.168.0.200" nic="eth1:0"
primitive mysqld lsb:mysql
primitive apache lsb:apache2

group mysql fs_mysql ip_mysql mysqld apache 
ms ms_drbd_mysql drbd_mysql \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
colocation mysql_on_drbd inf: mysql ms_drbd_mysql:Master
order mysql_after_drbd inf: ms_drbd_mysql:promote mysql:start
property $id="cib-bootstrap-options" \
        no-quorum-policy="ignore" \
        stonith-enabled="false" \
        expected-quorum-votes="2" \
        dc-version="1.0.5-3840e6b5a305ccb803d29b468556739e75532d56" \
        cluster-infrastructure="openais"


ebben a fájlnak 2 részere térnék ki:

  • az erőforrások között definiálunk egy IP-címet:
primitive ip_mysql ocf:heartbeat:IPaddr2 \
        params ip="192.168.0.200" nic="eth1:0"

A 2. sorban található IP-cím lesz a fürt szolgáltatásának a címe.

  • a dc-version kezdetű sorban a Pacemaker általunk használt verziójának a számát kell megadni. Ezt a sudo crm_mon --one-shot -V parancs segítségével nézhetjük meg, ahol a Version: rész adja meg a verziószámot.


Felhívnám rá a figyelmet, hogy a CIB a fürt minden csomópontján érvényes beállításokat jelent. Azaz elég egyszer beállítani, viszont az itt beállítottak minden csomópontra érvényesek kell, hogy legyenek. Azaz itt például minden csomóponton az eth1 interfészen keresztül kell hogy elérhető legyen a szolgáltatás.

2.3.5.2 Kitérő: fürt konfigurálása crm használatával

2.3.5.2.1 IP-erőforrás hozzáadása a CIB-hez

Hozzuk létre az előbb említett IP-erőforrást manuálisan. Ehhez először létrehozunk egy árnyékmásolatot a CIB-ből.

sudo crm
crm(live)# cib new myconfig

Nézzük meg az eddigi beállításainkat, ehhez először a configure részbe kell belépni.

crm(myconfig)# configure
crm(myconfig)configure# show

Ha az előző pontban leírt konfigurációs fájl betöltése előtt próbálkozunk ezzel akkor az alábbiakhoz hasonló kimenetet fogunk kapni:

node alpha \
	attributes standby="off"
node beta \
	attributes standby="off"
property $id="cib-bootstrap-options" \
	dc-version="1.0.5-3840e6b5a305ccb803d29b468556739e75532d56" \ 
	cluster-infrastructure="openais" \
	expected-quorum-votes="2"

Adjuk hozzá az IP erőforrást:

crm(myconfig)configure# primitive ip_mysql ocf:heartbeat:IPaddr2 \
crm(myconfig)configure# params ip="192.168.0.200" nic="eth1:0"
crm(myconfig)configure# verify
crm(myconfig)configure# end

Majd töltsük az árnyékmásolatot az élő rendszer helyébe.

crm(myconfig)# cib use live
crm(live)# cib commit myconfig
crm(live)# quit
2.3.5.2.2 Példa csomópontkezelésére crm segítségével

Csomópont standby állapotba vitele:

sudo crm
crm(live)# node
crm(live)node# standby
crm(live)node# quit

Ha újra online állapotúvá akarjuk tenni, akkor az előbbi parancsokat kell megismételni, csupán a standby helyett online parancsot kell kiadni a csomópontnak.

2.3.5.3 A mysql és az apache előkészítése a fürt számára

A DRBD számára elsődleges csomóponton csatoljuk a drbd0 eszközt a /service mappára:

sudo mount /dev/drbd0 /service

Másoljuk át a mysql működéséhez szükséges adatokat a /servce mappába:

sudo cp -Ra /var/lib/mysql/ /service/mysql

Másoljuk át az apache fájljait is

sudo mkdir /service/etc
sudo cp -Ra /etc/apache2/ /service/etc/

csatoljuk le a /service mappát

sudo umount /service

állítsuk be a /etc/mysql/my.cnf fájlt minden csomóponton, hogy a megfelelő helyre mutassanak a benne lévő adatok

sudo nano /etc/mysql/my.cnf
	datadir         = /service/mysql  
	bind-address            = 192.168.0.200  # a CIB-ben beállított fürt IP

állítsuk be az apache konfigurációs fájlját, hogy ne a /etc/ hanem a /service/etc/ mappába mutassanak a benne található adatok

sudo nano /etc/apache2/apache2.conf

Ezzel befejeztük a példafürt konfigurálását.

3 Ajánlott irodalom

Alternatív feladatátvételi fürt megvalósítás. Ez a példa a Linux HA projektet használja fel a Pacemaker és az OpeanAIS helyett, amivel jóval egyszerűbben létrehozható két csomópontból álló fürt, viszont két csomópontnál több a projekt korlátai miatt nem megvalósítható benne. Redundáns tároló klaszter DRBD-vel és Heartbeattel

4 Felhasznált irodalom

http://clusterlabs.org/wiki/DRBD_MySQL_HowTo

http://clusterlabs.org/wiki/Debian_Lenny_HowTo

http://www.drbd.org/docs/about/

http://clusterlabs.org/wiki/Main_Page

http://www.linux-ha.org/

http://www.openais.org/doku.php

http://www.corosync.org/doku.php

http://kylecordes.com/2009/01/30/drbd-on-ubuntu-804/


--Kishonti István 2010. január 6., 11:06 (UTC)

Személyes eszközök