ユーザ用ツール

サイト用ツール


os:zfs_tips

文書の過去の版を表示しています。


ZFS Tips

ZFS を運用するにあたってのチップスです。

ハードディスクのパーティション

プールに追加するハードディスクはパーティションを切っておいたほうが良いです。

パーティションがないほうが性能面では有利になりますが、その差はわずかです。 長年運用を続けたあとにハードディスクを故障で交換する際にセクタ数まで含めて同じハードディスクが 入手できるかどうかは分かりません。 おそらくより大容量のモデルを購入することになるでしょう。 その場合、予めパーティションを作成しておけば、同じサイズにパーティションを切り直すだけで、 交換ディスクとして使用することができます。 余ったパーティションを他の用途に使うこともできます。 ディスク障害から復旧したら後日、プールサイズの拡張などを検討すればよいのです。

ARC サイズの制限

デフォルトでは搭載メモリ量 - 1GB が ARC の最大値として割り当てられます。 つまり 8GB のメモリを搭載した環境では 7GB まで ARC に使われる可能性があります。

これを制限するパラメータが sysctl の vfs.zfs.arc_max です。 アプリケーションにどの程度メモリを空けて置きたいのかを考えて、ARC を制限しましょう。

例えば 4GB に制限するには以下のようにします。

sysctl vfs.zfs.arc_max=4294967296

L2ARC のメモリ使用量

L2ARC は割り当てた容量の約 1.59% のメモリをその管理に使用します。 つまりキャッシュヒット率をあげようとして 1TB の SSD を割り当てたとすると

1 TB * 0.0159 = 15.9 GB

で約16GBのメモリを使用します。

メインメモリがこのサイズ以下の環境では満足な性能を得られないでしょう。

逆に L2ARC の管理に 1GB のメモリを割り当てると考えると、 逆算して 63GB の L2ARC を割り当てるべきということが分かります。

1 GB / 0.0159 = 62.89 GB

L2ARC はコールドブート

FreeBSD 12.0 現在、 L2ARC の内容は電源を落とすと失われます。 (将来的には改善される見込みです)

厳密には L2ARC のメディアに乗っている内容は保持されますが、 メモリ上の管理データを失いますので、その内容を再利用してくれません。

リブート直後は L2ARC は全てミスヒットすることを覚えておいてください。 必要ならばアプリケーションレベルでウォームアップを行ってください。

ユーザマウント

zfs では特定のユーザに対し、一部のファイルシステム操作を許可する設定ができます。 これを利用すると、例えばユーザのホームディレクトリの下に限って、zfs ファイルシステムの作成、マウント、スナップショットの作成、クローンの作成などを許可することができます。 許可の設定自体は root 権限が必要ですが、一度許可を与えてしまえば限られた範囲の操作はユーザ権限で行うことができます。

例えば、 `zpool/home/alice` にユーザ alice のホームディレクトリがあった場合、 alice に対して以下の操作を許可するようにします。

# zfs allow alice create,destroy,mount,clone,promote,rename,snapshot,rollback zpool/home/alice

権限の意味はそれぞれ zfs のサブコマンドに対応しています。 上記の例では ファイルシステムの作成、破棄、マウント、クローン、クローン元への依存を削除、リネーム、スナップショット作成、ロールバック、を alice に対して許可しています。

なお、FreeBSD ではユーザ権限でマウントを許可する際には `sysctl vfs.usermount=1` が必要です。

/etc/sysctl.conf に `vfs.usermount=1` を書くのを忘れないようにしましょう。

`vfs.usermount=1` を設定すると zfs だけでなく、 CD/DVD などのマウントや fuse によるマウントも権限があれば実行できるようになります。

PostgreSQL

record size

PostgreSQL のデータ領域に ZFS を使う場合、record size を 8k にしましょう。 デフォルトでは 128k です。

例として zroot/postgres に対して record size を 8k にするには以下を実行します。

zfs set recordsize=8k zroot/postgres

ZFS は record size 毎にまとめてディスクアクセスを行います。 PostgreSQL は 8k 単位でディスクアクセスを行いますので、 PostgreSQL が 8k を書き込もうとしたときには ZFS は 128k サイズを読み込んだ上で 8k を変更し、それを 128k 単位で書き込もうとすることになり、効率が悪くなるのです。

log bias

log bias を throughput にすると、ZFS は書き込みデータをログデバイスに書き込むことをやめます。PostgreSQL には WAL がありますので、ZFS がログを書き込む意味はないと言っても良いでしょう。 無駄な書き込みがなくなる分、性能向上が期待できます。

zfs set logbias=throughput zroot/postgres

primary cache

PostgreSQL はアプリケーション側で必要なデータをメモリ内にキャッシュしますので、 ZFS 側でデータをキャッシュする意味は少なくなります。 もし、ARC のサイズを小さくしたいならば、メタデータのみキャッシュするように変更することができます。

zfs set primarycache=metadata zroot/postgres

これにより性能向上が得られるかどうかはケースバイケースです。 PostgreSQL 側のバッファサイズなどと合わせて全体をチューニングした上で判断してください。

compression

lz4 による圧縮は非常に高速に動作します。 圧縮率はそれほど良くはありませんが、半分程度に圧縮されれば、見た目のスループットは2倍に向上します。圧縮率が悪くても lz4 が高速に動作するためペナルティが少なく、設定するメリットは十分にあります。

zfs set compression=lz4 zroot/postgres

MySQL

<未稿>

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
os/zfs_tips.1572226238.txt.gz · 最終更新: 2019/10/28 10:30 by yuichiro

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: 2-Clause BSD License
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki