dashDB Localでバックアップ&リストア


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コマンドでスナップショットの容量が変わっていること(変更が記録されている)を確認
# 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手順です

DBを止める
# 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
dash再起動
# 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.