web-dev-qa-db-ja.com

BtrfsでのMySQLとLxDの使用

私は、ext4ファイルシステムを備えたUbuntu16.04ワークステーションを持っています。

  1. LxDで遊ぶときは、lightening-fastスナップショット機能が必要です(私の画像は通常大きいため)。私の理解では、この機能は、バッキングファイルシステムがBtrfsなどのCoWファイルシステムである場合にのみ達成できます。

(注:これまでに遭遇したBtrfsのパフォーマンス関連の主な警告は、noatimeマウントフラグの推奨される使用法だけです。)

  1. しかし、このシステムには(ext4ファイルシステムと比較して)パフォーマンスが低下したくないMySQLインスタンスもあるため、BtrfsでサポートされているMySQLへの切り替えに関する潜在的な問題について最終チェックを行うことにしました。そして、 私が見つけたものを見てください

通常、Btrfsを'nodatacow'オプションでマウントし、コピーオンライトを無効にすることをお勧めします。COWは断片化、ディッシュスラッシング、CPUを引き起こし、RAMスパイクが多い場合はランダム書き込み。

さて、それは本当のダンパーのようです!

質問:Btrfsを使用して高速スナップショットとパフォーマンスの高いMySQLインスタンスの両方を使用できる方法はありますか?

4
Harry

私は自分のコメントを試しましたが、すべてが正常に機能しているようです。より良い代替案はまだ歓迎されています。

これが私がしたことです。

# 1. Initial, onetime setup.
#   1.a) Create a sparse, 20G file.
      $ truncate -s 20G disk.20g

#   1.b) Format the loopback device with Btrfs.
      $ losetup /dev/loop0 disk.20g
      $ mkfs.btrfs /dev/loop0

# 2. Do this every time you wish to actually start using LxD.
# Note: Replace '/dev/loop0' with whatever loop-device is free on your system.
  $ Sudo service lxd stop
  $ Sudo mkdir -p /var/lib/lxd
  $ Sudo mount -o noatime /dev/loop0 /var/lib/lxd
  $ Sudo service lxd start

# 3. Do this to gracefully 'shutdown' the effects of Step 2.
  $ Sudo service lxd stop
  $ Sudo umount /var/lib/lxd
  $ losetup -d /dev/loop0
  $ Sudo service lxd start

繰り返しになりますが、

  1. 私のホストOSのプライマリファイルシステムはExt4です。 disk.20g上記のファイルはこのファイルシステムにのみ存在します。このファイルシステムは、パフォーマンスがBtrfsによって悪影響を受ける可能性のあるMySQLおよびその他のソフトウェアを引き続きホストできます。
  2. LxDは、イメージとコンテナーをBtrfsパーティションに保存します。これにより、非常に高速なスナップショットが可能になります。
2
Harry

断片化は、コピーオンライトで設計されているファイルシステムの大部分が避けられない副作用です。これは、そもそもほぼ無料のファイルシステムスナップショットを可能にするものでもあります。

この理由は非常に単純です。ブロックが変更されるたびに、新しいブロックを元のブロック以外の場所に書き込む必要があります。したがって、ファイルが元々連続していたとしても、変更された後ではありません。

Btrfs nodatacowがスナップショットとどのように相互作用するかはわかりませんが、データセットにスナップショットを作成すると、フラグに関係なく、少なくとも部分的なコピーオンライト動作が強制されるように感じます。使用する;それ以外の場合、スナップショットを介して古いデータにどのようにアクセスできますか?

ただし、これがMySQLのパフォーマンスに必ずしも深刻な影響を与えるとは限りません次の2つの理由があります。

  • 最新のディスクは、シングルユーザーワークロードに対して非常に高速です(システムが「ワークステーション」であるとおっしゃっているので、最も興味があると思います)。
  • 最新のオペレーティングシステムにはかなり優れたキャッシュアルゴリズムがあるため、実際に物理ストレージにアクセスする必要性が少なくなります。

アイデアを提供するために、私は自分でZFSを実行しています(Btrfsはそこから多くのアイデアを借りています)。現在、スクラブが進行中です。問題のプールは6ディスクのraidz2であり、その優れたパフォーマンスではあまり知られていません。物理的には6つの7200 rpmディスク(2つのSATA、4つのSAS)で支えられており、特に優れたIOPSについては正確には知られていません。 ZFSスクラブは、ディスク上のMerkleツリー全体をナビゲートし、すべてのデータを読み取り、すべてのチェックサムを検証して、すべてが以前に書き込まれたとおりに読み戻されることを確認します。私の場合、途中ですべてのSHA-256ハッシュを計算します。現在のスクラブ速度(最初のメタデータが多い部分を超えた後、重いシークが含まれます)はホバリングしています約200MB /秒そして実際にはゆっくりと上昇しています。これは実際のPlatterI/Oであり、キャッシュは含まれていません(永続ストレージに何があるかを確認する場合、キャッシュは意味をなさないため) 。

確かに、コピーオンライトファイルシステムに移行すると、断片化によるパフォーマンスの低下が見られる可能性が非常に高くなります。しかし、ケーキを食べて保管することもできません。高速で低コストのスナップショットが必要な場合は、スナップショットを取得するために他の何かをあきらめなければならない可能性があります。

あなたの場合はベンチマークです。 Btrfsストレージをセットアップし、そこにMySQLデータベースのコピーを配置して、妥当なワークロードで2つがどのように機能するかを確認します。

4
a CVn