EBSボリュームはいくつで運用するのがよいのか
疑問~EBSはいくつが最適解?~
ディスク使用率が高くなり困っていた。
そこで、swapをswapファイルではなく、別ボリュームを作成してマウントしてそこの領域をswapにしようとした。
そうすれば/ディレクトリを2Gあけることができるし、仮に不要になれば戻すのも簡単だと考えたからだった。
しかし、どうしても運用は複雑になる。
そこで疑問に思ったのだが、swapを別ボリュームで動かすというのは理にかなっているのか?
そしてベストプラクティス的にEBSっていくつなのか、と疑問に思った。
思いつきでswapやらデータディスクを追加するのも美しくないので調べてみた。
参考サイト
意外とググっても出てこない。
そんなの自分で好きに決めろよってことなのか・・・?
下記2サイトあたりがヒントになりそう。
https://media.amazonwebservices.com/jp/csd20140909/TA-02.pdf
容量は1GB~1TB。EC2インスタンスに複数アタッチできるので、大容量が必要なら複数のEBSを使う
まぁ容量が大きくなれば複数必要だろうが・・・。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-best-practices.html
オペレーティングシステム用およびデータ用として個別に Amazon EBS ボリュームを使用します。
データのボリュームがインスタンス終了後も保持されることを確認します。
詳細については、「インスタンスの削除で Amazon EBS ボリュームを保持する」を参照してください。
暫定結論~オペレーティングシステム用+データディスクの2つ~
これかな。
データ用として個別、というのは1つでいいのだろうか。
Apache、Postgresql、Mysql と、ミドルウェアごとにデータディスク用意するとなると、ミドルウェアが増えるとディスク追加しなきゃいけなくなり面倒なので、とりあえずは1つと解釈する。
新しいEBSボリュームを作成し、/dataというディレクトリにマウントして使おう。
移動させるのはApacheのドキュメントルート、Postgresql、Mysql、Redmineのデータ(/var/libの下にあるやつ)をごっそりもってくればいいはず。
今回はいきなり本番でやるのでなく、現環境を複製してそこで試し、問題なければ本番適用する。
作業記録~データディスク追加作業、データ移行~
・AMIからインスタンス作成(省略) ・新たなEBSボリュームを作成 注意点はボリュームの暗号化くらいか。デバイスはいじらず/dev/sdfにしておく ・lsblk でデバイス名を確認 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 20G 0 disk └─nvme0n1p1 259:1 0 20G 0 part / nvme1n1 259:2 0 20G 0 disk ・ファイルシステムがあるかどうか確認 sudo file -s /dev/nvme1n1 気になったのは、EBSってパーミッション切れるのだろうか。 ・ファイルシステム(xfs)を作成 sudo mkfs -t xfs /dev/nvme1n1 ・ファイルシステムのマウント sudo mkdir /data sudo mount /dev/nvme1n1 /data ・df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 454M 0 454M 0% /dev tmpfs 482M 0 482M 0% /dev/shm tmpfs 482M 13M 469M 3% /run tmpfs 482M 0 482M 0% /sys/fs/cgroup /dev/nvme0n1p1 20G 12G 8.1G 60% / fs-da1d1dfb.efs.ap-northeast-1.amazonaws.com:/ 8.0E 2.1G 8.0E 1% /efs tmpfs 97M 0 97M 0% /run/user/1000 /dev/nvme1n1 20G 33M 20G 1% /data ここまではほぼAWSドキュメント通り。 https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html ・関連してそうなプロセスを止めておく systemctl stop httpd systemctl stop mysqld systemctl stop postgresql systemctl stop haproxy ・Apacheのドキュメントルート(正確にはドキュメントルート含むコンテンツ全て)を移動およびシンボリックリンクを貼る mv /www /data/ ln -s /data/www /www mkdir -p /data/var/lib mv /var/lib/redmine /data/var/lib/ ln -s /data/var/lib/redmine /var/lib/redmine lrwxrwxrwx 1 root root 9 Aug 31 03:03 www -> /data/www lrwxrwxrwx 1 root root 21 Aug 31 04:11 redmine -> /data/var/lib/redmine ・mysql、postgresqlのデータ移動およびシンボリックリンクを貼る mv /var/lib/mysql /data/var/lib/ ln -s /data/var/lib/mysql /var/lib/mysql mv /var/lib/pgsql/ /data/var/lib/ ln -s /data/var/lib/pgsql /var/lib/pgsql ・blkidでUUIDを確認し、/etc/fstabを編集 vi /etc/fstab ----- (追記) UUID=7faa88dd-6320-4af2-9a27-71a67d967d5d /data xfs defaults 0 0 ----- ・rebootしても問題ないことを確認 ほんとはリブートするまえにアンマウントしてmount -aでエラーでないことを確認すべき。本番ではそうする。 ・AMIを作成し、新規インスタンス作成 AMIを作成すると2つスナップショットと1つAMIが作成される。 そのAMIからインスタンス作成し、問題なく起動した。 mountも問題なし。 mountされているEBSボリュームもまとめてamiが作成されるんだなぁ。便利だ。 ・容量はこんな感じ。/efsに2つのWordPressサイトデータがのっかっているので意外と/data自体は大きくならなかった。 df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 454M 0 454M 0% /dev tmpfs 482M 0 482M 0% /dev/shm tmpfs 482M 13M 469M 3% /run tmpfs 482M 0 482M 0% /sys/fs/cgroup /dev/nvme0n1p1 20G 11G 9.5G 53% / fs-da1d1dfb.efs.ap-northeast-1.amazonaws.com:/ 8.0E 2.1G 8.0E 1% /efs tmpfs 97M 0 97M 0% /run/user/1000 /dev/nvme1n1 20G 1.5G 19G 8% /data
宿題
次はいよいよ本番適用。マスターだけ適用し、マスターの複製からスレーブを作成する予定。 → 後日、実施しました。
ボリュームのスナップショットの取り方、スナップショットからの復旧手順も確認しておく。