コーヒーが好きな emi です。
FSx for NetApp ONTAP(以下 FSxN と省略)ではスナップショットを自動削除する設定があります。本記事ではスナップショット自動削除設定をおこないます。
スナップショットの自動削除とは
スナップショットの自動削除は、「ボリュームサイズに応じたしきい値」または「Snapshot Reserve」を超過した場合に、取得済みのスナップショットを自動で削除する機能です。
データの変更が激しいシステムにおいてスナップショットを短い間隔で取得している場合、大きなスナップショットが大量に作成され、ボリュームを圧迫する可能性があります。この時スナップショットは予約された Snapshot Reserve という領域からあふれ(spill)、使用可能な空き領域を侵食していきます。
ボリュームの使用可能な空き領域が少なくなると、バックアップが失敗したり、iSCSI マウントしたボリュームがオフラインになったり、階層化が止まり書き込み不可になったりします。
スナップショットの自動削除は、スナップショットが必要以上に取得されボリュームを圧迫しないよう、しきい値を超えたら自動的に削除する設定です。
保持世代数の設定とは違う
カスタムスナップショットポリシーでは、-count1
などのオプションでスナップショットを保持する世代数を設定できます。これはあくまで「取得世代数」分だけスナップショットを保持する設定であり、ボリュームサイズに応じて削除されるようなものではありません。
事前準備
FSxN ボリュームサイズは 5GiB で作成しておきます。LUN を 4GiB で設定し、Windows Server に iSCSI 接続しました。
また、今回はあらかじめ Snapshot Reserve を 1% に設定しておきました。Snapshot Reserve の変更方法は以下ブログを参照ください。
ボリュームの空き容量は 18.67% です。
volume show-space で確認したボリュームの内訳(クリックで展開)
FsxId00d1bd3ff74723825::> volume show-space -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1
Vserver: emiki-fsxn-svm
Volume Name: emiki_fsxn_vol1
Volume MSID: 2155477438
Volume DSID: 1026
Vserver UUID: a292aaa0-e422-11ee-bbde-43b9b7eb70fb
Aggregate Name: aggr1
Aggregate UUID: f81e95e6-e421-11ee-bbde-43b9b7eb70fb
Hostname: FsxId00d1bd3ff74723825-01
User Data: 4.02GB
User Data Percent: 80%
Deduplication: 4KB
Deduplication Percent: 0%
Temporary Deduplication: -
Temporary Deduplication Percent: -
Filesystem Metadata: 356KB
Filesystem Metadata Percent: 0%
SnapMirror Metadata: -
SnapMirror Metadata Percent: -
Tape Backup Metadata: -
Tape Backup Metadata Percent: -
Quota Metadata: -
Quota Metadata Percent: -
Inodes: 20KB
Inodes Percent: 0%
Inodes Upgrade: -
Inodes Upgrade Percent: -
Snapshot Reserve: 51.20MB
Snapshot Reserve Percent: 1%
Snapshot Reserve Unusable: -
Snapshot Reserve Unusable Percent: -
Snapshot Spill: -
Snapshot Spill Percent: -
Performance Metadata: 420KB
Performance Metadata Percent: 0%
Total Used: 4.07GB
Total Used Percent: 81%
Total Physical Used Size: 17.23MB
Physical Used Percentage: 0%
Logical Used Size: 4.07GB
Logical Used Percent: 81%
Logical Available: -
FsxId00d1bd3ff74723825::>
Snapshot Reserve: 51.20MB
、Snapshot Reserve Percent: 1%
となっています。
スナップショット自動削除設定
変更前確認
volume snapshot autodelete show コマンドで、変更前の状態を確認します。
実行コマンド
volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1
▼実行結果
FsxId00d1bd3ff74723825::> volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1
Vserver Name: emiki-fsxn-svm
Volume Name: emiki_fsxn_vol1
Enabled: false
Commitment: try
Defer Delete: user_created
Delete Order: oldest_first
Defer Delete Prefix: (not specified)
Target Free Space: 20%
Trigger: volume
Destroy List: none
Is Constituent Volume: false
FsxId00d1bd3ff74723825::>
デフォルトでは Enabled: false
、Target Free Space: 20%
、Trigger: volume
になっています。
Delete Order: oldest_first
は、スナップショットが自動削除される際古い順から削除するという設定です。
スナップショット自動削除設定
volume snapshot autodelete modify コマンドで、スナップショット自動削除設定を有効にします。
実行コマンド
volume snapshot autodelete modify -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1 -enabled true -target-free-space 18 -trigger snap_reserve
-enabled true
:スナップショット自動削除設定を有効-target-free-space 18
:Target Free Space は「空き領域がここで指定した割合になるまで、スナップショットを削除し続ける」という設定です。今回ボリュームの空き領域が既にデフォルトの 20% を切っているので、削除され過ぎてしまうかと考え、現在の空き容量に合わせて 18% にしました。-trigger snap_reserve
:自動削除を開始するトリガーを、今回は Snapshot Reserve を超えた瞬間にします。
▼実行結果
FsxId00d1bd3ff74723825::> volume snapshot autodelete modify -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1 -enabled true -target-free-space 18 -trigger snap_reserve
Volume modify successful on volume emiki_fsxn_vol1 of Vserver emiki-fsxn-svm.
FsxId00d1bd3ff74723825::>
変更後確認
実行コマンド
volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1
▼実行結果
FsxId00d1bd3ff74723825::> volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1
Vserver Name: emiki-fsxn-svm
Volume Name: emiki_fsxn_vol1
Enabled: true
Commitment: try
Defer Delete: user_created
Delete Order: oldest_first
Defer Delete Prefix: (not specified)
Target Free Space: 18%
Trigger: snap_reserve
Destroy List: none
Is Constituent Volume: false
FsxId00d1bd3ff74723825::>
Enabled: true
、Target Free Space: 18%
、Trigger: snap_reserve
に変更できました。
Snapshot Reserve に設定した領域からスナップショットがあふれそうになった(spill)際にスナップショットが自動削除されるか確認
では、カスタムスナップショットポリシーを作成して割り当てて、ちゃんとスナップショットが自動削除されるのか検証します。
カスタムスナップショットポリシーは以下トグル内で作成しました。
5 分毎にスナップショットを作成するカスタムスナップショットポリシーの作成(クリックで展開)
以下のブログを参考にしてください。
5 分毎に実行するジョブスケジュール(emiki_5min
)の作成
job schedule cron create -vserver emiki-fsxn-svm -name emiki_5min -minute "0,5,10,15,20,25,30,35,40,45,50,55"
▼実行結果
FsxId00d1bd3ff74723825::> job schedule cron create -vserver emiki-fsxn-svm -name emiki_5min -minute "0,5,10,15,20,25,30,35,40,45,50,55"
FsxId00d1bd3ff74723825::>
意図した値でスナップショットジョブスケジュールが作成されたか確認
job schedule cron show
▼ 実行結果
FsxId00d1bd3ff74723825::> job schedule cron show
Cluster Vserver Name Description
------- -------- ----------- --------------------------------------------------
FsxId00d1bd3ff74723825
FsxId00d1bd3ff74723825
10min @:00,:10,:20,:30,:40,:50
12-hourly @0:15,12:15
5min @:00,:05,:10,:15,:20,:25,:30,:35,:40,:45,:50,:55
6-hourly @0:15,6:15,12:15,18:15
8hour @2:15,10:15,18:15
daily @0:10
hourly @:05
monthly 1@0:20
pg-15-minutely
@:10,:25,:40,:55
pg-6-hourly @3:03,9:03,15:03,21:03
pg-daily @0:10
pg-daily-set2
@6:25
pg-daily-set3
@12:40
pg-daily-set4
@18:55
pg-hourly @:07
pg-hourly-set2
@:22
pg-hourly-set3
@:37
pg-hourly-set4
@:52
pg-remote-15-minutely
@:00,:15,:30,:45
pg-remote-6-hourly
@3:08,9:08,15:08,21:08
pg-remote-daily
@0:15
pg-remote-hourly
@:12
pg-remote-weekly
Sun@0:20
pg-weekly Sun@0:15
pg-weekly-set2
Tue@4:30
pg-weekly-set3
Thu@10:44
pg-weekly-set4
Sat@16:59
weekly Sun@0:15
FsxId00d1bd3ff74723825
emiki-fsxn-svm
emiki_5min @:00,:05,:10,:15,:20,:25,:30,:35,:40,:45,:50,:55
29 entries were displayed.
FsxId00d1bd3ff74723825::>
スナップショットポリシーの作成
項目 | 値 |
---|---|
policy_name(スナップショットポリシー名) | emiki_snapshot_policy_200_5min |
schedule1_name(スケジュール 1) | emiki_5min |
copies_to_retain1(保持するコピー数) | 200 |
snapshot_prefix1(スナップショット保存時につけるプレフィックス) | emiki_5min |
volume snapshot policy create -vserver emiki-fsxn-svm -policy emiki_snapshot_policy_200_5min -enabled true -schedule1 emiki_5min -count1 200 -prefix1 emiki_5min
▼ 実行結果例
FsxId00d1bd3ff74723825::> volume snapshot policy create -vserver emiki-fsxn-svm -policy emiki_snapshot_policy_200_5min -enabled true -schedule1 emiki_5min -count1 200 -prefix1 emiki_5min
FsxId00d1bd3ff74723825::>
意図した値でスナップショットポリシーが作成されたか確認
volume snapshot policy show
▼ 実行結果例
FsxId00d1bd3ff74723825::> volume snapshot policy show
Vserver: FsxId00d1bd3ff74723825
Number of Is
Policy Name Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
default 3 true Default policy with hourly, daily & weekly schedules.
Schedule Count Prefix SnapMirror Label Retention Period
-------------- ----- ------------- ------------------ ------------------
hourly 6 hourly - 0 seconds
daily 2 daily daily 0 seconds
weekly 2 weekly weekly 0 seconds
default-1weekly 3 true Default policy with 6 hourly, 2 daily & 1 weekly schedule.
Schedule Count Prefix SnapMirror Label Retention Period
-------------- ----- ------------- ------------------ ------------------
hourly 6 hourly - 0 seconds
daily 2 daily - 0 seconds
weekly 1 weekly - 0 seconds
none 0 false Policy for no automatic snapshots.
Schedule Count Prefix SnapMirror Label Retention Period
-------------- ----- ------------- ------------------ ------------------
- - - - -
Vserver: emiki-fsxn-svm
Number of Is
Policy Name Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
emiki_snapshot_policy_200_5min 1 true -
Schedule Count Prefix SnapMirror Label Retention Period
-------------- ----- ------------- ------------------ ------------------
emiki_5min 200 emiki_5min - 0 seconds
4 entries were displayed.
FsxId00d1bd3ff74723825::>
ここでこちらのスクリプトを使用してボリューム内で常にファイルの変更が発生している状態を再現します。
作成したスナップショットポリシーをボリュームに設定します。(途中 y 入力)
実行コマンド
volume modify -volume emiki_fsxn_vol1 -snapshot-policy emiki_snapshot_policy_200_5min
▼実行結果
FsxId00d1bd3ff74723825::> volume modify -volume emiki_fsxn_vol1 -snapshot-policy emiki_snapshot_policy_200_5min
Warning: You are changing the Snapshot policy on volume "emiki_fsxn_vol1" to "emiki_snapshot_policy_200_5min".
Snapshot copies on this volume that do not match any of the prefixes of the new Snapshot policy will not
be deleted. However, when the new Snapshot policy takes effect, depending on the new retention count,
any existing Snapshot copies that continue to use the same prefixes might be deleted. See the 'volume
modify' man page for more information.
Do you want to continue? {y|n}: y
Volume modify successful on volume emiki_fsxn_vol1 of Vserver emiki-fsxn-svm.
FsxId00d1bd3ff74723825::>
スナップショットポリシーが変更できたか確認します。
実行コマンド
volume show -volume emiki_fsxn_vol1 -fields snapshot-policy
▼実行結果
FsxId00d1bd3ff74723825::> volume show -volume emiki_fsxn_vol1 -fields snapshot-policy
vserver volume snapshot-policy
-------------- --------------- ------------------------------
emiki-fsxn-svm emiki_fsxn_vol1 emiki_snapshot_policy_200_5min
FsxId00d1bd3ff74723825::>
スナップショットの取得状況を確認します。Snapshot Reserve: 51.20MB
、Snapshot Reserve Percent: 1%
なので、取得したスナップショットの大きさの合計が 51.20MB
を大幅に超えることなく古い順に削除されていくような挙動をしてくれれば成功です。
実行コマンド
volume snapshot show -volume emiki_fsxn_vol1
▼ 実行結果
FsxId00d1bd3ff74723825::> volume snapshot show -volume emiki_fsxn_vol1
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
emiki-fsxn-svm
emiki_fsxn_vol1
emiki_5min.2024-03-17_1335 9.26MB 0% 36%
emiki_5min.2024-03-17_1340 8.99MB 0% 35%
emiki_5min.2024-03-17_1345 9.47MB 0% 36%
emiki_5min.2024-03-17_1350 8.72MB 0% 34%
4 entries were displayed.
FsxId00d1bd3ff74723825::>
FsxId00d1bd3ff74723825::> volume snapshot show -volume emiki_fsxn_vol1
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
emiki-fsxn-svm
emiki_fsxn_vol1
emiki_5min.2024-03-17_1340 8.99MB 0% 35%
emiki_5min.2024-03-17_1345 9.47MB 0% 36%
emiki_5min.2024-03-17_1350 9.13MB 0% 35%
emiki_5min.2024-03-17_1355 9.14MB 0% 35%
4 entries were displayed.
FsxId00d1bd3ff74723825::>
FsxId00d1bd3ff74723825::> volume snapshot show -volume emiki_fsxn_vol1
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
emiki-fsxn-svm
emiki_fsxn_vol1
emiki_5min.2024-03-17_1345 9.47MB 0% 36%
emiki_5min.2024-03-17_1350 9.13MB 0% 36%
emiki_5min.2024-03-17_1355 9.14MB 0% 36%
emiki_5min.2024-03-17_1400 9.50MB 0% 37%
emiki_5min.2024-03-17_1405 3.50MB 0% 18%
5 entries were displayed.
FsxId00d1bd3ff74723825::>
スナップショットの保持世代数は 200 にしていますが、大体 4~5 つスナップショットを取得した時点で古いスナップショットが削除されているのが分かります。意図した挙動であることが確認できました。
スナップショットの自動削除設定によりバックアップのためのスナップショット取得が失敗すると、それに伴いバックアップも失敗する
2024/3/21 追記
FSxN のバックアップは内部的に SnapMirror という ONTAP 独自のスナップショットを利用したブロックレベルコピーを使っているので、バックアップ時に差分を見るためのスナップショットが取得されています。
また、スナップショットの自動削除設定では、SnapMirror によってロックされているスナップショットは削除されません。
削除されないスナップショット
デフォルトでは 、Snapshotの自動削除では、SnapMirrorによってロックされているSnapshot、ボリューム、 LUN、NVMeネームスペース、 ファイルのクローンは削除されません。
Snapshot の自動削除の使用方法 - NetApp
つまり、スナップショットの自動削除設定を有効化した状態で、バックアップにより Snapshot Reserve を超えるような巨大なスナップショットが一発で取得された場合、SnapMirror でロックされているため削除することができず、スナップショットは残っているもののバックアップには失敗しているという状態になります。
Amazon FSx was unable to create your backup because the volume's Snapshot autodelete policy is deleting the backup snapshot before the backup can be created. To continue taking Amazon FSx backups, please modify your Snapshot autodelete policy to ensure there's sufficient space in the Snapshot reserve for the backup snapshot. For more information, see https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snapshots-ontap.html#snapshot-autodelete-policy.
(機械翻訳)ボリュームのスナップショット自動削除ポリシーが、バックアップを作成する前にバックアップスナップショットを削除しているため、Amazon FSxはバックアップを作成できませんでした。Amazon FSxのバックアップを取り続けるには、スナップショットの自動削除ポリシーを変更して、スナップショットリザーブにバックアップスナップショット用の十分なスペースがあることを確認してください。詳細については、https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snapshots-ontap.html#snapshot-autodelete-policy を参照してください。
バックアップのために取得された(SnapMirror でロックされた)スナップショットも自動削除設定で削除したい場合、volume snapshot autodelete modify の -commitment
オプションで削除するように設定することもできるようです。
ただし、そうすると失敗したバックアップが残る形になると思われます。
データ移行中など、データの差分が大きく発生しスナップショットが巨大になることが考えられる場合はスナップショットの取得やバックアップを止めておき、安定稼働が確認できてから余裕をもったボリュームサイジングのうえスナップショットの取得やバックアップ取得をすると良さそうです。
また、FSxN でサポートされているバックアップではなく、同じ大きさの FSxN ファイルシステムを構築し、SnapMirror でデータを同期することでバックアップとする方法もあります。以下ブログをご参照ください。
おわりに
スナップショットの自動削除設定を有効化し、挙動を確認しました。どなたかのお役に立てば幸いです。