dashDB Localを触ってみましたの記事第3弾。バックアップ、リストアを試してみた。
バックアップの取り方だけを確認したい方は、右の目次?項目のところでリンクジャンプしてください。この記事、前おきが少し長いです
参考ページ
dashDB Localのバックアップ、リストアの考え方
DBデータのバックアップを取る、というよりかは、dashDB Localが使用するストレージ部分のレベルでコピーしておいて、それをいざとなったらリストアするイメージ。slideshareにそれっぽいのがあったので、拝借...(リンクはこちら)
マニュアルを見る限りはGPFSを使った例などが紹介されてますが、そんなものは手元にないのでdashDB Localの領域をLVMで構築して、バックアップリストアをやってみました。
・バックアップを取る:LVMのスナップショット
・データに変更が加わる:スナップショットに変更履歴が残っていく
・リストアする:スナップショットを適用して元に戻す
試してみる
前回までの復習
まず、docker部分の設定でそもそもdevicemapperが推奨なようです。前回紹介した手順にもうひと工夫が必要です。気持ち悪いので環境をゼロから作り直してみました。参考手順はこちら
ファイルシステムの作成
# yum install lvm2
# fdisk /dev/xvdc
xvdc1とxvdc2を作っておく。その後rebootして変更内容を反映させます(詳細の作り方はこちらにメモ済みです
device mapperの設定
設定ファイルを編集します
#vi /etc/lvm/profile/docker-thinpool.profile
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/docker-thinpool",
"dm.use_deferred_removal=true"
]
}
Device mapperの設定ようにLVMを作成します。マニュアル通りでOK。
# pvcreate /dev/xvdc1
Physical volume "/dev/xvdc1" successfully created.
# vgcreate docker /dev/xvdc1
Volume group "docker" successfully created
# lvcreate --wipesignatures y -n thinpool docker -l 95%VG
Logical volume "thinpool" created.
# lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG
Logical volume "thinpoolmeta" created.
# lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta
WARNING: Converting logical volume docker/thinpool and docker/thinpoolmeta to thin pool's data and metadata volumes with metadata wiping.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Converted docker/thinpool to thin pool.
新しい lvm プロフィールを適用します。
# lvchange --metadataprofile docker-thinpool docker/thinpool
Logical volume docker/thinpool changed.
# lvs -o+seg_monitor
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Monitor
thinpool docker twi-a-t--- 95.00g 0.00 0.01 monitored
以上で、Docker側の設定完了です。後はこの設定内容を再度読み込ませればOK。
# systemctl stop docker
# rm -rf /var/lib/docker/*
# systemctl daemon-reload
# systemctl start docker
きちんとdevice mapperの設定が反映されているかを確認します。一番最後の行「Storage Driver: device mapper」となっていればOKです。
# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: devicemapper
やっとdashLocal側の話へ
dashDB Local用のストレージ領域の設定
dashDB用の領域作成をします。さっき作った/dev/xvdc2をdashLocal用にLVM作成、マウントします。
---LVM作成
# pvcreate /dev/xvdc2
Physical volume "/dev/xvdc2" successfully created.
# vgcreate vgdata0 /dev/xvdc2
Volume group "vgdata0" successfully created
# lvcreate -L 60G -n lvdata0 vgdata0 /dev/xvdc2
Logical volume "lvdata0" created.
--ファイルシステム、マウント
# mkfs.ext3 /dev/mapper/vgdata0-lvdata0
(省略)
# mkdir /mnt/clusterfs
# mount /dev/mapper/vgdata0-lvdata0 /mnt/clusterfs/
dashインストール!
# docker run -d -it --privileged=true --net=host --name=dashDB -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 ibmdashdb/local:latest-linux
前回の記事で色々書いたので細かいログはここでは割愛します。
やっとバックアップを取る
順番的には
・バックアップ取るときように、ディスクへの書き込みを止める(サスペンド)
・バックアップ(スナップショット)を取る
・ディスクへの書き込みを再開する(レジューム)
の3段階です。
# docker exec -it dashDB write-suspend
*************************************************
Suspending write on bludb...this may take a while
Successfully suspended write on bludb
*************************************************
sh-4.2# lvcreate -L 5G -s -n lvdatasnap1 /dev/vgdata0/lvdata0
Using default stripesize 64.00 KiB.
Logical volume "lvdatasnap1" created.
sh-4.2# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
thinpool docker twi-aot--- 95.00g 8.34 0.39
lvdata0 vgdata0 owi-aos--- 60.00g
lvdatasnap1 vgdata0 swi-a-s--- 5.00g lvdata0 0.00
sh-4.2# docker exec -it dashDB write-resume
*************************************************
Resuming write on bludb...this may take a while
Successfully resumed write on bludb
*************************************************
DBにデータを入れる
データが何も入っていない状態でバックアップを取ったので、何かテーブルを作ったりしてデータをとにかく入れます。で、この後リストアをして「からっぽに戻ってる!」というのを確認するシナリオです。
データを入れる方法はこちら
ちゃんとLVMのスナップショットも変わっています。
Data%の所が、何か変更が加わるとどんどん増えていきます。ここに、変更前のメタデータが入ってい、いざリストアした時は変更前データが適用されて、元に戻る感じのようです。
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
thinpool docker twi-aot--- 95.00g 8.35 0.39
lvdata0 vgdata0 owi-aos--- 60.00g
lvdatasnap1 vgdata0 swi-a-s--- 5.00g lvdata0 2.45
リストア
・DB止める
・ファイルシステムをunmountして、スナップショットを適用しデータを戻す
・戻ったファイルシステムを再びmount
・DBを起動して、中身を確認し、データがからっぽの状態になっていることを確認
の3手順です
# docker exec -it dashDB stop
-- Stopping dashDB Local services --
-- Stopping core services --
dsserver_home: /opt/ibm/dsserver
port: 9300
https.port: 8443
status.port: 9302
dsserver_home: /opt/ibm/dsserver
port: 9300
https.port: 8443
status.port: 9302
SERVER:STOPPED
[05:41:23] INFO: CONNECT TO BLUDB
[05:41:23] INFO: LIST APPLICATIONS for database BLUDB
[05:41:23] INFO: QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS
[05:41:23] INFO: CONNECT RESET
[05:41:23] INFO: Completed issuing quiesce for all databases - waiting for apps to be forced off
[05:42:24] INFO: List applications for database BLUDB
[05:42:24] INFO: Checking database consistency for BLUDB:
[05:42:24] INFO: Deactivate db BLUDB
[05:42:25] INFO: Checking database consistency after deactivating db
All committed transactions have been written to disk = YES
[05:42:25] INFO: Stopping dashDB ...
-- Successfully stopped dashDB --
# docker stop dashDB
dashDB
# umount /mnt/clusterfs
sh-4.2# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
thinpool docker twi-a-t--- 95.00g 8.35 0.39
lvdata0 vgdata0 owi-aos--- 60.00g
lvdatasnap1 vgdata0 swi-a-s--- 5.00g lvdata0 3.34
sh-4.2# lvconvert --merge /dev/vgdata0/lvdatasnap1
Merging of volume vgdata0/lvdatasnap1 started.
lvdata0: Merged: 96.67%
lvdata0: Merged: 100.00%
# mount /dev/vgdata0/lvdata0 /mnt/clusterfs
# docker start dashDB
dashDB
# docker exec -it dashDB start
中身を確認してみる。きちんと消えてる!
# docker exec -it dashDB dbsql -db bludb -u bluadmin -pw netezza
Welcome to dbsql, the IBM dashDB SQL interactive terminal.
Type: \? for help with internal slash commands
\g or terminate with semicolon to execute query
\q to quit
BLUDB.BLUADMIN(BLUADMIN)=> \dt
No relations found.