NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix Guest Tools 連携で Oracle のスナップショット作成してみる。

Nutanix CE で、Nutanix Guest Tools(NGT)の Application Consistent Snapshots で、Oracle Database の動作している VM のスナップショットを作成してみます。

今回は、NGT による /sbin/pre_freeze & /sbin/post_thaw スクリプト実行により、Oracle Database をバックアップ モードにすることで静止点を取得した状態にして Nutanix でのスナップショットを作成してみます。

/sbin/pre_freeze & /sbin/post_thaw の様子については下記もどうぞ。

今回の環境

Nutanix CE は ce-2017.07.20-stable で、VM「db02」を起動しています。

f:id:gowatana:20170921234116p:plain

この VM の ゲスト OS は Oracle Linux 7.4 で、NGT は下記の感じでインストール済みです。

[root@db02 ~]# cat /etc/oracle-release
Oracle Linux Server release 7.4
[root@db02 ~]# systemctl is-active ngt_guest_agent
active

アプリケーション整合性のあるスナップショットを作成するため、VM だけ含まれている Protection Domain「pd-db02」を作成してあります。

f:id:gowatana:20170921234213p:plain

今回の Oracle Database

今回の Oracle Database は、12c R2 です。

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

「testdb1」という DB インスタンスが起動していて、 OPEN 状態です。

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
testdb1          OPEN

バックアップモードに変更できるように、アーカイブログモードにしてあります。

SQL> archive log list;
データベース・ログ・モード     アーカイブ・モード
自動アーカイブ                 有効
アーカイブ先                    /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch
最も古いオンライン・ログ順序   1
アーカイブする次のログ順序    3
現行のログ順序               3

今回のスクリプト

Oracle Database のバックアップ モード開始 ~ 終了は、sqlplus で DB インスタンスに接続して下記のようなコマンドを実行します。

SQL> alter database begin backup;

データベースが変更されました。

SQL> alter database end backup;

データベースが変更されました。

SQL>

今回はこのコマンドだけ実行する簡易的なスクリプトを配置しています。

pre_freeze スクリプト

[root@db02 ~]# ls -l /sbin/pre_freeze
-rwx------. 1 root root 225  9月 21 23:12 /sbin/pre_freeze
[root@db02 ~]# cat /sbin/pre_freeze
logger "NGT Begin Backup."
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=testdb1
echo 'alter database begin backup;' | su oracle -c "sqlplus -s / as sysdba"

/sbin/post_thaw スクリプト

[root@db02 ~]# ls -l /sbin/post_thaw
-rwx------. 1 root root 221  9月 21 23:12 /sbin/post_thaw
[root@db02 ~]# cat /sbin/post_thaw
logger "NGT End Backup."
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=testdb1
echo 'alter database end backup;' | su oracle -c "sqlplus -s / as sysdba"

Application Consistent Snapshot 作成

アプリケーション整合性のあるスナップショットを作成するため、VM ではなく Protection Domain で「Create application consistent snapshot」のチェックを ON にしてスナップショットを作成します。

f:id:gowatana:20170921234302p:plain

スナップショットが作成されました。

f:id:gowatana:20170921234614p:plain

そのタイミングで、DB が Begin / End Backup でバックアップモードになっています。

[oracle@db02 ~]$ tail -f /u01/app/oracle/diag/rdbms/testdb1/testdb1/trace/alert_testdb1.log
(省略)
2017-09-21T23:23:42.785422+09:00
alter database begin backup
Completed: alter database begin backup
2017-09-21T23:23:55.139395+09:00
alter database end backup
Completed: alter database end backup

/var/log/messages ファイルを見ると、logger によるログ出力でスクリプトが動作したことがわかります。

Sep 21 23:23:42 localhost logger: NGT Begin Backup.
Sep 21 23:23:42 localhost su: (to oracle) root on none
Sep 21 23:23:42 localhost systemd: Created slice User Slice of oracle.
Sep 21 23:23:42 localhost systemd: Starting User Slice of oracle.
Sep 21 23:23:42 localhost systemd: Started Session c1 of user oracle.
Sep 21 23:23:42 localhost systemd: Starting Session c1 of user oracle.
Sep 21 23:23:43 localhost systemd: Removed slice User Slice of oracle.
Sep 21 23:23:43 localhost systemd: Stopping User Slice of oracle.
Sep 21 23:23:55 localhost logger: NGT End Backup.
Sep 21 23:23:55 localhost su: (to oracle) root on none
Sep 21 23:23:55 localhost systemd: Created slice User Slice of oracle.
Sep 21 23:23:55 localhost systemd: Starting User Slice of oracle.
Sep 21 23:23:55 localhost systemd: Started Session c2 of user oracle.
Sep 21 23:23:55 localhost systemd: Starting Session c2 of user oracle.
Sep 21 23:23:55 localhost systemd: Removed slice User Slice of oracle.
Sep 21 23:23:55 localhost systemd: Stopping User Slice of oracle.

NGT のログファイルを見ると、

Received VssQuiesceVm request for snapshot

Executing pre_freeze script...

Snapshot operation completed successfully

Executing post_thaw script...

となっています。

[root@db02 ~]# tail -f /usr/local/nutanix/logs/guest_agent_service.log
(省略) 2017-09-21 23:23:42 INFO rpc_service_linux.py:423 Received VssQuiesceVm request for snapshot with uuid ae5d3bde-636c-471f-adfb-95ba4e9766b1, txn_id 1:1506003821323137 2017-09-21 23:23:42 INFO rpc_service_linux.py:466 Executing pre_freeze script... 2017-09-21 23:23:42 ERROR command.py:155 Failed to execute iscsiadm -m discoverydb: [Errno 2] No such file or directory 2017-09-21 23:23:42 ERROR iscsi_helper_linux.py:186 Failed to get list of target IPs OSError(2, 'No such file or directory') 2017-09-21 23:23:42 ERROR rpc_service_linux.py:570 ps -fC multipathd failed, Status code:1, Output:'UID PID PPID C STIME TTY TIME CMD\n', Error:'' 2017-09-21 23:23:43 INFO rpc_service_linux.py:476 Resuming snapshot operation... 2017-09-21 23:23:44 INFO rpc_service_linux.py:483 Waiting for snapshot operation to complete... 2017-09-21 23:23:54 INFO rpc_service_linux.py:491 Finishing snapshot operation... 2017-09-21 23:23:55 INFO rpc_service_linux.py:500 Snapshot operation completed successfully 2017-09-21 23:23:55 INFO rpc_service_linux.py:502 Executing post_thaw script...

ちなみに現バージョンでは ABS の Volume Group だけを含む Protection Domain では Application Consistent Snapshots が作成できないようでした。そのため利用するには工夫が必要になりそうですが、たとえば「DB を構成するファイルのボリューム配置を分けたりしていないようなシンプルなサーバを とりあえずスナップショット作成できる状態にしたい」ような場合などに使えるかもしれないと思いました。

以上。