Add DB2 full online backups for DB2
Currently Trove only supports full offline backups for DB2. This spec details how to configure DB2 for full online backups & restore. Implements blueprint: db2-online-backup Change-Id: I260133431d12ea1f4aea63e49bfd408cf2454431
This commit is contained in:
parent
3ad634780d
commit
7d1f3617d5
267
specs/newton/db2-online-backup.rst
Normal file
267
specs/newton/db2-online-backup.rst
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
Sections of this template were taken directly from the Nova spec
|
||||||
|
template at:
|
||||||
|
https://github.com/openstack/nova-specs/blob/master/specs/juno-template.rst
|
||||||
|
|
||||||
|
..
|
||||||
|
This template should be in ReSTructured text. The filename in the git
|
||||||
|
repository should match the launchpad URL, for example a URL of
|
||||||
|
https://blueprints.launchpad.net/trove/+spec/awesome-thing should be named
|
||||||
|
awesome-thing.rst.
|
||||||
|
|
||||||
|
Please do not delete any of the sections in this template. If you
|
||||||
|
have nothing to say for a whole section, just write: None
|
||||||
|
|
||||||
|
Note: This comment may be removed if desired, however the license notice
|
||||||
|
above should remain.
|
||||||
|
|
||||||
|
|
||||||
|
====================================
|
||||||
|
DB2 Full Online Backup and Restore
|
||||||
|
====================================
|
||||||
|
|
||||||
|
Currently in Trove, we support full offline backups for DB2 which is the
|
||||||
|
default backup mechanism for DB2. This enables users to take full backups of
|
||||||
|
DB2 databases when no applications are connected to or using these databases.
|
||||||
|
While useful for cases where this downtime is okay, it is not very useful in
|
||||||
|
a production type environment were applications are expected to be online all
|
||||||
|
the time. DB2 provides a way to do online backups and this spec outlines how
|
||||||
|
we can implement a full online backup mechanism in Trove.
|
||||||
|
|
||||||
|
Launchpad Blueprint:
|
||||||
|
https://blueprints.launchpad.net/trove/+spec/db2-online-backup
|
||||||
|
|
||||||
|
|
||||||
|
Problem Description
|
||||||
|
===================
|
||||||
|
|
||||||
|
There are two types of backups we can perform using DB2 - offline and online.
|
||||||
|
Offline backups require users and applications to be disconnected from the
|
||||||
|
databases thereby requiring a certain down time. Online backups on the other
|
||||||
|
hand, can be performed while users are still connected to databases. Trove
|
||||||
|
currently supports full offline backups for DB2. In this spec, we explain
|
||||||
|
how to enable full online backups for DB2 in Trove.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed Change
|
||||||
|
===============
|
||||||
|
|
||||||
|
As mentioned above, the difference between offline and online backup is that
|
||||||
|
in the former case all applications must disconnect from the database while
|
||||||
|
in the latter, applications can still be connected to databases while backup
|
||||||
|
is being taken. In order to enable online backups, archive logging needs to
|
||||||
|
be enabled. This allows applications to use the database even while backups
|
||||||
|
are being taken. Any updates made to the database is recorded in the logs.
|
||||||
|
|
||||||
|
Logging is a mechanism where every updates to a database is recorded to
|
||||||
|
transaction logs (also called active logs) as the data is being modified.
|
||||||
|
There are 2 types of logging mechanism - circular and archive logging. By
|
||||||
|
default, circular logging is enabled which means that after the last active
|
||||||
|
log is filled, the first active log is overwritten. With circular logging
|
||||||
|
as the default logging mechanism, only offline backups can be taken.
|
||||||
|
|
||||||
|
Using archive logging, the logs are stored in sequence and as logs get full,
|
||||||
|
they are archived. Archive logging allows users to restore databases by roll
|
||||||
|
forwarding to a particular point in time or a point before failure. Hence,
|
||||||
|
users can restore a database from a backup image and roll forward to a
|
||||||
|
particular point using logs thus getting it to a consistent state. For an
|
||||||
|
introduction to archive logging, please refer [1] and for an overview of how
|
||||||
|
transactional logging works in DB2, please refer [2].
|
||||||
|
|
||||||
|
To enable full online backup for Trove, the following steps need to be taken:
|
||||||
|
|
||||||
|
1. Create a directory to store the backups and archive logs -
|
||||||
|
/home/db2inst1/db2inst1/backup/ArchiveLogs
|
||||||
|
2. When a database is created, if online backups is configured for DB2(through
|
||||||
|
the backup_strategy config property), then configure the following database
|
||||||
|
configuration parameter: 'LOGARCHMETH1' to point to a location where the
|
||||||
|
archive logs can be stored using the command:
|
||||||
|
|
||||||
|
db2 update database configuration for <db> using LOGARCHMETH1
|
||||||
|
'DISK:/home/db2inst1/backup/ArchiveLogs'
|
||||||
|
|
||||||
|
Setting this database configuration parameter enables archive logging and
|
||||||
|
stores the archive logs in a location different from the primary/active
|
||||||
|
logs.Once this change is made, a full offline backup needs to be taken
|
||||||
|
before any connections can be made to the database (this is because the
|
||||||
|
database goes into a 'BACKUP_PENDING' state when this configuration
|
||||||
|
change is made).
|
||||||
|
|
||||||
|
db2 backup database <db> to /home/db2inst1/db2inst1/backup
|
||||||
|
|
||||||
|
This backup can be deleted from the backup directory after this operation.
|
||||||
|
3. The online backup strategy for DB2 will comprise of the following actions:
|
||||||
|
- Check if archive logging is enabled for each database
|
||||||
|
- Check if there is enough space to store backups (which will include
|
||||||
|
database and archived logs). The get_dbsize_info function that DB2
|
||||||
|
provides can be used to get the size of the database directory. We can
|
||||||
|
query the SYSIBMADM.LOG_UTILIZATION table to get the log space used for
|
||||||
|
each database.
|
||||||
|
- Do an online backup of the database and include the archive logs along
|
||||||
|
with the backup image itself:
|
||||||
|
|
||||||
|
db2 backup database <db> ONLINE to
|
||||||
|
/home/db2inst1/db2inst1/backup INCLUDE LOGS
|
||||||
|
|
||||||
|
4. Once the backup is complete, compress/encrypt the backup inside the volume
|
||||||
|
storage.
|
||||||
|
5. The compressed/encrypted file can then be stored in Swift under the
|
||||||
|
database_backups container.
|
||||||
|
6. Once the backups are stored in Swift, we can go ahead and delete the backup
|
||||||
|
files and archive logs from the backup directory.
|
||||||
|
|
||||||
|
Restoring a database includes restoring from an online backup image and
|
||||||
|
rolling forward the logs to the end of the backup to make sure the database is
|
||||||
|
in a consistent state.
|
||||||
|
|
||||||
|
1. Create a directory where the backup files and archive logs can be stored
|
||||||
|
2. Retrieve the backup from storage to the proper location
|
||||||
|
3. Use the following commands to restore the database and ensure it is in a
|
||||||
|
consistent state:
|
||||||
|
- db2 RESTORE DATABASE <db> FROM <backup_dir> LOGTARGET <log_dir>
|
||||||
|
|
||||||
|
The above command restores the database from the specified online backup
|
||||||
|
directory and extracts the archive log files into the log_dir
|
||||||
|
|
||||||
|
- db2 ROLLFORWARD DATABASE <db> TO END OF BACKLOG AND COMPLETE
|
||||||
|
|
||||||
|
This command will roll forward the restored database to a consistent state
|
||||||
|
by applying the archive logs. To see more details on the ROLLFORWARD
|
||||||
|
command, please refer [3].
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The default configuration values of the following will need to change to
|
||||||
|
correspond to the respective DB2 locations.
|
||||||
|
|
||||||
|
* backup_strategy
|
||||||
|
* backup_namespace
|
||||||
|
* restore_namespace
|
||||||
|
|
||||||
|
Database
|
||||||
|
--------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Public API
|
||||||
|
----------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Public API Security
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Python API
|
||||||
|
----------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
CLI (python-troveclient)
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Internal API
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Guest Agent
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The DB2 guestagent will be modified to add support for full online backup
|
||||||
|
and restore functionality. In addition, new strategies will also be added
|
||||||
|
to support these new features.
|
||||||
|
|
||||||
|
The following guestagent files will be modified:
|
||||||
|
- trove/guestagent/datastore/experimental/db2/service.py
|
||||||
|
- trove/guestagent/datastore/experimental/db2/system.py
|
||||||
|
|
||||||
|
and the following new strategy files will be modified to add a new class
|
||||||
|
for online backups:
|
||||||
|
|
||||||
|
- trove/guestagent/strategies/backup/experimental/db2_impl.py
|
||||||
|
- trove/guestagent/strategies/restore/experimental/db2_impl.py
|
||||||
|
|
||||||
|
New classes will be added for online backup strategy and the existing
|
||||||
|
class needs to be renamed from DB2Backup -> DB2OfflineBackup
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Dashboard Impact (UX)
|
||||||
|
=====================
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Mariam John (johnma)
|
||||||
|
|
||||||
|
|
||||||
|
Milestones
|
||||||
|
----------
|
||||||
|
|
||||||
|
Newton
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
There will only be one work item for this feature. This includes implementing
|
||||||
|
the strategies for DB2 online backup and restore and make the necessary
|
||||||
|
guestagent changes. This will also include test-cases necessary to test the
|
||||||
|
new functionalities.
|
||||||
|
|
||||||
|
Upgrade Implications
|
||||||
|
====================
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
* Add new test cases to test online backup and restore functionality for DB2:
|
||||||
|
|
||||||
|
- Add new unit tests to test the newly implemented functionality
|
||||||
|
- Add a new DB2 helper class to the existing integration-test framework.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
The datastore documentation should be updated to reflect the enabled features.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. [1] https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.ha.doc/doc/c0051344.html
|
||||||
|
|
||||||
|
.. [2] http://www.ibm.com/developerworks/data/library/techarticle/0301kline/0301kline.html
|
||||||
|
|
||||||
|
.. [3] https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001978.html
|
||||||
|
|
||||||
|
|
||||||
|
Appendix
|
||||||
|
========
|
||||||
|
|
||||||
|
None
|
Loading…
Reference in New Issue
Block a user