FreeBSD: Utöka ZFS mirror pool

Permalänk
Medlem

FreeBSD: Utöka ZFS mirror pool

Hej!

Har två serverar på olika geografiska platser, men de ska innehålla samma data. Har nu varit vid den ena och adderat stora mängder data till den servern. Det är alltför mycket för att synkronisera detta över nätet. Det finns flera sätt att lösa detta på, jag har gjort så här:

Jag tar en av hårddiskarna från den servern som inte har det aktuella och adderar denna till zpoolen som är aktuell. Sedan plockar jag ut den och importerar på den andra servern. Servrarna är likadant konfigruerade så det lirar fint med monteringspunkter när jag importerar poolen.

Ett annat alternativ skulle kunna vara att skicka ett ZFS snapshot och bilda ett nytt filsystem på hårddisken som jag har monterat in i servern.

Det jag dock undrar över är hur jag ska skapa dessa pooler på bästa sätt. Man vill ju köra ashift=12. Enligt en guide jag följde för att få så stora sektorer körde jag så här:

gpart destroy -F ada3 gpart create -s gpt ada3 gpart add -a 4k -t freebsd-zfs -l disk3 ada3 gnop create -S 4096 /dev/gpt/disk3 zpool attach data gpt/disk1 /dev/gpt/disk3.nop

Jag funderar på hur nödvändigt det är att köra gnop kommandot? Detta står det i guiden.

Citat:

If using an 'advanced format' drive, the following commands will create virtual devices with 4k sectors, to ensure ZFS uses the correct block size:

Det är en ganska ny hårddisk, WD Red 3TB. Förut använde jag dessa under ubuntu, då blev det automatiskt 4K sektorstorlek. Kör jag zpool status nu får jag följande:

zpool status data pool: data state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Thu Jan 2 13:07:32 2014 54.6G scanned out of 530G at 89.3M/s, 1h30m to go 54.6G resilvered, 10.30% done config: NAME STATE READ WRITE CKSUM data ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gpt/disk2 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 gpt/disk3.nop ONLINE 0 0 0 (resilvering) errors: No known data errors

När jag exporterar denna och sedan importerar försvinner .nop och det står endast gpt/disk3.nop. Hade jag behövt hålla på med detta?

Permalänk
Medlem

GNOP-grejen är endast för att få till 4k (ashift från zdb ska vara 12) sektorer, då dom flesta nya diskar är 4k men rapporterar 512b.
Import/export påverkas inte.

Permalänk
Medlem

När du skickar ett snapshot med zfs send / receive så skapas det en inkrementell kopia som består av ren zfs data.

Detta sker på datalagret i zfs (DMU) och har inte något att göra med vilken typ av pool som du kör på. Raidkonfiguration, ashift värde, etc. lever i vedev lagret som är ett steg närmre hårdvaran än DMU.

Bara för att zfs är monolitiskt med tanke på att det inte går att separera komponenterna, betyder inte att det inte är olika lager i implementationen.

Du kan fint mounta en disk på din server med mest data och skicka en zfs send till en fil på denna och köra zfs receive på mottagar sidan. Nästa gång du gör detta så kommer du bara att behöva skicka ändringarna som kom til efter denna gången.

EDIT: För att förtydliga - Skapa pooler som passar dina krav på säkerhet och hårdvara vid varje server. Kör aldrig utan ashift=12. Flytta sedan filsystem med zfs send / zfs receive och snapshots.

Permalänk
Medlem

Tack för bra svar! Jag exporterade poolen och tog ur en disk ur speglingen, nästa gång ska jag kolla på zfs send och receive. Har kollat lite på det innan men då servrarna har egna liv (med periodiska snapshot bla) och att datat kan ändras på dem samtidigt blev detta klurigt. Förmodligen är all stor data synkroniserad nu och endast hanterbara mängder inkrementell data kommer att synkroniseras mellan dem (inte världens snabbaste uppkopplingar).

Skapade denna tråd förut angående funderingar kring hur synkroniseringen ska gå till.
http://www.sweclockers.com/forum/17-linux-och-ovriga-operativ...

Jag har helt enkelt valt att köra rsync just nu.

Permalänk
Medlem

Jag rsyncade 500GB över en ADSL lina.
Servern min är uppsatt att rsynca var 24e timme, och använder FreeBSDs "lockf" för att simulera ett lås. Finns låset så körs processen redan, så då görs inget.
Visst tog det en herrans tid, men det gjorde inget i detta fallet.

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk
Medlem
Skrivet av Schrimp:

Jag rsyncade 500GB över en ADSL lina.
Servern min är uppsatt att rsynca var 24e timme, och använder FreeBSDs "lockf" för att simulera ett lås. Finns låset så körs processen redan, så då görs inget.
Visst tog det en herrans tid, men det gjorde inget i detta fallet.

Det låter intressant! Det är ADSL lina jag har, och de stora ändringarna hade skett på den sidan med långsam upload, hehe! Hur gör du om någon ändrar saker på servrarna samtidigt?

Tex kör min pappas macbook pro kontinuerliga timemachine backups, det vill jag ju inte skriva över härifrån. Jag kan anta ändringar oftast sker hemma hos mig men så är inte alltid fallet. Blir lite klurigt att göra det automatiskt. Kanske väljer att automatsynka de delarna som jag vet inte ändras hemma, men ändras här?

Förstod inte riktigt lockf, vill du utveckla lite?

Permalänk
Medlem
Skrivet av trexake:

Det låter intressant! Det är ADSL lina jag har, och de stora ändringarna hade skett på den sidan med långsam upload, hehe! Hur gör du om någon ändrar saker på servrarna samtidigt?

Tex kör min pappas macbook pro kontinuerliga timemachine backups, det vill jag ju inte skriva över härifrån. Jag kan anta ändringar oftast sker hemma hos mig men så är inte alltid fallet. Blir lite klurigt att göra det automatiskt. Kanske väljer att automatsynka de delarna som jag vet inte ändras hemma, men ändras här?

Förstod inte riktigt lockf, vill du utveckla lite?

Det är kanske inget rättvist scenario, jag har bara offiste backup, så jag replikerar bara datan åt ett håll.

lockf förklaras rätt bra här: http://dannyman.toldme.com/2010/09/20/lockf-flock-cron/
Tanken är att innan den börjar synca något, så kollar den om processen kan erhålla ett lås, det gör den genom att försöka skapa en fil. Finns filen så kan låset inte skapas, och processen "hänger" där i väntan på att få skapa låset. När processen som körs av lockf är klar, så tas filen bort, och scriptet mailar output till mig. (Nu har jag iof gått ifrån mailandet och låter syncandet göras av Jenkins, så jag bara får mail när något går fel)
Sedan tar nästa process på kö och skapar låset osv.. Visst kan det hänga ett gäng processer som väntar, men vi snackar inga farliga mängder, och när väl en sync är klar så går resterande fort att köra, så det har aldrig blivit något fel.

Dom där 500GB var väl klara på 2 veckor eller något, så det var väl runt 15 processer som skulle brännas av, det hade väl skett lite ändringar som dom efterkommande processerna fick synca, men det hela gick väldigt smidigt.

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk
Medlem

Det känns konstigt att ha de två datalarginarna i osynk hela tiden. Kan du inte serva reads från båda men writes till en?

OT
Om det är någon som är intresserad av ZFS så vil jag bara tipsa om denna föreläsningen på ämnet med Jeff Bonwick och Bill Moore som arbetade på SUN och var med och utvecklade ZFS. Det är inte bibeln på ZFS , men en helig skrift. Har man läst lite datavetenskap (alogirtmer och datastrukturer) så fastnar det mesta utan problem.
ZFS: The Last Word in File Systems Part 1
ZFS: The Last Word in File Systems Part 2
ZFS: The Last Word in File Systems Part 3
Slides

Permalänk
Medlem
Skrivet av beh:

Det känns konstigt att ha de två datalarginarna i osynk hela tiden. Kan du inte serva reads från båda men writes till en?

OT
Om det är någon som är intresserad av ZFS så vil jag bara tipsa om denna föreläsningen på ämnet med Jeff Bonwick och Bill Moore som arbetade på SUN och var med och utvecklade ZFS. Det är inte bibeln på ZFS , men en helig skrift. Har man läst lite datavetenskap (alogirtmer och datastrukturer) så fastnar det mesta utan problem.
ZFS: The Last Word in File Systems Part 1
ZFS: The Last Word in File Systems Part 2
ZFS: The Last Word in File Systems Part 3
Slides

Ska kolla in det där när jag har tid !

Hade jag haft en bra lina för båda hade jag valt att bara skriva till en! Men det tar så fruktansvärt lång tid när det blir större datamängder! Vad är det fiffigaste sättet att routa trafiken, så att jag bara ansluter till en adress men alltid kommer fram till den snabbaste?

Permalänk
Medlem

Hmm, det vet jag inte riktigt eftersom det är svårt för servern att veta om den är flaskhalsen eller inte. Kan du inte berätta lite mer om hur systemet används idag och vad det är för typ av skrivningar som kommer till maskinerna, om de överskriver befintlig data endast lägger till eller hur det nu ser ut.

Permalänk
Medlem

Det kanske är onödigt egentligen. Det är lite olika, ibland skrivs det över och ibland läggs det till. Det lutar åt att det blir en slags rsync synkronisering som jag förmodligen kommer få pilla lite mer själv också. Jag vet vilka delar av filsystemet som uppdateras oftast hemma hos föräldrarna, och vilka som uppdateras oftast här. Hade maskinen hos föräldrarna bara varit backup hade jag valt att skicka inkrementella ZFS snapshot.

Funderar på hur jag ska göra med rsync på bästa sätt. Jag vill behålla filrättigheterna, som root kan jag göra detta utan problem. Har ett starkt root password men vad jag kan se så rekommenderas det inte att tillåta root att logga in via SSH. Just nu är varje användare owner på sina filer och filerna tillhör bara användaren och ingen annan grupp. Är det smartaste att lägga till filerna till en administratörsgrupp och köra rsyncen via detta konto?

Jag stötte på ett problem med otroligt många inbrottsförsök. Kände att jag var tvungen att installera något stop mot SSH bruteforce försök. Ett enkelt sätt är att byta till någon hög port men det kändes inte riktigt som en lösning jag ville använda. Jag gjorde så att jag inkluderade PF firewall i kärnan enligt denna guide:
http://bin63.com/how-to-install-and-use-the-pf-firewall-on-fr...
Och installerade sshguard-pf enligt denna:
https://forums.freebsd.org/viewtopic.php?&t=39196

Det verkar göra biffen. Dock får jag inte SAMBA att fungera över nätverket, har försökt att tillåta all kommunikation till/från servern och det lokala nätverket. Har en router som brandvägg utåt, endast port 22 är öppen för SSH. Detta är min pf.conf

udp_services = "{ ntp }" tcp_services = "{ smtp, ssh, http, 49152:65535 }" local_host="192.168.1.150" allowed_ips="{ 192.168.1.0/24 }" table <blockedips> persist file "/etc/blocked_ips.conf" interface="bge0" set block-policy return set skip on lo0 scrub in all block all block drop in log quick on $interface from <blockedips> to any pass out on $interface inet from $local_host to any pass in on $interface inet proto tcp from any to $local_host port $tcp_services pass in on $interface inet proto udp from any to $local_host port $udp_services pass in on $interface inet proto icmp from any to $local_host icmp-type echoreq pass out on $interface inet from $local_host to $allowed_ips pass in on $interface inet from $allowed_ips to $local_host table <sshguard> persist block drop in log quick on $interface inet from <sshguard> to any

Det fetmarkerade är det jag har gjort för att tillåta det lokala nätverket. Har jag tänkt rätt?

Lyckades lösa detta!