OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

Verticaデータベースのコピー

公開日:
更新日:
その他
FAQ
#データ型

はじめに

Verticaデータベースのコピーの作り方を紹介します。
ここでは、バックアップユーティリティ(vbr.py)のCOPY CLUSTER機能を使ってデータベースのコピーを行います。
そのために、2セットのVerticaシステムを用意します。
片方を通常の業務で使うサーバ(コピー元)、もう片方をコピーのターゲットサーバ(コピー先)とします。

矢印

このCOPY CLUSTER機能のメリットとして、本番機と同じデータを別の筐体にコピーする事で、本番機に余計な負荷をかけずにテストをしたいケースなどに活用できます。
また、COPY CLUSTER機能のための特別なライセンスは必要ないため、リーズナブルにデータベースのコピーを作成する事ができます。

前提条件

このCOPY CLUSTER機能を実装するにあたって、以下の前提条件があります。

・ディレクトリ(Verticaカタログ、データ、temp)をコピー元とコピー先とで同一にする。
・クラスタを構成するノード数は、コピー元とコピー先とで同じノード数にする。
・データベース名は、コピー元とコピー先とで同じデータベース名にする。
・コピー先のデータベースは空の状態にする。
・ノード名(v_mart_node0001など)は、コピー元とコピー先とで同じノード名にする。
・コピー元とコピー先はネットワーク疎通ができる。
・データベースアドミニストレーター(dbadmin)は全てのノードで同じアカウントにする。
・データベースアドミニストレーター(dbadmin)は全てのノード間で、パスワードレスでSSH接続ができる。
・コピーできるのはフルバックアップのバックアップのみ。
(オブジェクトレベルのバックアップは使用できません)
・コピー元とコピー先のバージョンは、HotFixバージョンレベルで同一にする。
(例:コピー元が「12.0.1-0」を利用している場合は、コピー先も「12.0.1-0」である事が必要です。)

手順

COPY CLUSTER機能でデータベースのコピーを実施します。
ここでは、1台構成のコピー元サーバ(node1)、1台構成のコピー先サーバ(node2)を作成する事にします。

1. 2セットのVerticaシステムの準備

Verticaソフトウェアをnode1とnode2の両方にインストールしておきます。

2. データベースの作成

Admintoolsを使って、node1とnode2の両方でデータベースを作成します。
この時、データベース名、データファイルとカタログのパスなどは同一にします。
以下の例では、データベース名に「ssbm」、カタログ用パスに「/home/dbadmin/」、データ用パスに「/home/dbadmin/」、データベースのパスワードに「ssbm」を指定しています。

[node1での操作]

$ admintools -t create_db -d ssbm -c /home/dbadmin/ -D /home/dbadmin/ -p ssbm

[node2での操作]

$ admintools -t create_db -d ssbm -c /home/dbadmin/ -D /home/dbadmin/ -p ssbm

3. SSHのパスワードレス設定

dbadminユーザ(OSユーザ)ですべてのノードにパスワードレスでSSH接続できるようにします。
まずは、以下の手順でSSHの認証用キーを作成します。

$ /usr/bin/ssh-keygen -t rsa
$ /usr/bin/ssh-keygen -t dsa

次に、公開キーをauthorized_keysファイルにコピーします。

$ cd /home/dbadmin/.ssh/
$ cat id_rsa.pub >> authorized_keys
$ cat id_dsa.pub >> authorized_keys

次に、authorized_keysファイルを全ノードに配布します。
最終的に、全ノードの公開キーを含んだauthorized_keysファイルをすべてのノードが持った状態にします。

[node1での操作]

$ cd /home/dbadmin/.ssh/
$ scp authorized_keys node2:/home/dbadmin/.ssh/

[node2での操作]

$ cd /home/dbadmin/.ssh/
$ cat id_rsa.pub >> authorized_keys
$ cat id_dsa.pub >> authorized_keys
$ scp authorized_keys node1:/home/dbadmin/.ssh/

パスワードレスでSSH接続ができる事を確認します。

[node1での操作]

$ ssh node2 hostname
node2

[node2での操作]

$ ssh node1 hostname
node1

4. バックアップ構成ファイルの作成

コピー元であるnode1でバックアップ構成ファイルを作成します。
ここでは、/home/dbadmin/backup_confディレクトリに置くことにします。
バックアップ構成ファイルのファイル名は、copy_database.iniとします。

[node1での操作]

$ vi /home/dbadmin/backup_conf/copy_database.ini

COPY CLUSTER機能のための、構成ファイルの記述の一例を以下に記載します。
「※」のついている部分を、環境に合わせて修正してください。

[Misc]
snapshotName = Copyssbm  ※任意のスナップショット名
restorePointLimit = 5
tempDir = /tmp/vbr
retryCount = 5
retryDelay = 1

[Database]
dbName = ssbm  ※DB名
dbUser = dbadmin  ※DBユーザ名
dbPassword = ssbm  ※DBユーザのパスワード
dbPromptForPassword = False

[Transmission]
encrypt = False
checksum = False
port_rsync = 50000

[Mapping]
; backupDir is not used for cluster copy
v_ssbm_node0001(※移行元のノード名)=XXX.XX.XX.XX(※移行先のサーバのIP)

 

5. バックアップ構成ファイルの配布

node1と同じパス(/home/dbadmin/backup_conf/)に配布します。
パックアップ用のパスワードファイルを作成している場合は、それも配布します。

[node1での操作]

$ scp /home/dbadmin/backup_conf/copy_database.ini node2:/home/dbadmin/backup_conf/
$ scp /home/dbadmin/backup_conf/copy_database.ini_pass node2:/home/dbadmin/backup_conf/

6. コピー先のデータベースの停止

COPY CLUSTERを実行するには、コピー先のデータベースを停止する必要があります。

[node2での操作]

$ admintools -t stop_db -d ssbm -p ssbm

7. データベースにデータロード

ここまでの手順でCOPY CLUSTERの準備は整いました。
しかし、この時点のデータベースは空っぽの状態ですので動作確認のためにテーブルを作成しデータをロードします。
ここでは、LINEORDERテーブルを作成し、データをロードすることにします。
[node1での操作]

dbadmin=>
CREATE TABLE lineorder (LO_ORDERKEY NUMERIC,
             LO_LINENUMBER INTEGER,
             LO_CUSTKEY  NUMERIC,
             LO_PARTKEY  INTEGER,
             LO_SUPPKEY  NUMERIC,
             LO_ORDERDATE INTEGER,
             LO_ORDERPRIORITY CHAR(15),
             LO_SHIPPRIORITY CHAR(1),
             LO_QUANTITY NUMERIC,
             LO_EXTENDEDPRICE NUMERIC,
             LO_ORDERTOTALPRICE NUMERIC,
             LO_DISCOUNT NUMERIC,
             LO_REVENUE NUMERIC,
             LO_SUPPLYCOST NUMERIC,
             LO_TAX NUMERIC,
             LO_COMMIT_DATE DATE,
             LO_SHIPMODE CHAR(10)) ;

dbadmin=> COPY lineorder FROM '/tmp/lineorder.csv' DELIMITER '|' DIRECT;
dbadmin=> SELECT COUNT(*) FROM lineorder;

 count
-------
 50000
(1 row)

8. データベースのコピー

データベースのコピーを開始します。

$ vbr.py --task copycluster --config-file /home/dbadmin/backup_conf/copy_database.ini
Starting copy of database ssbm.
Participating nodes: v_ssbm_node0001.
Snapshotting database.
Snapshot complete.
Determining what data to copy.
[==================================================] 100%
Approximate bytes to copy: 457191424 of 458696403 total.
Syncing data to destination cluster.
[==================================================] 100%
Reinitializing destination catalog.
Copycluster complete!

9. コピー結果の確認

コピー元に作成したテーブルとそのデータが、コピー先に正常にコピーされているかを確認します。
ここでは、テーブルデータのレコード数を確認する事にします。

[node1での操作]

dbadmin=> SELECT COUNT(*) FROM ssbm.lineorder;

 COUNT
-------
 50000
(1 row)

[node2での操作]
node2のデータベースは停止した状態ですので、データベースを起動します。

$ admintools -t start_db -d ssbm -p ssbm
dbadmin=> SELECT COUNT(*) FROM ssbm.lineorder;

 COUNT
-------
 50000
(1 row)

node1とnode2のレコード数が同じである事が確認できました。
これより、正常にコピーできている事が確認できました。

まとめ

このようにVerticaでは簡単にデータベースのコピーを作成することができます。
しかし、コピーするデータベースのサイズが大きければ大きいほど、コピー処理の所要時間も大きくなります。そのような場合には、コピー元とコピー先間のネットワーク帯域を大きくするなどの対策が必要です。

参考情報

Verticaのバックアップ方法
https://www.ashisuto.co.jp/cm/analytics-database/vertica_backup.html
Copying the Database to Another Cluster
https://www.vertica.com/docs/12.0.x/HTML/Content/Authoring/AdministratorsGuide/BackupRestore/CopyingTheDatabaseToAnotherCluster.htm

検証バージョンについて

この記事の内容はVertica 12.0で確認しています。

更新履歴

2022/09/26 COPY CLUSTER機能実装への前提条件を追加、検証バージョンを12.0に変更
2019/02/06 検証バージョンを9.2に変更
2015/04/23 本記事を公開