バックアップメディアを選択する際、バックアップのターゲットとしてOSSを使用することを推奨します。OSSはステートレスなオブジェクトストレージであり、ステートを持つNFS4よりも高い安定性を誇ります。
NFSをバックアップターゲットとして使用する必要がある場合は、このセクションの内容を参照してNFSをデプロイしてください。NFSにはソフトウェア型とハードウェア型の2種類がありますが、ソフトウェアNFSは不安定で、NFS Hangと呼ばれる現象が発生しやすく、バックアップタスクが停止したり、NFSにマウントされたマシンが正常に動作しなくなったりする可能性があります。そのため、専用のNFSハードウェアデバイスを使用することを推奨します。
注意事項
NFS環境を使用する場合は、NFSのマウントを完了してからバックアップを開始する必要があります。バックアップ中にNFSに問題が発生した場合は、まずデータバックアップとログアーカイブを停止し、その後NFSの問題を解決する必要があります。
OceanBaseデータベースの現行バージョンは、NFS 3以降のバージョンをサポートしています。
NFSパフォーマンス不足による不安定な動作を避けるため、SSDを使用したNFSサービスを推奨します。
バックアップメディアとしてNFSを使用する場合は、すべてのOBServerノードが同一サーバーのNFSにマウントされていることを確認する必要があります。また、バックアップが円滑に進むよう、本記事で推奨されているパラメータを使用してNFSをマウントすることが不可欠です。NFSの具体的なマウント手順については、このセクションのNFSクライアントのデプロイを参照してください。
OBServerノードの再起動時は、まずNFSを起動してからOBServerノードを起動する必要があります。
新しいマシンを追加した後、OBServerノードを起動する前に、新しいマシンへのNFSのマウントが正常に完了しているか、他のメディアにバックアップできる状態であることを確認する必要があります。
NFSソフトウェアをデプロイするサーバー側
注意
NFSハードウェアデバイスを使用している場合は、この操作をスキップして、直接NFSクライアントをデプロイできます。
NFSサーバーにログインします。
以下のコマンドを実行して、YUMパッケージマネージャーを使用してNFSをインストールします。
sudo yum install nfs-utilsエクスポートを設定します。
バックアップに必要な容量とパフォーマンスを考慮して、共有ディレクトリとして適切なディレクトリを選択します。
例えば、本記事で選択された共有ディレクトリは
/data/nfs_server/です。sudo vim /etc/exportsコマンドを使用して設定ファイルを開き、以下の情報を設定します。/data/nfs_server/ xx.xx.xx.xx/16(rw,sync,all_squash)ここで、
xx.xx.xx.xxはアクセスを許可するIPアドレス範囲を表します。以下のコマンドを実行して、匿名ユーザーに権限を付与し、
exportsで指定されたディレクトリへのアクセス権限を確保します。CentOS 7CentOS 8CentOS 7バージョンについて、NFSはデフォルトで
nfsnoboodyを匿名ユーザーとして使用します。コマンドは以下のとおりです:sudo chown nfsnobody:nfsnobody -R /data/nfs_serverCentOS 8以降のバージョンでは、NFSはデフォルトで
noboodyを匿名ユーザーとして使用します。コマンドは以下のとおりです:sudo chown nobody:nobody -R /data/nfs_server
以下のコマンドを実行して、NFSを再起動します。
sudo systemctl restart nfs-serverスロットテーブルを設定します。
sudo vim /etc/sysctl.confコマンドを実行して、sysctl.conf設定ファイルを開き、次の情報をファイルに追加します:sunrpc.tcp_max_slot_table_entries=128以下のコマンドを実行して、同時に発生するNFSリクエスト数を128に変更します。
sudo sysctl -w sunrpc.tcp_max_slot_table_entries=128コマンドの実行が成功したら、
cat /proc/sys/sunrpc/tcp_max_slot_table_entriesコマンドを使用して設定が有効になっているかどうかを確認できます。返される値が128であれば、変更は成功したことを意味します。(オプション) マシンを再起動します。
NFSクライアントのデプロイ
NFSクライアントをデプロイする際は、すべてのOBServerノードで操作を実行する必要があります。
以下は、あるOBServerノードでの操作を例にした操作ガイドです。
OBServerノードにログインします。
以下のコマンドを実行し、YUMパッケージマネージャーを使用してNFSをインストールします。
sudo yum install nfs-utilsスロットテーブルを設定します。
sudo vim /etc/sysctl.confコマンドを実行して、sysctl.conf設定ファイルを開き、ファイルに次の情報を追加します:sunrpc.tcp_max_slot_table_entries=128以下のコマンドを実行して、同時に発生するNFSリクエスト数を128に変更します。
sudo sysctl -w sunrpc.tcp_max_slot_table_entries=128コマンドの実行が成功した後、
cat /proc/sys/sunrpc/tcp_max_slot_table_entriesコマンドを使用して設定が有効になっているかどうかを確認できます。返される値が128であれば、変更は成功したことを意味します。(オプション) マシンを再起動します。
マウントポイントとして適切なディレクトリを選択し、以下のコマンドを実行してNFSをマウントします。
NFS 3.xNFS 4.xたとえば、このドキュメントでは
/data/nfsディレクトリにマウントすることを前提としています。適切なディレクトリがない場合は、新しいディレクトリを作成してください。sudo mount -tnfs -o rw,nfsvers=3,sync,lookupcache=positive,hard,nolock,timeo=600,wsize=1048576,rsize=1048576,namlen=255 10.10.10.1:/data/nfs_server /data/nfsたとえば、このドキュメントでは
/data/nfsディレクトリにマウントすることを前提としています。適切なディレクトリがない場合は、新しいディレクトリを作成してください。sudo mount -tnfs -o rw,nfsvers=4.1,sync,lookupcache=positive,hard,timeo=600,wsize=1048576,rsize=1048576,namlen=255 10.10.10.1:/data/nfs_server /data/nfsステートメント内で:
nfsvers:使用するNFSバージョンを示します。NFS 4.xを使用する場合、NFS 4.1以降のバージョンを選択することを推奨します。NFS 4.0では、ファイルの名前を変更した後に古いファイルを読み取るリスクがあるため、使用しないことを推奨します。sync:同期書き込みを使用して、データがサーバーにタイムリーにフラッシュされるようにし、データの一貫性を保証します。lookupcache=positive:OSカーネルが指定されたマウントポイントのディレクトリキャッシュを管理する方法を指定します。有効なパラメータはall/none/pos/postiveです。postiveは、ディレクトリまたはファイルへの並行アクセス時に誤ってディレクトリまたはファイルが存在しないと報告される問題を回避し、データの一貫性を保証するために使用されます。hard:NFSが利用できない場合、システムはアプリケーションの読み書きリクエストをブロックして、データの一貫性を保証します。softオプションは使用できません。データエラーのリスクがあります。lock/nolock:サーバー上でファイルをロックするためにNLMプロトコルを使用するかどうかを選択します。デフォルトはlockです。NFS 4.xプロトコルはファイルロックを統合していますが、NFS 3.xプロトコル自体はファイルロックをサポートしていません。NFS 3.xプロトコルを使用する場合、マウント時にnolock値を追加することを推奨します。timeo:リトライの待機時間を0.1秒単位で指定します。設定時は、値を大きく設定しすぎないようにし、推奨値は600です。wsize:書き込むデータブロックのサイズを示します。1048576に設定することを推奨します。rsize:読み取るデータブロックのサイズを示します。1048576に設定することを推奨します。namlen:255に設定することを推奨します。10.10.10.1:NFSサーバーのIPアドレスを示します。
注意
- NFS 3/4をマウントする際は、マウント環境のパラメータに例で推奨されているパラメータが含まれていることを確認する必要があります。
- Docker環境では、ホスト上にNFSをマウントしてからDockerにマッピングする必要があります。Docker内部に直接NFSをマウントすると、クライアントがハングする可能性があります。
マウント完了後、以下のコマンドを実行してNFSのパフォーマンスを検証できます。
fio -filename=/data/nfs/fio_test -direct=1 -rw=randwrite -bs=2048K -size=100G -runtime=300 -group_reporting -name=mytest -ioengine=libaio -numjobs=1 -iodepth=64 -iodepth_batch=8 -iodepth_low=8 -iodepth_batch_complete=8たとえば、実行結果は次のとおりです:
Run status group 0 (all jobs): WRITE: io=322240MB, aggrb=1074.2MB/s, minb=1074.2MB/s, maxb=1074.2MB/s, mint=300006msec, maxt=300006msec
NFS 3のマウント時にエラーが発生した場合の対処方法
NFSをデプロイする際、NFS 3のマウント時にrequested NFS version or transport protocol is not supportedというエラーが発生した場合は、以下の方法で対処できます。
NFSサーバーにログインします。
NFSサーバーがサポートするバージョンを確認します。
sudo cat /proc/fs/nfsd/versions次の情報が返されていることがわかりました:
-2 -3 +4 +4.1 +4.2ここで、
-3はNFS 3が無効であることを示しています。設定を調整します。
以下の操作を実行して、NFS 3を有効にします:
/etc/nfs.confファイルが存在するかどうかを確認します。存在する場合、/etc/nfs.confファイル内のvers3=yの前の#を削除する必要があります。変更後のサンプルファイルは次のとおりです:
[nfsd] # debug=0 # threads=8 # host= # port=0 # grace-time=90 # Tease-time=90 # udp=y # tcp=y # vers2=n vers3=y # vers4=y # vers4.0=y # vers4.1=y # vers4.2=y # rdma=n ##/etc/sysconfig/nfsファイルが存在するかどうかを確認します。存在する場合、/etc/sysconfig/nfsファイルのRPCNFSDARGSパラメータに-N 3が指定されているかどうかを確認します。指定されている場合、-N 3を削除する必要があります。たとえば、
-N 3を削除した後、RPCNFSDARGSパラメータの値は次のとおりです:RPCNFSDARGS="-N 2 -N 4"
以下のコマンドを実行して、NFSを再起動します。
sudo systemctl restart nfs-server再度、NFSサーバーがサポートするバージョンを確認します。
sudo cat /proc/fs/nfsd/versions次の情報が返されていることがわかりました:
-2 +3 -4 -4.1 -4.2ここで、
+3はNFS 3が有効であることを示しています。