web-dev-qa-db-ja.com

Ubuntu 14.04でブート時にGlusterFSがマウントに失敗する

以前は、Ubuntu 12.04サーバーでの起動時にGlusterFSをマウントすることについて質問しました と答えは、これは12.04ではバグがあり、14.04では機能するというものでした。奇妙なことに、自分のラップトップで実行されている仮想マシンで試してみたところ、14.04で動作しました。これは私にとって重要だったので、実行中のサーバーを14.04にアップグレードして、GlusterFSがローカルホストボリュームを自動的にマウントしていないことを確認することにしました。

これはLinodeサーバーであり、fstabは次のようになります。

# <file system> <mount point>          <type>    <options>                 <dump>  <pass>
proc        /proc                        proc    defaults                       0       0
/dev/xvda   /                            ext4    noatime,errors=remount-ro      0       1
/dev/xvdb   none                         swap    sw                             0       0
/dev/xvdc   /var/lib/glusterfs/brick01   ext4    defaults                       1       2
koraga.int.example.com:/public_uploads /var/www/shared/public/uploads glusterfs defaults,_netdev 0 0

起動プロセスは次のようになります(唯一の失敗であるネットワークマウント部分の周り):

 * Stopping Mount network filesystems                                    [ OK ]
 * Starting set sysctls from /etc/sysctl.conf                            [ OK ]
 * Stopping set sysctls from /etc/sysctl.conf                            [ OK ]
 * Starting configure virtual network devices                            [ OK ]
 * Starting Bridge socket events into upstart                            [ OK ]
 * Starting Waiting for state                                            [fail]
 * Stopping Waiting for state                                            [ OK ]
 * Starting Block the mounting event for glusterfs filesystems until the [fail]k interfaces are running
 * Starting Waiting for state                                            [fail]
 * Starting Block the mounting event for glusterfs filesystems until the [fail]k interfaces are running
 * Stopping Waiting for state                                            [ OK ]
 * Starting Signal sysvinit that remote filesystems are mounted          [ OK ]
 * Starting GNU Screen Cleanup                                           [ OK ]

ログファイル/var/log/glusterfs/var-www-shared-public-uploads.logには、問題の主な手がかりが含まれています。これは、マウントが機能していないこのサーバーと、次の場所にあるローカル仮想サーバーとの間で本当に異なる唯一の問題です。

[2014-07-10 05:51:49.762162] I [glusterfsd.c:1959:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.5.1 (/usr/sbin/glusterfs --volfile-server=koraga.int.example.com --volfile-id=/public_uploads /var/www/shared/public/uploads)
[2014-07-10 05:51:49.774248] I [socket.c:3561:socket_init] 0-glusterfs: SSL support is NOT enabled
[2014-07-10 05:51:49.774278] I [socket.c:3576:socket_init] 0-glusterfs: using system polling thread
[2014-07-10 05:51:49.775573] E [socket.c:2161:socket_connect_finish] 0-glusterfs: connection to 192.168.134.227:24007 failed (Connection refused)
[2014-07-10 05:51:49.775634] E [glusterfsd-mgmt.c:1601:mgmt_rpc_notify] 0-glusterfsd-mgmt: failed to connect with remote-Host: koraga.int.example.com (No data available)
[2014-07-10 05:51:49.775649] I [glusterfsd-mgmt.c:1607:mgmt_rpc_notify] 0-glusterfsd-mgmt: Exhausted all volfile servers
[2014-07-10 05:51:49.776284] W [glusterfsd.c:1095:cleanup_and_exit] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_transport_notify+0x23) [0x7f6718bf3f83] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_clnt_notify+0x90) [0x7f6718bf7da0] (-->/usr/sbin/glusterfs(+0xcf13) [0x7f67192bbf13]))) 0-: received signum (1), shutting down
[2014-07-10 05:51:49.776314] I [Fuse-bridge.c:5475:fini] 0-Fuse: Unmounting '/var/www/shared/public/uploads'.

ボリュームのステータスは次のとおりです。

Volume Name: public_uploads
Type: Distribute
Volume ID: 52aa6d85-f4ea-4c39-a2b3-d20d34ab5916
Status: Started
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: koraga.int.example.com:/var/lib/glusterfs/brick01/public_uploads
Options Reconfigured:
auth.allow: 127.0.0.1,192.168.134.227
client.ssl: off
server.ssl: off
nfs.disable: on

mount -a起動後、ボリュームは正しくマウントされています。

koraga.int.example.com:/public_uploads on /var/www/shared/public/uploads type Fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072)

いくつかの関連するログファイルがこれを示しています。

/var/log/upstart/mounting-glusterfs-_var_www_shared_public_uploads.log

start: Job failed to start

/var/log/upstart/wait-for-state-mounting-glusterfs-_var_www_shared_public_uploadsstatic-network-up.log

status: Unknown job: static-network-up
start: Unknown job: static-network-up

しかし、私のテストサーバーではまったく同じように表示されるので、これは関係ないと思います。

今何か問題があるアイデアはありますか?

Update:WAIT_FORをstatic-network-upからnetworkingに変更しようとしましたが、機能しませんでしたが、起動時にすべての[fail]メッセージが表示されました姿を消す。これらは、以下の状況でのログファイルの内容です。

/var/log/glusterfs/var-www-shared-public-uploads.logに含まれるもの:

wait-for-state stop/waiting

/var/log/upstart/wait-for-state-mounting-glusterfs-_var_www_shared_public_uploadsstatic-network-up.logに含まれるもの:

start: Job is already running: networking

/var/log/glusterfs/var-www-shared-public-uploads.logに含まれるもの:

[2014-07-11 17:19:38.000207] I [glusterfsd.c:1959:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.5.1 (/usr/sbin/glusterfs --volfile-server=koraga.int.example.com --volfile-id=/public_uploads /var/www/shared/public/uploads)
[2014-07-11 17:19:38.029421] I [socket.c:3561:socket_init] 0-glusterfs: SSL support is NOT enabled
[2014-07-11 17:19:38.029450] I [socket.c:3576:socket_init] 0-glusterfs: using system polling thread
[2014-07-11 17:19:38.030288] E [socket.c:2161:socket_connect_finish] 0-glusterfs: connection to 192.168.134.227:24007 failed (Connection refused)
[2014-07-11 17:19:38.030331] E [glusterfsd-mgmt.c:1601:mgmt_rpc_notify] 0-glusterfsd-mgmt: failed to connect with remote-Host: koraga.int.example.com (No data available)
[2014-07-11 17:19:38.030345] I [glusterfsd-mgmt.c:1607:mgmt_rpc_notify] 0-glusterfsd-mgmt: Exhausted all volfile servers
[2014-07-11 17:19:38.030984] W [glusterfsd.c:1095:cleanup_and_exit] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_transport_notify+0x23) [0x7fd9495b7f83] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_clnt_notify+0x90) [0x7fd9495bbda0] (-->/usr/sbin/glusterfs(+0xcf13) [0x7fd949c7ff13]))) 0-: received signum (1), shutting down
[2014-07-11 17:19:38.031013] I [Fuse-bridge.c:5475:fini] 0-Fuse: Unmounting '/var/www/shared/public/uploads'.

Update 2:アップスタートファイルでもこれを試しました:

start on (started glusterfs-server and mounting TYPE=glusterfs)

しかし、コンピュータは起動に失敗しました(まだ理由がわかりません)。

6
pupeno

私はこのスレッドとこのスレッドでの答えの組み合わせによってこれをうまく機能させることができました: GlusterFSはブート時にマウントできません

@Dan Pisarskiによる編集/etc/init/mounting-glusterfs.conf読む:

exec start wait-for-state WAIT_FOR=networking WAITER=mounting-glusterfs-$MOUNTPOINT

@ dialt0neの変更に従って/etc/fstab読む:

[serverip]:[vol]  [mountpoint]  glusterfs  defaults,nobootwait,_netdev,backupvolfile-server=[backupserverip],direct-io-mode=disable  0       0

Ubuntu 14.04.2 LTSで動作するMe(tm)

6
mdekkers

私はubuntu 12.04のAWSで同じ問題に遭遇しました。ここで、あなたのためにできることがいくつかあります。

  • fstabにフェッチ試行を追加する

これにより、ネットワークが使用できないときにvolfileサーバーを再試行できます。

  • fstabにバックアップvolfileサーバーを追加する

これにより、なんらかの理由でプライマリがダウンした場合に、別のglusterサーバーメンバーからファイルシステムをマウントできます。

  • fstabにnobootwaitを追加します

これにより、このファイルシステムがマウントされていない間、インスタンスは起動を継続できます。

現在のfstabのサンプルエントリは次のとおりです。

10.20.30.40:/fs1 /example glusterfs defaults,nobootwait,_netdev,backupvolfile-server=10.20.30.41,fetch-attempts=10 0 2

14.04ではテストしていませんが、12.04インスタンスでは問題なく動作します。

4
dialt0ne

それはバグです

これは実際にはバグです(static-network-upは仕事ではなく、イベント信号です)。

さらに、他の回答で提案されているようにネットワークジョブを使用することは、最も正しい解決策ではありません。

それで、私はこれを作成しました バグレポート とこの問題へのパッチを提出しました。

回避策として、(この回答の最後に)提案されたソリューションを適用し、fstabで__netdev_オプションを使用できます。

より良い説明も上に示されていますが、必要に応じてこの説明をスキップできます。

説明

これは_mounting-glusterfs.conf_のバグです。 Ubuntu Serverでの起動時に30秒の不必要な時間を増加させたり、起動プロセスをハングさせることさえあります。

このバグのため、mountallプロセスはマウントが失敗したと見なします(_/var/log/boot.log_に「Mount failed」エラーが表示されます)。そのため、_/etc/fstab_でnobootwait/nofailフラグを使用しない場合、バグによりマウントプロセス(およびブートプロセス)がハングする可能性があります。 nobootwait/nofailフラグを使用すると、バグにより起動時間が約30秒増加します。

このバグは次のエラーが原因で発生します。

  • ネットワークが立ち上がるのを待つ必要はありません。 Ubuntu自体には、インターフェイスが起動するたびにマウントを再試行する__netdev_マウントフラグがあります。
  • ただし、GlusterFSサーバーデーモンを待つ必要があります(localhostを使用したマウントの場合)。
    • これはGlusterFSアップストリームプロジェクトの 古いコミット で実装されました。ただし、このコミットは上書きされました。
  • _wait-for-state_ upstartタスクを使用してシグナルを待つのは間違っています。それは仕事を待つために使用されます。 _static-network-up_はイベントシグナルであり、ジョブではありません;
    • これが、「不明なジョブ:static-network-up」がログに記録される理由です。
  • _WAIT_STATE=running_のデフォルトではないため、_wait-for-state_ env varを渡さないでジョブが開始されるのを待機しているときは間違っています。

解決

_/etc/init/mounting-glusterfs.conf_:

_author "Louis Zuckerman <[email protected]>"
description "Block the mounting event for glusterfs filesystems until the glusterfs-server is running"

instance $MOUNTPOINT

start on mounting TYPE=glusterfs
task
script
  if status glusterfs-server; then
    start wait-for-state WAIT_FOR=glusterfs-server WAIT_STATE=running \
        WAITER=mounting-glusterfs-$MOUNTPOINT
  fi
end script
_

PS:fstabで__netdev_オプションも使用します。

2

細かい説明をありがとうございます。これまで以上に理解が深まったと思います。最新のソリューションはほぼ機能しています。問題(最初の問題は2番目の問題であるため、実際には1つ):

  • ローカル共有(127.0.0.1:/share)まだマウントされていません
  • mounted TYPE=glusterfs満足することはないため、マウントされたサービスに依存するサービスTYPE=glusterfs状態

/etc/fstab

127.0.0.1:/control-share /mnt/glu-control-share glusterfs defaults,_netdev 0 0

/etc/init/mounting-glusterfs.conf:上からコピー

/etc/init/salt-master.conf

description "Salt Master"

start on (mounted TYPE=glusterfs
          and runlevel [2345])
stop on runlevel [!2345]
limit nofile 100000 100000
...

ローカル共有は手動でマウントする必要があります。または、何らかの自動化によって、すべてのリブート後にsalt-masterを手動で開始する必要があります。

後で気付く:Mounting-glusterfsの上記のWAITスクリプトは、ブートプロシージャ全体をブロックします。glusterfs-serverの状態が実行に到達しないようです。

1
Attila Heidrich

私もこれに遭遇しましたが、この回答の前に、私はこの分野の専門家ではないので、より良い解決策がある可能性があるという声明を出したいと思います。

しかし、問題はstatic-network-upがイベントであり、アップスタートジョブの名前ではないようです。ただし、wait-for-stateスクリプトは、ジョブ名がWAIT_FOR値として渡されることを想定しています。したがって、上記で発見した「不明なジョブ」のエラー。

この問題を解決するには、/ etc/init/mounting-glusterfs.confを変更して、次のように変更します。

exec start wait-for-state WAIT_FOR=static-network-up WAITER=mounting-glusterfs-$MOUNTPOINT

に:

exec start wait-for-state WAIT_FOR=networking WAITER=mounting-glusterfs-$MOUNTPOINT

networkingは実際のジョブの名前(/etc/init/networking.conf)であり、通常はstatic-network-upを発行するジョブだと思います。

この変更は、Ubuntu 14.04では機能しました。

1
Dan Pisarski

私はこれを本当にシンプルなソリューションで管理しました:

  1. / etc/fstabにマウントポイントを追加する

    gluster:/VOLUME_NAME/local/mount/point glusterfs defaults,_netdev 0 0
    
  2. / etc/rc.localに1行追加すると、次のようになります。

    mount -a
    exit 0
    

これで、すべてのglusterfsボリュームが起動時にマウントされます。

0