目次

FreeBSDでHAST/NFS Serverを立てる

本記事は、現在書き直し中です。

以前の記事は、ここにあります。

書き直しの背景

以前の記事を基に FreeBSD/HAST/NFS/CARPを利用した冗長化Network File Systemを構築していたが、以下の問題が残っていた。

  1. File Server(NFS Server)がFailoverすると、結局NFS Client側で以前のFilesystemをmountできない
  2. 起動時に様々な理由によりHASTがうまく初期化されなかったり、Filesystemがexportできなかったりする

これらの問題は、結局のところ

という問題に帰着する。

という問題を、とある某東京工業大学に所属し、かつFreeBSD Projectでも活躍されている、某佐藤先生に気合を込めて語っていたら、とんでもない方法でHASTで構築されたファイルシステムを認識する方法を開拓されてしまったので、「問題提供者の責任」という名前の「ただやってみたいから」というモチベーションでまとめる。

この記事は、FreeBSD ワークショップ 第15回で私が発表した内容と、それに対する佐藤先生の案の資料を基に記載する。

根本的なMotivation

Mail Serverなどに供給するFilesystemは安定性と冗長性が重要である。 しかしながら、Filesystemの冗長化は非常に難しい。 Network Filesystemとして利用するならば、難易度は激烈に上がってしまう。 まして、Freewareだけで構築しようとすると絶望的に難しい。

このような要望をなんとか満たすことを考える。

これらの技術を利用して完全冗長にできるだけ近いネットワークファイルシステムを構築したいというのがモチベーション。

では、何に使うのか?

完全冗長なNetwork File Systemが欲しい局面としては、

など、いわゆるある程度以上の頻度で書き換えが発生する、ある程度以上の規模のシステムがある。

例えばSMTP Serverを考える。

今時、SMTP Serverを構築する際には、Lock問題が発生しないように、

というのが一般的だろう。

この時に、SMTP Server冗長性を確保したいという要望が出ることはしばしばある。

このような場合に、SMTP Server自身の冗長性は、比較的確保しやすい。 しかし、受信したメールを格納するStorageが冗長性を持たなければ、結局、システムとしてはStorageがSPoF(Single Point of Failure)になってしまう。

このような状況を多少なりとも改善するには、Storageを冗長性を上げる必要がある。

以上が、この仕組みを実装するモチベーションである。

なお、HASTの冗長は「片側を書き換えたら即逆側も書き換わる」冗長であり、いわゆるBackupではない。したがって、Backupは別途検討する必要がある。

方式検討

本記事のポイントは、大きく分けると3つ

(1) Block Storage Deviceの冗長化手法

今回はFreeBSDを前提としているので、手法としては2択。

今回は、HASTdを利用する方式とする。

理由は、HASTdしか知らないから。

(2) 冗長化されたStorageのNetwork Filesystemへの提供方法

ここが、佐藤先生と自分の実装の大幅に異なる点。

自分の実装では、FreeBSDに標準添付されている carp-hast-switchを利用し、HASTdとmountを利用する手法を採用

これに対し、佐藤先生は、geom_nopとHASTdを組み合わせた上で、iSCSIを利用して提供する手法を採用

(3) 提供されたStorageのNetwork Filesystemとしての公開方法

Network Filesystemとして公開する方法は数多ある。

しかし、今回は、Client側の実装として、FreeBSD/NetBSD/OpenBSD/CentOS/Ubuntu/MacOS-Xなどがあるため、汎用性が高いプロトコルを利用する必要がある。加えて、できるだけFreeBSDの標準Distributionで配布されているものを利用したかった。

そのため、NFSを利用する。

実装

試験

考察