データベース自作PCサーバー作成 3

ちょうど、教育を行っているときに、超珍しく久しぶりにみた映画で同じことを言っていて、みな常に様々なことを学んでいるかと思うんですが、頭に入れておくとゼッタイいいと思うんですよね。

“progress, not perfection”
(完璧さは求めるな、前進を求めろ)

映画「イコライザー」(ソニー・ピクチャーズ)

学習を進めている時、その学習は、何かのために行っていることが多いと思うんですが、そのなにかのために焦り、苛立ち、完璧を求めるがゆえに、曖昧さだらけになって、10を求め0に近い結果にしかならないより、1になることを一番最初にしたほうがええよって、何度も教えることをしていて思います、小堤です。

不思議と、自分は完璧にできることが素敵、格好いい、できる、と思ってしまう初心者志向は、なんなんでしょうね、高確率で陥りがちな気がします。その時の完璧さえも定義曖昧だったり、そもそもそれ自体が完璧じゃないじゃんってことは結構あるんですが、そんなにみんな頭も良くなければ、天才でもないんで、1個ずつ積み重ねる人には結果もスピードも負けちゃうんですよ。下手くそでも、1/10でもいいので前進を!

さて、前回の続きで、データベース自作PCサーバー作っていくよ〜。

RAIDの仕組み

OSインストール領域、データ領域ともにRAID0で構築します。

通常RAID1で構築するのが一般的だと思いますし、プロダクション(本番)環境のサーバーとかでは、そうするべきだと思います。片方のディスクおかしくなったときも、保守の人が、こっそり(ではない)ディスク入替えてくれてたりしますから・・・。

もちろん設置しているデータセンターや、サービスによりますけど。

昨今、RAIDは非常に安く、そして一般的になってきた気がします。昔は、専用のボードじゃないとダメだのなんだの、そもそもハードウェアRAIDも(ボードに搭載されているやつ)メーカーによってどこがいいだの、しかもめっちゃ高い10万円超えはザラ。

サーバー製品ですからね、当然ちゃ当然ですわな、デスクトップ向けじゃないからね。MegaRAID、Adaptec、あたりでしょ、なんていったら化石みたいな人っていわれるんですかね笑

今でも売ってますし、当然使われてるんですが、今やデスクトップ用マザーボードにもRAID機能結構ついてますよね、性能の程は?障害発生率は?までは、知らないですけど。

個人利用なら十分なんじゃないのって感じで追加投資なく使えるのは、当時、頑張って諭吉(諭吉って言わなくなるんかなー)を見送った僕からすると、「スゴイ」の一言です。

さて、RAIDについて、おさらいしておきましょうね。

簡単にいえば、RAID0の方が、書き込み・読み込み性能が高くなります。

その代わり片方のディスクが壊れたら終わりです。

RAID1は、片方が壊れても物理的SSD/HDDを交換して復活(リビルド)ことができます。

プロダクション環境では、RAID1にすることが多いのではないでしょうか。よく記載されていますが、RAID1だからといってバックアップになっているわけではなく、あくまで冗長化。物理的に壊れても片方が頑張っている間に、修復できるっていうだけです。

なので、バックアップは別途必要です。

OSインストール時のRAID設定

OSインストール時の、RAID設定はマウスでポチポチするだけなんで、割愛しますがポイントだけ。

  1. /homeパーテーションは削除(分けて利用するならとっておいても良い)
  2. 以下のパーテションのデバイスタイプをRAID0に設定
  • /
  • /boot
  • /swap

/boot/efiは、変更できないので、そのまま標準パーテーションの設定にする。

RAID1にしたいときも、同じです。

ただし、どっちのディスクに存在するブートローダーを利用するのか問題が発生するらしく、下に警告がでますが、一度表示して再び「完了」をクリックすればOKです。

手動パーテション

/homeを削除した場合、領域が空くので、/の容量を増やしましょう。/homeの容量は多めに自動設定されるため、今回の様にデータ領域を別にしない場合、/var/lib/mysqlなどミドルウェアのデータ領域が、SSDの容量を増やしても増えません。また、/var/libを別パーテーションにするなど適切に設定する必要があります。

サーバー運用において、/homeに大量のデータを保存する必要がない場合は、/の下にhomeをそのままディレクトリとして配置するだけで良いと思います。ウェブサーバーや、データベースサーバーのデータ保存場所を/home以下に設定することも、もちろんできますが、セキュリティ設定が必要になるので、個人的にはオススメしません。

何も設定をしないと、よくある/home下にドキュメントルートをおいたり、データベースの保存場所を設定した場合に、表示できない!起動できない!などの問題が発生します。

ここらへんは、パーテーションの切り方のポリシーの問題なので、運用シーンに合わせて設定しましょう。あとは、インストーラーがよしなに設定してくれるので、待つだけ。

データ領域のRAID設定

OSインストール完了後、データ領域のRAID設定を行っていきます。

  • fdiskで、パーテーションを作成
  • mdadmで、RAIDを構成
  • /etc/fstabへ自動マウント設定

手順は、書いてしまえばコレだけです。

しかし、fdiskって普段あんまり使わないせいか

(どうやって使うんだったっけかぁ・・・他のディスクに影響ありそうで、怖い)

みたいなことを思っていましたが、はやり慣れですかね、たくさんやれば慣れる笑

そして、なれた頃になんかやらかすんですけどね・・・なので注意深く操作しましょう

fdiskで、パーテーションを作成

ルートユーザーで作業してくださいね、権限あるなら一般ユーザーからsudoでもいいんですけど。

まず、fdisk -l で接続されているストレージデバイス情報を確認します。

[root@localhost]$ fdisk -l

Disk <strong>/dev/nvme0n1</strong>: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x********

Disk <strong>/dev/nvme1n1</strong>: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 502 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x********

省略しますが、概ねこのような表示がされるはずです。

  • /dev/nvme0n1
  • /dev/nvme1n1

この2つが、データ領域にしたいNVMe SSDです。

両方共、新しく装着したていで話を進めると、パーテーションは存在しません。しかし、再利用などの場合は、一度パーテーションを削除してください。

ディスクのパーテーションを削除する場合
[root@localhost]$ fdisk -l /dev/nvme0n1 # ← 【既存ハードディスクパーティション確認】
Disk /dev/nvme0n1: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x16c4fadc

Device         Boot Start        End    Sectors  Size Id Type
/dev/nvme0n1p1       2048 4000797359 4000795312  1.9T fd Linux raid autodetect

[root@localhost]$ fdisk /dev/nvme0n1 # ← 【削除処理開始】

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d # ← 【削除、複数パーテーションが存在する場合、複数回削除】
Selected partition 1
Partition 1 has been deleted.

Command (m for help): w # ← 【反映】

削除前に一度、パーテーション情報を表示しています。確認後、d→wで削除しましょう。削除同様fdiskで、新規パーテーションを作成します。

[root@localhost]$ fdisk /dev/nvme0n1

(省略)

n → p → 1 → t → fd → w

nは新規パーテーション作成、後はデフォルト設定でよいのでENTERキー押すだけで進みます。p → 1の操作です、その後サイズ設定も、とくに小さく設定したい場合でなければENTERでOKです。

パーテーションが作成されたら、tでディスクタイプを変更します、fdでRAID用パーテーションに変更します。最後に、wで設定を書き出して終わりです。/dev/nvme1n1についても、同じく新規パーテーションを作成しておきましょう。

作成されたパーテーションを確認すると、以下のように表示されます。

[root@localhost]$ fdisk -l /dev/nvme* # ← パーテーション内容表示
fdisk: cannot open /dev/nvme0: Illegal seek


Disk /dev/nvme0n1: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x16c4fadc

Device         Boot Start        End    Sectors  Size Id Type
/dev/nvme0n1p1       2048 4000797359 4000795312  1.9T fd Linux raid autodetect


Disk /dev/nvme0n1p1: 1.9 TiB, 2048407199744 bytes, 4000795312 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


fdisk: cannot open /dev/nvme1: Illegal seek


Disk /dev/nvme1n1: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x739bd4c3

Device         Boot Start        End    Sectors  Size Id Type
/dev/nvme1n1p1       2048 4000797359 4000795312  1.9T fd Linux raid autodetect


Disk /dev/nvme1n1p1: 1.9 TiB, 2048407199744 bytes, 4000795312 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
  • /dev/nvme0n1p1
  • /dev/nvme1n1p1

という名前で作成したパーテーションが、確認できます。次の設定では、このパーテーション名を利用します。ディスクの/dev/nvme0n1や/dev/nvme1n1ではありません

mdadmで、RAIDを構成

次に、mdadmを使って、先ほど作成したパーテーションをRAID0設定にします。mdadmが入っていない場合は、dnfコマンドで入れておきましょう。

# mdadmインストール
[root@localhost]$ dnf -y install mdadm

# RAID設定
[root@localhost]$ mdadm --verbose --create /dev/md0 --metadata 1.0 --level=raid0 --raid-devices=2 /dev/nvme0n1p1 /dev/nvme1n1p1

# RAID設定保存
[root@localhost]$ sh -c 'mdadm --detail --scan > /etc/mdadm.conf'

# ファイルシステム構築
[root@localhost]$ mkfs.xfs -f /dev/md0

/etc/fstabへ自動マウント設定

# マウント先ディレクトリ作成
[root@localhost]$ mkdir /data

# fstabマウント設定追加
[root@localhost]$ echo "UUID=$(blkid | grep /dev/md0|awk '{ print $2 }'|awk -F "\"" '{ print $2 }') /data                      xfs     defaults        0 0" >> /etc/fstab

# マウント設定反映
[root@localhost]$ mount -a

# マウント確認
[root@localhost]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         30G     0   30G   0% /dev
tmpfs            30G     0   30G   0% /dev/shm
tmpfs            30G  9.0M   30G   1% /run
tmpfs            30G     0   30G   0% /sys/fs/cgroup
/dev/md126      1.8T   17G  1.8T   1% /
/dev/md127     1015M  291M  724M  29% /boot
/dev/sda1       599M  5.8M  594M   1% /boot/efi
/dev/md0        3.7T   28G  3.7T   1% /data
tmpfs           5.9G     0  5.9G   0% /run/user/1000

マウント設定は、blkidコマンドを利用して、/dev/md0のUUIDを取得し、そのUUIDを利用して設定します。上記のコマンドは、別々に確認して設定するのがだるかったので、ワンライナー(1行実行)で実行すれば追加されるようにしてあります。

/dev/md0 が/dataにマウントされていることを確認します。再起動を行い、df -h にて再び自動的にマウントされていることを確認して、RAID0設定は終わりです。

自動マウント設定の捕捉

ワンライナーで/etc/fstabに設定を追加しましたが、自動マウントには、上記にあるとおりUUIDを利用します。UUIDは、blkidで確認することができます。

[root@localhost]$ blkid
...
/dev/md0: UUID="b786ec12-9304-4928-82b5-4d51617debef" BLOCK_SIZE="512" TYPE="xfs"

ここで表示されるUUIDを/etc/fstabで利用して設定を行います。

[root@localhost]$ cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sat Jun 19 21:40:35 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=46042610-85d5-4b38-b187-128791c2fff1 /                       xfs     defaults        0 0
UUID=01532dea-df1a-4f7f-9ff5-e44f07144feb /boot                   xfs     defaults        0 0
UUID=42D4-FCC1          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
UUID=74ba5791-c634-4e5d-a946-69e87f112434 none                    swap    defaults        0 0
UUID=b786ec12-9304-4928-82b5-4d51617debef /data  xfs     defaults        0 0

最終行に、自動マウント設定が追加されています。手動で追加しても構いませんが、ミスが起きないようにワンライナーで自動的に追加されるようにしました。

おわりに

書き出してみると、すごく長くなりました・・・。物理マシンのセットアップ時に、1度行うだけの作業なので、すぐ忘れちゃうんですよね。

これで、OSもRAID0、データ領域もRAID0に設定することができました。先述通り、RAID0は、片方のディスクが壊れたら終わりです。

「経験としては、めったに壊れねーよ」

と思っていますが、稀に壊れます、ほんとに。当然ですが、台数が増えれば故障率も上がります。次回、OSのRAID0が壊れても大丈夫なように、まるごとバックアップを実施します。

データ領域は、MariaDBのデータを格納するので、これはまた別途MariaDBのバックアップについて実施したいと思います。OS領域のバックアップが取れていて、データ領域のバックアップも取れていれば、物理的に壊れていない限りもとに戻すことができます。

MariaDBのバックアップについては、リカバリーとリストアの違いを確認しながら、バックアップ運用についても考えていきたいと思います。そして、やっとOS設定が終わったので、MariaDBのインストールの前に、この構築したRAID0のディスク性能を確認してから進みたいと思います。

なんだ、すごい長い道のりですねぇ・・・、っていうか、やってたんだなぁこんなにっていう感想です笑

たぶん、次回もちゃんと投稿すると思います!

最新の更新を
プッシュ通知で購読しよう