RAID5でまっとうなファイルサーバを構築する その1
Table of Contents
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: CentOS 7 1807
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に追記する.
諸々
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