ZFS to niesamowity system plików i rozwiązuje wiele moich lokalnych i współdzielonych potrzeb w zakresie przechowywania danych.
Chociaż podoba mi się pomysł klastrowego ZFS, tam gdzie to możliwe, czasem jest to niepraktyczne lub potrzebuję pewnego geograficznego oddzielenia węzłów magazynowania.
Jednym z moich przypadków użycia jest replikacja pamięci o wysokiej wydajności na serwerach aplikacji Linux. Na przykład popieram starsze oprogramowanie, które korzysta z dysków SSD NVMe o niskim opóźnieniu dla swoich danych. Aplikacja ma opcję kopii lustrzanej na poziomie aplikacji, która może replikować się na serwer pomocniczy, ale często jest niedokładna i trwa 10 minut RPO .
Rozwiązałem ten problem, mając serwer pomocniczy (również działający na ZFS na podobnym lub odmiennym sprzęcie), który może być lokalny, zdalny lub oba. Łącząc trzy narzędzia wymienione poniżej, stworzyłem rozwiązanie do replikacji, które zapewnia mi ciągłą replikację, głębokie przechowywanie migawek i elastyczne opcje przełączania awaryjnego.
Zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot
Po prostu przydatne narzędzie do włączania okresowych migawek systemu plików ZFS. Zazwyczaj działam według następującego harmonogramu dotyczącego wielkości produkcji:
# /etc/cron.d/zfs-auto-snapshot
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //
Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid
Ten program może uruchamiać ad-hoc snap / replikację systemu plików ZFS do dodatkowego celu. Używam tylko syncoidowej części produktu.
Zakładając server1 i server2 , proste polecenia Uruchom z server2 aby wyciągnąć dane z serwer1 :
#!/bin/bash
/usr/local/bin/syncoid root@server1:vol1/data vol2/data
exit $?
Monit - https://mmonit.com/monit/
Monit to niezwykle elastyczny harmonogram zadań i menedżer realizacji. Domyślnie działa w odstępie 30 sekund, ale modyfikuję konfigurację, aby użyć 15-sekundowego podstawowego cyklu czasowego.
Przykładowa konfiguracja, która uruchamia powyższy skrypt replikacji co 15 sekund (1 cykl)
check program storagesync with path /usr/local/bin/run_storagesync.sh
every 1 cycles
if status != 0 then alert
Jest to łatwe do zautomatyzowania i dodania za pomocą zarządzania konfiguracją. Pakując wykonanie migawki / replikacji w Monit, otrzymujesz scentralizowany status, kontrolę zadań i alarmowanie (e-mail, SNMP, skrypt niestandardowy).
W rezultacie mam serwery, które mają wiele miesięcy miesięcznych migawek oraz wiele punktów wycofywania i przechowywania w ciągu: https://pastebin.com/zuNzgi0G - Plus, ciągła, 15-sekundowa replika atomowa:
# monit status
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:37:59
last exit value 0
data collected Wed, 05 Apr 2017 05:37:59
.
.
.
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:38:59
last exit value 0
data collected Wed, 05 Apr 2017 05:38:59