RAID5でまっとうなファイルサーバを構築する その1

4TByteのHDDを3台使ってRAID5のファイルサーバを構築するメモ.

機器構成

家で余っていたPCにHDDを付けた.

  • ケース: サイズESTE
  • MB: MSI H61M-E33
  • Memory: Elixir デスクトップ用メモリ DDR3 D3U1333Q-4G DDR3 PC10660 CL9 4GB
  • CPU: インテル Boxed Intel Core i3 i3-2100 3.1GHz 3M LGA1155 SandyBridge BX80623I32100
  • 電源: KEIAN ???
  • ドライブ: Pioneer BDR-206JBK
  • HDD: WD Blue x 3

HDDは放熱のためなるべく離して設置する.

OSのインストール

2Tを超えるハードディスクだと従来のMBR方式ではなく, GPTのパーティションテーブルが必要となる. しかし,これとGrub2の対応がよくないせいか,grubからraidパーティションを読んでくれなかったり, インストーラブートローダのインストールに失敗したりする. そこで,各HDDに/bootを独立に作って,それぞれからブートするようにした.

OSをUSBメモリに書き込んで,起動する. 言語を選択する画面になったら,Ctrl-Alt-F2を押してターミナルに切り替えて, 次のコマンドでMBRを消去する. sdaはインストーラの入ったUSBメモリ

dd if=/dev/zero of=/dev/sdb count=1024 bs=1024
dd if=/dev/zero of=/dev/sdc count=1024 bs=1024
dd if=/dev/zero of=/dev/sdd count=1024 bs=1024

念のため再起動する.

reboot

ファイル格納は/shareにするが,インストール時に設定すると 同期に時間が掛かるため,インストール後に領域を確保して設定することにする. =/=とパーティション分けているのは,万が一,/shareが一杯になったとき, システムログなどが取れなくなることを防ぐため.

bootの設定

以上のように設定すると,/dev/sdaにある/bootにgrubがインストールされる. しかし,これでは/dev/sdaが故障したときに起動できなくなってしまう. インストーラのtrouble shootingやsuper grub diskなどを使えば良いのだが, 緊急時に慌てないよう,すべてのディスクから起動できるようにしておく.

sdb, sdcからも起動できるように設定する.

rsync -av /boot/* /boot-1
rsync -av /boot/* /boot-2
umount /boot # 一旦アンマウントする

/etc/fstabを書き換えて /bootをコメントアウト, /boot-1だったところを/bootにマウントされるようにする.

mount -a # fstabの通りにマウントする
df # 一旦確認
touch /boot/sdb # 目印に
cd /boot/grub2/
mv grub.cfg grub.cfg.orig
grub2-mkconfig -o /boot/grub2/grub.cfg

grub.cfgの

menuentry 'CentOS Linux ...

menuentry 'SDB: CentOS LINUX ...

などにしておくとわかりやすい.

gdisk /dev/sdb

で4096セクタ分だけef02(BIOS boot partition)を作成する. 4096セクタは

gdisk -l /dev/sda

で表示されたセクタ数. nで新規パーティション作成,pで確認,wで書き込み.

ブートローダのインストール

mv /boot/initramfs-3.10.0-862.el7.x86_64.img /boot/initramfs-3.10.0-862.el7.x86_64.img.orig
dracut --fstab --mdadm --add=mdraid /boot/initramfs-3.10.0-862.el7.x86_64.img
grub2-install --modules="gzio part_gpt xfs" --recheck /dev/sdb # SDCのときは/dev/sdc

sdcについても同様に行う.

ここで,sdbとsdcから起動できるか確認する.

/etc/fstabの/boot, /boot-1, /boot-2 については残しておいた場合, 故障して見つからないとエマージェンシーモードで起動してしまう. めったにいじることはないので,すべてコメントアウトしておいてもよいかもしれない. yumカーネルのアップデートがあるときには/bootがないとうまく切り替えられないが, カーネルが多少古くても問題なければ気にする必要はない.

さらにHDDを外して(BIOSやケーブルを外して)起動するか確認する. 若干起動に時間が掛かるが,3台中2台が動いていればraid5は正常に見られる. ただし,

cat /proc/mdstat

とか

mdadm --detail /dev/md127

などをやると異常が発生しているのが分かる.

ストレージ領域の構築

いよいよメインのストレージ領域を構築する.

まずは,それぞれのディスクの状態を確認する.

[root@localhost admin]# gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 7814037168 sectors, 3.6 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9CD96188-B27C-42C2-83AC-C1167B038CAF
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 7781928557 sectors (3.6 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02
   2            6144          620543   300.0 MiB   0700
   3          620544        32110591   15.0 GiB    FD00

[root@localhost admin]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 7814037168 sectors, 3.6 TiB
Disk identifier (GUID): 79F19F8B-BAAB-41B7-9D81-FDF75BCD936B
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 7781928557 sectors (3.6 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          616447   300.0 MiB   0700
   2          616448        32106495   15.0 GiB    FD00
   3        32106496        32110591   2.0 MiB     EF02  BIOS boot partition

[root@localhost admin]# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 7814037168 sectors, 3.6 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 65B502DC-2098-4D43-A074-8B8A60D616D1
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 7781928557 sectors (3.6 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          616447   300.0 MiB   0700
   2          616448        32106495   15.0 GiB    FD00
   3        32106496        32110591   2.0 MiB     EF02  BIOS boot partition

3つとも32110591セクタまで使っていて,最大で7814037134セクタまで使える. 最大限に確保してRAID5を構築する. type codeはfd00 (Linux RAID)にする.

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02
   2            6144          620543   300.0 MiB   0700
   3          620544        32110591   15.0 GiB    FD00
   4        32110592      7814037134   3.6 TiB     FD00  Linux RAID

カーネルに見つけてもらうため,一度再起動する.

dmesgでsd?4があることを確認する.

RAID5を構築する.md99は適当な番号でよい. 3.6Tくらいあるので,一晩くらいはかかる.

mdadm --create /dev/md99 --level=5 --raid-devices=3  /dev/sda4 /dev/sdb4 /dev/sdc4

進捗は

cat /proc/mdstat

で確認できる.

フォーマットとマウント

構築が終わったら,ファイルシステムのフォーマットを行う.

mkfs.xfs /dev/md99

ls -l /dev/disk/by-uuid

でUUIDを確認して/etc/fstabに書き込む

UUID=05114cc1-7e1a-4598-8d7f-64d3403bc2a3 /share       xfs     defaults 0 0

マウントする.

mkdir /share
mount -a
df # 確認

mdadm --detail --scan

で出てきた情報を/etc/mdadm.confに追記する.

諸々

  • アップデート

    yum -y update

  • selinuxを無効化

vi /etc/selinux/config

# SELINUX=enforcing
SELINUX=disabled
  • 個人的に使うソフトのインストール

    yum install tmux tigervnc-server nmap

samba

  • インストール

    yum install samba

  • ユーザ登録

    smbpasswd -a [username]

  • 設定

    mv /etc/samba/smb.conf /etc/samba/smb.conf.orig

/etc/samba/smb.conf

[global]
 log file = /var/log/samba/log.%m
 max log size = 50
 server role = standalone server
 passdb backend = tdbsam
 obey pam restrictions = yes
 unix password sync = yes
 pam password change = yes
 map to guest = bad user
[share]
 browseable = yes
 read only = no
 path = /share

ファイアウォールを開けて起動

firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
firewall-cmd --list-all # 確認
systemctl start smb
systemctl enable smb

windowsから\\192.168.x.x で接続できるか確認する. ひとまずファイルサーバが完成.

メールサーバ

HDDの状態を監視するSMARTやRAIDの状態を監視するmdadmから 異常時にメールが届くようにしたい. このため,まずメールサーバを設定する. メールアカウントはGmailを利用する. https://qiita.com/hkato/items/e6e58abfc416d2820f4c を参考にした.

インストール

yum install postfix cyrus-sasl

設定

cd /etc/postfix/
cp main.cf main.cf.orig
vi main.cf

relayhost = [smtp.gmail.com]:587

smtp_use_tls = yes
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain

alternatives --config mta

postfixを選択.

ユーザ登録

vi /etc/postfix/sasl_passwd

[smtp.gmail.com]:587    <user>@gmail.com:<password>

chmod 600 /etc/postfix/sasl_passwd
postmap hash:/etc/postfix/sasl_passwd

起動

systemctl start saslauthd
systemctl enable saslauthd
systemctl start postfix
systemctl enable postfix

firewall-cmd --permanent --add-service=smtp
firewall-cmd --reload
firewall-cmd --list-all # 確認

送信テスト

echo "test1"|mail -s "test1s" -r <from>@gmail.com mail@address.com

でメールが送られるか確認する.

HDDの監視

インストール

yum install smartmontools

設定

mv smartd.conf smartd.conf.orig
cat <<END > smartd.conf
DEFAULT -d auto -T normal -H -l error -l selftest -s S/../../7/05 -m mail@address.com -M daily -W 4,50,60  -C 197 -U 198 -f -t
/dev/sda
/dev/sdb
/dev/sdc
END

反映

systemctl restart smartd

RAIDの監視

mdadmで監視する.設定ファイルは/etc/mdadm.conf これに

MAILADDR root

の記述があり,障害時にはroot宛にメールが届く. これを変更してもよいが,rootのメールを自分のメールに転送するように変更する. /etc/aliasesに

root:           mail@address.com

を追加.

newaliases
systemctl restart mdmonitor

で反映.

mdadm --monitor --scan --oneshot --test

でテストメール送信.

httpd

yum install httpd