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」を起動しています。
この 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」を作成してあります。
今回の 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 にしてスナップショットを作成します。
スナップショットが作成されました。
そのタイミングで、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 を構成するファイルのボリューム配置を分けたりしていないようなシンプルなサーバを とりあえずスナップショット作成できる状態にしたい」ような場合などに使えるかもしれないと思いました。
以上。