Não é uma resposta direta à sua pergunta, mas uma arquitetura mais tradicional para esse tipo de coisa seria usar HAST e CARP para cuidar da redundância de armazenamento.
Um resumo básico (consulte a documentação vinculada para obter melhores detalhes):
Máquina A ("Master")
- Configure o daemon HAST & crie um recurso apropriado para cada dispositivo do membro do pool.
- Crie seu dispositivo espelhado do ZFS como faria em qualquer sistema único, usando os dispositivos HAST.
Máquina B ("Escravo")
- Configure o daemon HAST de forma semelhante ao que você fez no mestre, mas exiba-o como um nó secundário / escravo.
(O HAST irá espelhar todos os dados do Mestre para o Escravo para você)
Ambas as máquinas
- Configure o CARP conforme descrito na documentação HAST do Handbook do FreeBSD .
Toda a magia de failover será tratada por você.
A grande advertência aqui é que o HAST só funciona em um nível Mestre / Escravo, então você precisa de pares de máquinas para cada LUN / conjunto de LUNs que você deseja exportar.
Outra coisa a ter em conta é que a sua arquitectura de armazenamento não será tão flexível como seria com o design que propôs:
Com o HAST você está limitado ao número de discos que você pode colocar em um par de máquinas.
Com a estrutura semelhante a malha ISCSI que você propôs, você pode, teoricamente, adicionar mais máquinas exportando mais LUNs e crescer o quanto quiser (até o limite de sua rede).