web-dev-qa-db-ja.com

DRBDデバイス上のXenDomU:バリアエラー

フェイルオーバーを容易にするために、DRBDストレージを備えたXenDomUのセットアップをテストしています。ほとんどの場合、DomUを起動した直後に、IOエラーが発生します:

[    3.153370] EXT3-fs (xvda2): using internal journal
[    3.277115] ip_tables: (C) 2000-2006 Netfilter Core Team
[    3.336014] nf_conntrack version 0.5.0 (3899 buckets, 15596 max)
[    3.515604] init: failsafe main process (397) killed by TERM signal
[    3.801589] blkfront: barrier: write xvda2 op failed
[    3.801597] blkfront: xvda2: barrier or flush: disabled
[    3.801611] end_request: I/O error, dev xvda2, sector 52171168
[    3.801630] end_request: I/O error, dev xvda2, sector 52171168
[    3.801642] Buffer I/O error on device xvda2, logical block 6521396
[    3.801652] lost page write due to I/O error on xvda2
[    3.801755] Aborting journal on device xvda2.
[    3.804415] EXT3-fs (xvda2): error: ext3_journal_start_sb: Detected aborted journal
[    3.804434] EXT3-fs (xvda2): error: remounting filesystem read-only
[    3.814754] journal commit I/O error
[    6.973831] init: udev-fallback-graphics main process (538) terminated with status 1
[    6.992267] init: plymouth-splash main process (546) terminated with status 1

Drbdsetupのマンページには、LVM(私が使用している)はバリア(tagged command queuingまたはnative command queingとしてよく知られています)をサポートしていないと書かれているので、バリアを使用しないようにdrbdデバイスを構成しました。これは/proc/drbdで見ることができます( "wo:f、フラッシュを意味し、drbdがバリアの後に選択する次のメソッド):

 3: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
    ns:2160152 nr:520204 dw:2680344 dr:2678107 al:3549 bm:9183 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

そして他のホストで:

 3: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
    ns:0 nr:2160152 dw:2160152 dr:0 al:0 bm:8052 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Drbdのドキュメントに従って、オプションdisable_sendpageも有効にしました。

cat /sys/module/drbd/parameters/disable_sendpage
Y

また、マウントオプションとしてfstabにbarriers = 0を追加してみました。それでも時々それは言う:

[   58.603896] blkfront: barrier: write xvda2 op failed
[   58.603903] blkfront: xvda2: barrier or flush: disabled

Ext3にバリアなしのオプションがあるかどうかさえわかりません。そして、私のストレージシステムの1つだけがバッテリーでバックアップされているので、とにかくスマートではありません。

それを無効にしたときに、なぜそれでもバリアについて比較するのですか?

両方のホストは次のとおりです。

Debian: 6.0.4
uname -a: Linux 2.6.32-5-xen-AMD64
drbd: 8.3.7
Xen: 4.0.1

ゲスト:

Ubuntu 12.04 LTS
uname -a: Linux 3.2.0-24-generic pvops

drbdリソース:

resource drbdvm
{
  meta-disk internal;
  device /dev/drbd3;

  startup
  {
    # The timeout value when the last known state of the other side was available. 0 means infinite.
    wfc-timeout 0;

    # Timeout value when the last known state was disconnected. 0 means infinite.
    degr-wfc-timeout 180;
  }

  syncer
  {
    # This is recommended only for low-bandwidth lines, to only send those
    # blocks which really have changed.
    #csums-alg md5;

    # Set to about half your net speed
    rate 60M;

    # It seems that this option moved to the 'net' section in drbd 8.4. (later release than Debian has currently)
    verify-alg md5;
  }

  net
  {
    # The manpage says this is recommended only in pre-production (because of its performance), to determine
    # if your LAN card has a TCP checksum offloading bug.
    #data-integrity-alg md5;
  }

  disk
  {
    # Detach causes the device to work over-the-network-only after the
    # underlying disk fails. Detach is not default for historical reasons, but is
    # recommended by the docs.
    # However, the Debian defaults in drbd.conf suggest the machine will reboot in that event...
    on-io-error detach;

    # LVM doesn't support barriers, so disabling it. It will revert to flush. Check wo: in /proc/drbd. If you don't disable it, you get IO errors.
    no-disk-barrier;
  }

  on Host1
  {
    # universe is a VG
    disk /dev/universe/drbdvm-disk;
    address 10.0.0.1:7792;
  }

  on Host2
  {
    # universe is a VG
    disk /dev/universe/drbdvm-disk;
    address 10.0.0.2:7792;
  }
}

DomU cfg:

bootloader = '/usr/lib/xen-default/bin/pygrub'

vcpus       = '2'
memory      = '512'

#
#  Disk device(s).
#
root        = '/dev/xvda2 ro'
disk        = [
                  'phy:/dev/drbd3,xvda2,w',
                  'phy:/dev/universe/drbdvm-swap,xvda1,w',
              ]

#
#  Hostname
#
name        = 'drbdvm'

#
#  Networking
#
# fake IP for posting
vif         = [ 'ip=1.2.3.4,mac=00:16:3E:22:A8:A7' ]

#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

私のテストセットアップでは、プライマリホストのストレージはバッテリー付きの9650SE SATA-II RAIDPCIeです。二次はソフトウェアRAID1です。

DRBD + Xenは広く使用されていませんか?これらの問題があると、うまくいきません。

編集:バリアは実際には既知の問題です( ここ および ここ )。私はまだ解決策を見ていません。

4
Halfgaar

それが何かを変えるかどうかはわかりませんが、次のようにDomU構成でDRBDボリュームを指定することもできます。

disk = [ 'drbd:drbdvm,xvda2,w' ... ]

このように、DomUを作成すると、Xenは指定されたリソースの現在のノードを自動的にプライマリにします(リソースが2番目のマシンによってすでに使用されている場合を除く)。また、DomUが破棄されると、リソースが解放されます。

私はこのように実行されている多くのDRBDペアを持っていますが、あなたが投稿したエラーを見たことがありません。

2
Oliver

追加 extra = " barrier=off"DomU構成に。 バリアの前のスペースに注意してください。

また、DomUの/ etc/fstabに対応するバリア/オフオプション(ファイルシステムのmount-optionsによる)を追加します。

更新:

バリア/オフオプションは、バリアがオフになっていることを確認するための2番目の手段です。

バリア操作について:起動時にわかるように、これらの操作は失敗します。したがって、オフにしても状況は悪化しません。それとは別に、これらの障壁は、電源障害時にディスクに書き戻されない書き込みキャッシュが有効になっているハードディスクでのみ実際に意味があります。

サーバーには、バッテリーでバックアップされたUPSとバッテリーでバックアップされたレイドコントローラーが必要です。したがって、バリアをオンにすると、パフォーマンスが低下するだけです(たとえそれが機能したとしても)。

2
Nils