RAID1 の NFS サーバを作る
はじめに
クラウド障害、NTTデータ系「一部復旧困難に」 :日本経済新聞
クラウド障害、NTTデータ系「一部復旧困難に」
全国約50の自治体で起きたクラウド障害をめぐり、NTTデータ傘下の日本電子計算(東京・千代田)は16日、このうち33自治体でデータの一部が消え、復旧が困難になったと発表した。職員のメールや後期高齢者医療に関する情報などが含まれているという。同社は当初、早期に復旧できるとの見方を示したが、2週間近く障害が続いている。
データをこまめにバックアップすることは大切です.
その昔 RasPi を NFS サーバとして利用していたけれど,NICの性能不足により環境は解体していた.
クラウド上のデータでさえ消えてしまう昨今,突然データが消失するその日に備えてデータのバックアップ用にNFSサーバを構築することにした.
大まかな流れは以下の通り.
記事によってファイルシステムの作成タイミングが3パターンくらいあるが,非常に丁寧に記載してある Arch のドキュメントを参考に RAID ディスクを作成していく.
サーバを立てる
適当なCentOSとディスクを用意した.
$ cat /etc/centos-release CentOS Linux release 7.7.1908 (Core) $ ls /dev/sd[bc] /dev/sdb /dev/sdc
ちなみに,このサーバは ESXi 上の仮想マシンで,ディスクは RDM で接続している. 長くなりそうなので設定方法が知りたければググってください.気が向いたら書くかも書かないかも. この辺りを読んだ気がする.
RAID1 のディスクを作る
パッケージインストール
今回は mdadm を使って RAID1 のディスクを作ります.
$ sudo yum install mdadm.x86_64
パーティションを作成する
$ sudo fdisk -l /dev/sd[bc] WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト Disk label type: gpt Disk identifier: 1052EB3D-A91C-4F07-8C1F-5AFFD5BC345B # Start End Size Type Name 1 2048 5860328334 2.7T Linux RAID WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト Disk label type: gpt Disk identifier: 417E5B3C-AC7E-43A7-81AC-E764AF12DF53 # Start End Size Type Name 1 2048 5860328334 2.7T Linux RAID $ fdisk -v fdisk from util-linux 2.23.2
パーティションの作成結果は上記の通り. Arch のドキュメントに記載のある通り,ディスクによって容量に誤差がある場合があるらしいので 100MB 程度 未割り当てとして設定している. またパーティションのタイプを Linux RAID に設定している.
昔は fdisk で大きなパーティションは作れなかったが,最近は fdisk GPT support is currently new
らしい.
RAID アレイを作成する
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[bc]1 mdadm: /dev/sdb1 appears to be part of a raid array: level=raid1 devices=2 ctime=Sun Aug 11 09:29:28 2019 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: /dev/sdc1 appears to be part of a raid array: level=raid1 devices=2 ctime=Sun Aug 11 09:29:28 2019 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
2つのディスク (-raid-devices=2 /dev/sd[bc]1) で RAID1(--level=1) のRAID アレイ (--create /dev/md0) を作成する.
容量が大きいと RAID アレイの作成にそれなりの時間を要する.
以下のコマンドで RAID アレイ作成状況を確認することが出来る.
3TB...ながい...
$ watch -n1 cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[1] sdb1[0] 2930133440 blocks super 1.2 [2/2] [UU] [>....................] resync = 0.1% (4960000/2930133440) finish=363.4min speed=134140K/sec bitmap: 22/22 pages [88KB], 65536KB chunk unused devices: <none>
ファイルシステムを作成する
$ sudo mkfs.xfs -f /dev/md0 meta-data=/dev/md0 isize=512 agcount=4, agsize=183133340 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=732533360, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=357682, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
今回は CentOS7 標準のファイルシステムにあわせて xfs でフォーマットしている.
設定ファイルを作成する
man を読むと設定ファイルは ”Default is to use /etc/mdadm.conf and /etc/mdadm.conf.d, or if those are missing then /etc/mdadm/mdadm.conf and /etc/mdadm/mdadm.conf.d.
” とのことなので,今回は以下の通り設定ファイルを作成した.
$ sudo mkdir /etc/mdadm/ $ sudo mdadm -Es | sudo tee /etc/mdadm/mdadm.conf ARRAY /dev/md/0 metadata=1.2 UUID=096fcdad:027d4958:9d2be2be:6ef9df30 name=storage:0
RAID アレイをマウントする
$ df -hT /mnt/raid1/ ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/md0 xfs 2.8T 33M 2.8T 1% /mnt/raid1
適当なディレクトリを作成してマウントしてみた.
RAID アレイの状態確認方法
確認方法は RAID アレイ作成過程を確認したファイルを見ればいい.
正常な状態は以下の通り.
$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[1] sdb1[0] 2930133440 blocks super 1.2 [2/2] [UU] bitmap: 0/22 pages [0KB], 65536KB chunk unused devices: <none>
試しに sdc1 に異常が発生したことにしてみると,sdc1 の状態が (F) として表示されるようになる.
$ sudo mdadm --fail /dev/md0 /dev/sdc1 mdadm: set /dev/sdc1 faulty in /dev/md0 $ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[1](F) sdb1[0] 2930133440 blocks super 1.2 [2/1] [U_] bitmap: 0/22 pages [0KB], 65536KB chunk unused devices: <none>
NFS サーバを設定する
パッケージをインストールする
$ sudo yum install nfs-utils.x86_64
ファイアウォールとサービスを設定する
$ sudo firewall-cmd --add-service=nfs --permanent success $ sudo firewall-cmd --reload success $ sudo systemctl enable nfs.service Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. $ sudo systemctl start nfs.service
NFS の公開ディレクトリを設定する
NFS で公開するディレクトリの設定は /etc/exports のファイルに記載する.
詳細は exports の man を見てください.
$ cat /etc/exports /mnt/raid1 *(rw,sync,no_root_squash) $ sudo exportfs -ra
あとはこのサーバのNFSディレクトリを別PCからマウントすればOK.
おわりに
今回の作業でバックアップ先ができた. あとでバックアップ処理も作る.
ESXi に設定している RDM のホットスワップは未検証なので,何かあったときはちょっと心配. 今のうちに検証しておくべきか...