Here's another one.

Two identical servers are sitting side by side.  They could be connected to 
each other via anything (presently using crossover ethernet cable.)  And 
obviously they both connect to the regular LAN.  You want to serve VM's from at 
least one of them, and even if the VM's aren't fault tolerant, you want at 
least the storage to be live synced.  The first obvious thing to do is simply 
cron a zfs send | zfs receive at a very frequent interval.  But there are a lot 
of downsides to that - besides the fact that you have to settle for some 
granularity, you also have a script on one system that will clobber the other 
system.  So in the event of a failure, you might promote the backup into 
production, and you have to be careful not to let it get clobbered when the 
main server comes up again.

I like much better, the idea of using a zfs mirror between the two systems.  
Even if it comes with a performance penalty, as a result of bottlenecking the 
storage onto Ethernet.  But there are several ways to possibly do that, and I'm 
wondering which will be best.

Option 1:  Each system creates a big zpool of the local storage.  Then, create 
a zvol within the zpool, and export it iscsi to the other system.  Now both 
systems can see a local zvol, and a remote zvol, which it can use to create a 
zpool mirror.  The reasons I don't like this idea are because it's a zpool 
within a zpool, including the double-checksumming and everything.  But the 
double-checksumming isn't such a concern to me - I'm mostly afraid some 
horrible performance or reliability problem might be resultant.  Naturally, you 
would only zpool import the nested zpool on one system.  The other system would 
basically just ignore it.  But in the event of a primary failure, you could 
force import the nested zpool on the secondary system.

Option 2:  At present, both systems are using local mirroring ,3 mirror pairs 
of 6 disks.  I could break these mirrors, and export one side over to the other 
system...  And vice versa.  So neither server will be doing local mirroring; 
they will both be mirroring across iscsi to targets on the other host.  Once 
again, each zpool will only be imported on one host, but in the event of a 
failure, you could force import it on the other host.

Can anybody think of a reason why Option 2 would be stupid, or can you think of 
a better solution?
zfs-discuss mailing list

Reply via email to