Cisco ACI のスナップショット機能に関して、以前に以下のメモを書きました。
スナップショット機能は実装当初から使いやすい機能で、最新のバージョンに至るまで殆ど変更の無い、完成された機能だと思います。 今回はスナップショット機能について改めてまとめておきます。
結論
先に結論を記載しておきます。
DailyAutoBackup
について- ACI 初期状態で設定済み
- 8 時間おきに定期実行され、スナップショットを取得する
- スナップショットは 3 世代取得される (初期状態では後述の
maxSnapshotCount
が「3」になっている為) - 3 世代を超える場合は、スナップショット全体のうち最も古いファイルが削除される
- ファブリック全体で取得可能なスナップショット最大数について
- 全ての
Export Policy
合計で 50 世代までスナップショットを取得可能 - 50 世代を超える場合は、スナップショット全体のうち最も古いファイルが削除される
- 全ての
Export Policy
毎に取得可能なスナップショットの最大数についてExport Policy
を JSON / XML で出力した際に含まれるmaxSnapshotCount
の設定値で決まるmaxSnapshotCount
がglobal-limit
の場合、そのExport Policy
は「50」世代までスナップショットを取得可能maxSnapshotCount
の値を超える数のスナップショットを取得すると、スナップショット全体のうち最も古いファイルが削除される
maxSnapshotCount
の設定方法について- Web GUI からは指定出来ず、自動的に
global-limit
になる - CLI からは指定出来ず、自動的に
global-limit
になる - Ansible からは 1 ~ 10 の値を必ず指定出来る (但し、Ansible 2.8 時点だとソースコードを見た限り、
global-limit
は指定出来ないように見えた) - REST API であれば
maxSnapshotCount
へ以下を設定可能- 「1 ~ 10」の数字
global-limit
(「50」と同じ意味)
- Web GUI からは指定出来ず、自動的に
Web GUI での Export Policy 設定方法
スナップショットは Export Policy
をトリガーすることで取得される為、まず Export Policy
を設定する必要があります。 ACI 4.2(2e) でも設定方法は従来と同じです。
Step.1
Admin
→ Import/Export
→ Export Policies
→ Configuration
→ Policy
→ Create Configuration Export Policy
をクリックします。
Step.2
Create Configuration Export Policy
というウインドウが表示されます。 初期状態では Shapshot
が未チェックになっており、その代わりに Export Destination
欄が表示されています。
Snapshot
にチェックを入れると Export Destination
欄は表示されなくなります (スナップショットは APIC 内部に保存されるので、必然的に保存場所を指定する必要がなくなる為)。 これで設定自体は完了です。 すぐにスナップショットを取得したい場合は Start Now
を Yes
に設定します。 但し、Start Now
は「すぐにスナップショットを取得する」だけであり、設定として保持するわけでは無いので、実行してもすぐに Start Now: No
に戻ります。
取得済みのスナップショットの一覧を確認する
Web GUI、CLI 各々から取得済みのスナップショットを一覧表示する方法をまとめます。
Web GUI
Admin
→ Config Rollbacks
と辿ると取得済みのスナップショット一覧を表示することが出来ます。
CLI
CLI であれば show snapshot files
で確認することが出来ます。
apic# show snapshot files
File : ce2_DailyAutoBackup-2019-10-07T01-00-11.tar.gz
Created : 2019-10-07T01:00:13.041
Root :
Size : 52718
File : ce2_DailyAutoBackup-2019-10-07T09-00-00.tar.gz
Created : 2019-10-07T09:00:02.228
Root :
Size : 52806
File : ce2_DailyAutoBackup-2019-10-07T17-00-17.tar.gz
Created : 2019-10-07T17:00:19.011
Root :
Size : 55012
CLI からスナップショットの数を数える
取得したスナップショットファイルは全てのコントローラの /data2/snapshots/
ディレクトリに保存されるようです (APIC x 3 台環境で確認)。
apic# ls -l /data2/snapshots
合計 160
-rw-r--r-- 1 ifc admin 52718 10月 7 01:00 ce2_DailyAutoBackup-2019-10-07T01-00-11.tar.gz
-rw-r--r-- 1 ifc admin 52806 10月 7 09:00 ce2_DailyAutoBackup-2019-10-07T09-00-00.tar.gz
-rw-r--r-- 1 ifc admin 55012 10月 7 17:00 ce2_DailyAutoBackup-2019-10-07T17-00-17.tar.gz
スナップショット数を数えるには /data2/snapshots/
ディレクトリ配下のファイル数を数えれば良いのですが、オプションを指定しない ls
では上記出力例のように 合計
という余計な表示が含まれてしまいます。 その為、ls -1
(数字の「イチ」オプション) を指定して 合計
が表示されないようにし、出力結果の行数を wc -l
でカウントすることで「スナップショットファイルの数」を数えます。
apic# ls -1 /data2/snapshots | wc -l
3
CLI からスナップショットを取得する
CLI からスナップショットを取得するには以下のように実行します。
trigger snapshot export [ExportPolicy]
CLI からスナップショットを削除する
CLI からスナップショットを削除するには以下のように実行します。 尚、ファイル名の指定時に正規表現は利用出来ないようです。
clear snapshot file [SnapshotFile]
初期状態で存在する DailyAutoBackup の設定内容
(ACI でスナップショット機能を実装して以降) ACI のバージョンに関わず、初期状態で DailyAutoBackup
という設定が存在します。 この設定を確認していきます。
Web GUI
Web GUI では以下のように表示されます。 以下の設定になっていることが分かります。
- JSON 形式でコンフィグを保存する
- (外部へのバックアップでは無く) スナップショットをバックアップする
- 8 時間間隔で定期的にコンフィグをバックアップする
CLI
CLI 上から設定を確認すると以下のように表示されます。
apic# show running-config snapshot export DailyAutoBackup
# Command: show running-config snapshot export DailyAutoBackup
# Time: Mon Oct 14 14:49:15 2019
snapshot export DailyAutoBackup
schedule EveryEightHours
exit
all
オプションを付与し、暗黙的なデフォルト値も表示させると以下のように表示されます。
apic# show running-config all snapshot export DailyAutoBackup
# Command: show running-config all snapshot export DailyAutoBackup
# Time: Mon Oct 14 14:49:11 2019
snapshot export DailyAutoBackup
format json
schedule EveryEightHours
no target
exit
REST API
REST API で取得した .json ファイルは以下の内容になっていました。 Web GUI や CLI では確認出来ない、maxSnapshotCount : 3
という設定が存在しているのが分かります。 ACI ではこのように、Web GUI や CLI では確認出来ないが、REST API からは確認出来る設定が幾つか存在するようです。
{
"imdata": [
{
"configExportP": {
"attributes": {
"adminSt": "untriggered",
"annotation": "",
"descr": "",
"dn": "uni/fabric/configexp-DailyAutoBackup",
"format": "json",
"includeSecureFields": "yes",
"maxSnapshotCount": "3",
"name": "DailyAutoBackup",
"nameAlias": "",
"snapshot": "yes",
"targetDn": ""
},
"children": [
{
"configRsExportScheduler": {
"attributes": {
"annotation": "",
"tnTrigSchedPName": "EveryEightHours"
}
}
}
]
}
}
],
"totalCount": "1"
}
Web GUI から作成した Export Policy の内容
Web GUI 上から作成した Export Policy の内容を確認してみます。
CLI
CLI から確認すると設定は以下のようになっています。 設定時にスケジューラを指定しなかったので、schedule
設定が無いこと以外は DailyAutoBackup
と同じ内容です。
apic# show running-config snapshot export SnapshotTest
# Command: show running-config snapshot export SnapshotTest
# Time: Mon Oct 14 17:25:58 2019
snapshot export SnapshotTest
exit
all
オプションを指定すると以下のように表示されます。
apic# show running-config all snapshot export SnapshotTest
# Command: show running-config all snapshot export SnapshotTest
# Time: Mon Oct 14 17:25:48 2019
snapshot export SnapshotTest
format json
no target
exit
REST API
REST API で .json ファイルを取得すると以下の内容になっていました。 先ほどの DailyAutoBackup
とは違い、maxSnapshotCount: global-limit
になっていることが分かります。
{
"imdata": [
{
"configExportP": {
"attributes": {
"adminSt": "untriggered",
"annotation": "",
"descr": "",
"dn": "uni/fabric/configexp-SnapshotTest",
"format": "json",
"includeSecureFields": "yes",
"maxSnapshotCount": "global-limit",
"name": "SnapshotTest",
"nameAlias": "",
"snapshot": "yes",
"targetDn": ""
}
}
}
],
"totalCount": "1"
}
スナップショットの最大数は「50」世代まで
スナップショットが何世代まで取得可能なのか、試してみます。 まず、50 世代までスナップショットを取得してみました。 スナップショットの内訳は以下のようになっています。
トリガーした Export Policy |
スナップショット数 |
---|---|
DailyAutoBackup |
3 |
SnapshotTest |
47 |
実際に APIC の CLI からスナップショット数の合計が「50」であることを確認しておきます。
apic# ls -1 /data2/snapshots | wc -l
50
この状態から更にもう一世代、SnapshotTest
をトリガーしてスナップショットを取得します。
apic# trigger snapshot export SnapshotTest
Web GUI の表示は以下のようになりました。 最も古い日付のスナップショットがひとつ、減っていることが分かります。
しかし、スナップショット自体の合計は「50」のままです。
apic# ls -1 /data2/snapshots | wc -l
50
スナップショットの内訳は以下のようになっていました。
apic# ls -1 /data2/snapshots/ce2_DailyAutoBackup* | wc -l
2
apic# ls -1 /data2/snapshots/ce2_SnapshotTest* | wc -l
48
これらの結果からスナップショットは以下の仕様であることが分かります。
- スナップショットは 50 世代まで取得可能
- 50 世代を超えた場合は、最も古いスナップショットが削除される
世代数を決めるパラメータは maxSnapshotCount
該当の Export Policy
が「何世代までスナップショットを取得可能か?」を決定しているのは maxSnapshotCount
というパラメータのようです。 ここまでの検証で分かるように、maxSnapshotCount
は以下の動作をするようです。 加えて、maxSnapshotCount
に指定可能な数値は「1 ~ 10 まで」という制限もあります。
- その
Export Policy
が取得出来るスナップショットの世代数はmaxSnapshotCount
の値まで maxSnapshotCount
を超えるスナップショット数を超えると、全てのスナップショットを通じて最も古いスナップショットが削除される- Web GUI から
Export Policy
を新規作成 / 変更する場合、maxSnapshotCount
は指定できず、暗黙的にglobal-limit
という値になる maxSnapshotCount
がglobal-limit
の場合、スナップショットは 50 世代まで取得可能maxSnapshotCount
は以下の値を設定可能- 1 ~ 10
global-limit
(「50」と同じ意味)
REST API で maxSnapshotCount を変更する
上述の通り、Web GUI や CLI では maxSnapshotCount
の値を変更することは出来ませんが、REST API であれば設定変更可能です。 ここでは curl
を使って DailyAutoBackup
の maxSnapshotCount
を「5」へ変更してみます。
まず、ACI へログインします。
ACI へログインする
curl -k \
-X POST https://10.0.0.1/api/aaaLogin.json \
--data '{"aaaUser":{"attributes":{"name":"admin","pwd":"password"}}}' \
-c cookie.txt
「maxSnapshotCount : 5」に設定する
次が本番です。 以下のように maxSnapshotCount : 5
を指定した JSON を DailyAutoBackup
に対して POST すれば設定完了です。
curl -k \
-X POST https://10.0.0.1/api/mo/uni/fabric/configexp-DailyAutoBackup.json \
--data '{"configExportP": {"attributes": {"maxSnapshotCount": "5"}}}' \
-b cookie.txt
「maxSnapshotCount : global-limit」に設定する
バックアップ世代数を「50」(global-limit
) に設定するには以下のように実行します。
curl -k \
-X POST https://10.0.0.1/api/mo/uni/fabric/configexp-DailyAutoBackup.json \
--data '{"configExportP": {"attributes": {"maxSnapshotCount": "global-limit"}}}' \
-b cookie.txt
コメント