niedziela, 3 lutego 2013

Replikacja danych przy wykorzystaniu DRDB oraz RAID1 - Debian Squeeze

Chcemy stworzyć prosty w działaniu RAID1 ( czyli dublowanie się danych, tak aby zapewnić dostępność przy uszkodzeniu jednego dysku ). W tym celu wykorzystamy DRDB (Distributed Replicated Block Device). Poniżej schemat replikacji danych z jednej maszyny na drugą.






Będziemy potrzebowali dwóch maszyn:


- server1.example.com (IP address 192.168.0.100)- server2.example.com (IP address: 192.168.0.101)

Musimy posiadać około 30 GB wolnego miejsca na partycji /dev/sdb. Równie ważne jest umożliwienie komunikacji między maszynami. Dlatego dodamy odpowiednie wpisy do /etc/hosts.

1) Dodanie wpisów do /etc/hosts:

Server1 / Server2


vi /etc/hosts


dodajemy do niego:


127.0.0.1       localhost.localdomain   localhost192.168.0.100   server1.example.com     server1192.168.0.101   server2.example.com     server2
# The following lines are desirable for IPv6 capable hosts::1     ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters






2) Ustawiamy synchronizację czasową:


Server1 / Server2


apt-get install ntp ntpdate







3) Konfiguracja partycji:


Server1 / Server2

Na początek sprawdzimy jak wygląda nasz dysk:

fdisk -l

Na dole polecenia powinniśmy zobaczyć:


Disk /dev/sdb doesn't contain a valid partition table


Co oznacza, że ta partycja nie została przygotowana do użycia. Teraz ją przygotujemy do użycia:



fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x8042e800.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
pPartition number (1-4): 1
First cylinder (1-3916, default 1): Enter
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-3916, default 3916): Enter
Using default value 3916
Command (m for help):t
Selected partition 1
Hex code (type L to list codes): 83
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


Powinniśmy teraz zobaczyć dysk gotowy do pracy:


fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes255 heads, 63 sectors/track, 3916 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00029d5c
   Device Boot      Start         End      Blocks   Id  System/dev/sda1   *           1        3793    30461952   83  Linux/dev/sda2            3793        3917      992257    5  Extended/dev/sda5            3793        3917      992256   82  Linux swap / Solaris
Disk /dev/sdb: 32.2 GB, 32212254720 bytes255 heads, 63 sectors/track, 3916 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x78f21e78
   Device Boot      Start         End      Blocks   Id  System/dev/sdb1               1        3916    31455238+  83  Linux







4) Instalacja oraz konfiguracja DRDB:


Server1 / Server2


apt-get install drbd8-utils


Ładujemy moduł drbd


modprobe drbd



Sprawdzamy czy działa:


lsmod | grep drbd




drbd                  193312  0lru_cache               5042  1 drbdcn                      4563  1 drbd



Skonfigurujemy teraz replikację na nasze maszyny:


cp /etc/drbd.conf /etc/drbd.conf_orig
cat /dev/null > /etc/drbd.conf
vi /etc/drbd.conf



dodajemy do niego:



global { usage-count no; }common { syncer { rate 100M; } }resource r0 {        protocol C;        startup {                wfc-timeout  15;                degr-wfc-timeout 60;        }        net {                cram-hmac-alg sha1;                shared-secret "secret";        }        on server1.example.com {                device /dev/drbd0;                disk /dev/sdb1;                address 192.168.0.100:7788;                meta-disk internal;        }        on server2.example.com {                device /dev/drbd0;                disk /dev/sdb1;                address 192.168.0.101:7788;                meta-disk internal;        }}



Ważne jest, aby wpisy w powyższym pliku odpowiadały rzeczywistości (nazwy hostów, IP oraz naszą partycję).

Następnie inicjujemy DRDB:


drbdadm create-md r0


w odpowiedzi otrzymamy:


Writing meta data...initializing activity logNOT initialized bitmapNew drbd meta data block successfully created.


Startujemy DRDB:


/etc/init.d/drbd start


Server1

Ustawimy Server1 jako główny węzeł w naszym RAID1:


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

Nastąpi synchronizacja danych między węzłami. 

Server2

Możemy zobaczyć jak przebiega synchronizacja wydając:

cat /proc/drbd

Server1

Sformatujemy teraz naszą partycję oraz zamontujemy go, aby DRDB go widział.


mkfs.ext3 /dev/drbd0
mkdir /data
mount /dev/drbd0 /data

Wydając polecenie df -h, będziemy mogli zobaczyć całą strukturę naszego dysku, wraz z podłączonym do niego udziałem /dev/drbd0.







5) Sprawdzamy działanie naszej replikacji:



Server1

Tworzymy przykładowe pliki do synchronizacji:


touch /data/test1.txttouch /data/test2.txt


Odmontowujemy katalog /data:



umount /data


Teraz ustawimy Server1 jako "slave" w naszym RAID1.



drbdadm secondary r0



Server2


Ustawimy Server2 jako "master" w naszym RAID1


drbdadm primary r0


sprawdzamy czy Server2 faktycznie stał się masterem:


cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)



srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----    ns:4 nr:32083300 dw:32083304 dr:325 al:1 bm:1920 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0



następnie utworzymy katalog data, do którego zostaną przekopiowane nasze dane:


mkdir /datamount /dev/drbd0 /data

następnie powinniśmy sprawdzić czy znajdują się tam nasze dwa wcześniej utworzone pliki:


ls -l /data/
-rw-r--r-- 1 root root     0 Aug  8 12:48 test1.txt-rw-r--r-- 1 root root     0 Aug  8 12:48 test2.txt


Wszystko udało się, nasze pliki są replikowane.

Server1

W tym samym czasie Server1 jest teraz węzłem pomocniczym:

cat /proc/drbd


version: 8.3.7 (api:88/proto:86-91)srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----    ns:32083300 nr:4 dw:629064 dr:31454797 al:529 bm:2044 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0



Brak komentarzy:

Prześlij komentarz