切断されたNFS共有が原因でI / O待機負荷が高くなる


0

私はいくつかのフォルダを同期させ、毎晩屋根裏部屋経由でnfs共有、つまり別のサイトにバックアップします。これには、最初にそのサイトへのopenvpn接続を確立し、次にバックアップが開始される前にnfs共有をマウントするスクリプトがあります。

バックアッププロセス中にnfs共有が使用不可になることはめったにありません。

平均負荷グラフ

共有が再び利用可能になるとすぐに、負荷は低下します。

その前に私は負荷を引き起こすプロセスを殺すことはできません。それはただ消えないでしょう。

これはとても厄介です。

これを防ぐにはどうすればよいですか。どういうわけかタイムアウトか何かを統合できますか?

これがcron経由で毎晩実行されるスクリプトです。

#!/bin/sh
REPOSITORY=/media/offsiteserver_netbackup/system.attic  #no backslash at the end of this
NFSMOUNT=/media/offsiteserver_netbackup  #no backslash at the end of this
NFSDIR="192.168.178.2:disk2/netbackup"

export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games

###############start of script#################   
#exec >> $LOGFILE 2>&1

#simple function that just prints the time and the info you pass to it
echotime () {
  echo "`date +%Y-%m-%d--%H:%M:%S` ----$1---"
}

# simple function to check if openvpn is connected (1 means NOT CONNECTED)
checkvpn () {
  if ping 192.168.178.2 -c 1 &> /dev/null; then
      echotime "VPN connected"
      return 1
  else
      echotime "VPN not connected"
      return 0
  fi
}  

# simple function to check if nfs is mounted (1 means NOT MOUNTED)
checkmount () {
  #http://stackoverflow.com/a/14698865
  #http://stackoverflow.com/a/9422947
  if mount | grep $NFSMOUNT > /dev/null; then
      echotime "NFS mounted"
      return 1
  else
      echotime "NFS not mounted"
      return 0
  fi
}

echotime "Script Start"

# restart vpn if not connected
if checkvpn; then
  echotime "VPN not connected, attepting to connect"
  /etc/init.d/openvpn restart
  sleep 5
  #check again if its connected
  if checkvpn; then
     echotime "ERROR: VPN still not connected, exiting \n"
     exit 1
  fi
fi

# mount nfs if not mounted
# if your not using NFS, you can delete this section all together
if checkmount; then
  echotime "NFS not mounted, attepting to mount"
  mount -v $NFSDIR $NFSMOUNT -o nolock
  #check again if its mounted
  if checkmount; then
     echotime "ERROR: NFS still not mounted, exiting \n"
     exit 1
  fi
fi

# Backup all of / except a few excluded directories
# if your running into issues, add -v after create for verbose mode
# the below / means backup all of root.
echotime "ATTIC CREATE"
attic create --stats                            \
    $REPOSITORY::host.stscode-`date +%Y-%m-%d--%H:%M:%S`  \
    /                                           \
    --exclude /sys                              \
    --exclude /mnt                              \
    --exclude /dev                              \
    --exclude /media                            \
    --exclude /lost+found                       \
    --exclude /proc                             \
    --exclude /run

# Use the `prune` subcommand to maintain 7 daily, 4 weekly
# and 6 monthly archives.
echotime "ATTIC PRUNE"
attic prune -v $REPOSITORY --keep-hourly=23 --keep-daily=7 --keep-weekly=2 --keep-monthly=2

#unmount the NFS folder, I do this b/c
#   if it stays mounted, sometimes servers freak
#   out when rebooting.
# Uncomment the below 2 lines if you need to unmount every time.
echotime "UNMOUNT"
umount -v $NFSMOUNT

# end of script
echotime "End of Script"

それとも多分NFSはここに行く方法ではない?

この手順をどのように改善し、より安定させることができるかについてのヒントに感謝します。

回答:


0

これはNFSの「機能」です。接続が失われると、無期限に再接続しようとします。それが可能であれば、何も起こらなかったかのように中断したところから再開するのが一般的です。しかし、それは信じられないほど厄介です。これを回避する唯一の方法は、NFSを使用しないことです。パフォーマンス(またはUNIXファイル属性)を気にしないのであれば、CIFS / SMBを使うことができます。 rsync それもオプションではありませんがそれは非常にうまく機能しないかもしれません attic


0

簡単な解決策は、屋根裏部屋をサブプロセスとして始め、それが長すぎる場合はそれを中止することです。これを行うためのいくつかの提案はこれにあります 役職

(質問で述べたように)中止がうまくいかない場合でも、子プロセスとして実行してメインアプリケーションにNFSを監視させることができます。
NFSが機能しなくなった場合は、再起動または再マウントすることができます。 (監視と再起動のためのコードはすでにスクリプト内にあります。)

ちょっとした運がよければ、NFSが再起動されてもプロセスは続行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.