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.
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
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
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
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).