Veeam Backup & Replication 12 の構成データベースを SQL Server から PostgreSQL に移行する

はじめに

先日リリースされた Veeam Backup & Replication 12 で、バックアップサーバの構成データベースとしてバンドルされている RDBMS が、従来の Microsoft SQL Server Express から PostgreSQL に変更 されました。新規インストール時は、デフォルトで PostgreSQL が一緒に導入されます。

If you do not prepare a database engine in advance, Veeam Backup & Replication will automatically install PostgreSQL 15.1 locally on the backup server.

Before You Begin – User Guide for VMware vSphere

SQL Server はそもそもバンドルされなくなったため、事前に自分で用意しない限り選択できません。

[For PostgreSQL] You can use an already installed PostgreSQL instance or install a new one.

[For Microsoft SQL Server] You can use an already installed Microsoft SQL Server database only.

Step 8. Specify Database Engine and Instance – User Guide for VMware vSphere

一方で、11 から 12 にアップグレードする場合は、構成データベースは SQL Server のまま変更されません。SQL Server も引き続きサポートされるため、そのままでも何ら問題はありませんが、もし PostgreSQL を使いたい場合 は、アップグレード後に自分で移行 する必要があります。

ちょうど自宅ラボに眠っている 11 の環境があり、NFR ライセンス を使って興味半分でアップグレードしたので、本エントリでは、Veeam Backup & Replication 12 の構成データベースを SQL Server から PostgreSQL に移行する流れを、ごく簡単に紹介します。

作業の流れ

基本的にはドキュメントに従って作業します。構成データベースの移行に関する Veeam の公式ブログも併せて参考にできます。

大きくは以下の流れです。

  1. Veeam Backup & Replication 12 にアップグレードする
  2. PostgreSQL をインストールして構成する
  3. ジョブを無効化する
  4. 設定情報のバックアップを取得する
  5. 設定情報のバックアップを移行モードでリストアする
  6. PostgreSQL をチューニングする
  7. SQL Server を停止(削除)する

つまり、SQL Server から設定情報のバックアップを取得して、PostgreSQL に対してリストアする形です。

作業のポイント

ドキュメントに従えば迷うところもあまりないので、各作業のポイントだけ簡単に紹介します。

1. Veeam Backup & Replication 12 にアップグレードする

ドキュメントを見ながら作業します。

実際に試した範囲では、ウィザードをぽちぽちするだけで順当に終わってしまったので、特にコメントはありません。

2. PostgreSQL をインストールして構成する

Veeam Backup & Replication 12 を新規にインストールするときとは異なり、アップグレード後にデータベースを移行したい場合は、PostgreSQL は自分で用意する必要があります。

PostgreSQL のインストーラの準備

PostgreSQL のインストーラは、Veeam Backup & Replication 12 の ISO ファイル中、Redistr\x64\PostgreSQL\15.1-1 にも配置されていますが、これはバージョンが 15.1 と少し古いものです。

ドキュメントのシステム要件のページ を見ると、自分で 15.x の最新をダウンロードして使うことが推奨されているので、できればその方がよいでしょう。

PostgreSQL 15.1 is included in the Veeam Backup & Replication setup, but we strongly recommend to download and install the latest PostgreSQL 15.x version)

System Requirements – User Guide for VMware vSphere

本エントリ公開時点の最新は 15.3 です。以下のページからダウンロードできます。

以下は 15.3 を前提とした記述です。

PostgreSQL のインストール

すべてデフォルトのまま適当にインストールしても大丈夫そうです。コンポーネントの選択時、pgAdmin と Stack Builder は外しても問題ありません。

PostgreSQL の初期設定

Veeam から PostgreSQL に接続できるよう、認証を構成します。選択肢はだいたい以下の具合になりそうです。

  • 公式のブログ を参考に、Veeam 用のロールをひとつ作る
  • Veeam Backup & Replication 12 の新規インストール時のデフォルトを参考に、SSPI 認証を構成する
  • デフォルトの postgres ロールをそのまま使う

Veeam 用のロールをひとつ作る 場合は、公式のブログ を参考にスーパユーザ権限を持たせて作るとよさそうです(権限が強すぎる気もしますが、必要な最小限の権限がどこにも書いていないようなので不明です)。

PS> & 'C:\Program Files\PostgreSQL\15\bin\psql.exe' -U postgres
ユーザー postgres のパスワード:
psql (15.3)
"help"でヘルプを表示します。

postgres=# CREATE ROLE veeam WITH SUPERUSER LOGIN PASSWORD 'veeam';
CREATE ROLE

SSPI 認証を構成する 場合は、新規インストール時のデフォルトで Windows の veeam ユーザが PostgreSQL の postgres にマップされていたので、これに倣うのも手です(これも権限が強すぎる気もしますが……)。新規インストール直後の pg_ident.confpg_hba.conf は次の状態だったので、これをそのまま適用して PostgreSQL をいちど再起動すれば作業は完了です。

PS> gc 'C:\Program Files\PostgreSQL\15\data\pg_ident.conf'
...
# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
veeam   Administrator@<大文字ホスト名>   postgres
veeam   "SYSTEM@NT AUTHORITY"   postgres

PS> gc 'C:\Program Files\PostgreSQL\15\data\pg_hba.conf'
...
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     sspi map=veeam
# IPv4 local connections:
host    all             all             127.0.0.1/32            sspi map=veeam
# IPv6 local connections:
host    all             all             ::1/128                 sspi map=veeam
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     sspi map=veeam
host    replication     all             127.0.0.1/32            sspi map=veeam
host    replication     all             ::1/128                 sspi map=veeam

postgres ロールをそのまま使う 場合は、特に追加の作業はありません。

なお、PostgreSQL のパラメータを Veeam Backup & Replication 用にするいわゆるチューニングっぽいことは後ほど行うので、この段階では何もしません。

3. ジョブを無効化する

Veeam Backup & Replication のジョブをすべて無効化し、移行作業が終わるまで動かない状態にします。移行は設定情報のバックアップとリストアで行いますが、バックアップの取得後からリストアまでの間にジョブが動いてしまうと、データベース内の情報と実データとの間で不整合が発生するためです。

無効化していないジョブがあっても後続の作業は完遂できますが、後述する通り、後の手順で警告が表示されます。

4. 設定情報のバックアップを取得する

手動で設定情報のバックアップ(Configuration Backup)を取得します。

5. 設定情報のバックアップを移行モードでリストアする

設定情報のリストアのウィザードを起動すると、最初の画面でリストアのモードが選択できます。ここで、移行(Migrate)を選択します。

その後、リストアポイントを選択してさらにウィザードを進めると、構成データベースへの接続情報を入力する画面に遷移します。PostgreSQL 側で SSPI 認証を利用する場合は Windows authentication using credentials of service account、Veeam 用のロールを作った場合か既成の postgres ロールをそのまま使う場合は Native authentication using the following credentials で進めます。

手元の環境では、インスタンス名(instance name)に自ホスト名を含めて入力して Connect を押下したら、文字化けしたエラーが出ました。

解読していませんが、IPv6 っぽい部分があるので、たぶんホスト名が IPv6 のリンクローカルアドレスに解決されてしまい、それが pg_hba.conf 的に許容されなかったものと思われます。インスタンス名(instance name)を localhost:5432127.0.0.1:5432 などにすると先に進めました。

あとはウィザードを進めて待てば、移行処理は終わりです。

なお、前項の手順でジョブの無効化を行っていない(設定情報のバックアップに無効化されていないジョブが含まれている)場合、リストア処理中に次の警告が表示されます。

無視して進めますし、有効化されたジョブが残っていてもデータの不整合が起きないようにいい感じにやってくれそうな雰囲気もありますが、できるだけ事前に無効化しておくほうがよいでしょう。

6. PostgreSQL をチューニングする

この段階では、PostgreSQL のパラメータはデフォルトのままです。これを Veeam Backup & Replication にあわせて調整します。

とはいっても、専用の PowerShell コマンドレットが用意されているので、叩いて待つだけです。

PS> Set-VBRPSQLDatabaseServerLimits
警告: New postgres configuration was set. Restart postgres service manually to apply changes. Make sure there are no running jobs before restart.

実行すると、そのサーバの CPU コア数やメモリ容量に応じて、PostgreSQL のリソース関連の調整が行われるようです。具体的には、 ALTER SYSTEM 文がいくつか実行されています。

自宅の 4 vCPU で 8 GB RAM な小さいバックアップサーバでは、実行後に postgresql.auto.conf を確認すると、次のような調整が行われていました。

PS> gc 'C:\Program Files\PostgreSQL\15\data\postgresql.auto.conf'
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
max_connections = '3000'
effective_cache_size = '5734MB'
checkpoint_completion_target = '0.9'
wal_buffers = '16MB'
default_statistics_target = '100'
random_page_cost = '1.1'
max_worker_processes = '4'
max_parallel_workers_per_gather = '2'
max_parallel_workers = '4'
max_parallel_maintenance_workers = '2'
min_wal_size = '2GB'
max_wal_size = '8GB'
hash_mem_multiplier = '2'
log_temp_files = '10MB'
log_lock_waits = 'on'
join_collapse_limit = '8'
geqo_threshold = '10'
log_line_prefix = '%m [%p] %q[user=%u,db=%d,app=%a] '
jit = 'off'
log_autovacuum_min_duration = '60s'
log_min_duration_statement = '1000'
log_statement_sample_rate = '0.01'
log_rotation_age = '10d'
shared_buffers = '512MB'
maintenance_work_mem = '410MB'
work_mem = '4368kB'

なお、先の Set-VBRPSQLDatabaseServerLimits-DumpToFile パラメータを渡せば、実行される SQL 文をファイルとして生成できます。

PS> Set-VBRPSQLDatabaseServerLimits -DumpToFile C:\dump.sql
警告: SQL Configuration script was dumped to file 'C:\dump.sql'. Run it and restart postgres service manually to apply changes. Make sure there are no running jobs before restart.

PS> gc C:\dump.sql
ALTER SYSTEM SET max_connections = '3000';
ALTER SYSTEM SET effective_cache_size = '5734MB';
ALTER SYSTEM SET checkpoint_completion_target = '0.9';
...

設定が適用できたら、PostgreSQL を再起動します。

PS> Restart-Service -Name postgresql-x64-15

7. SQL Server を停止(削除)する

ここまでの作業で、Veeam は PostgreSQL のみを利用する状態に切り替わっています。

古い SQL Server を停止して、Veeam Backup & Replication の動作確認を行い、問題なければ SQL Server に関連するモノを全部アンインストールして、作業は完了です。

なお、Enterprise Manager を利用している場合は、構成次第で暗号化キーの再設定が必要になるようです。詳細はドキュメントの Step 4 に記載があります。

また、その他の事後作業として、設定情報のバックアップの再設定、ローカルリポジトリの再追加と再マップ、ジョブの有効化なども ドキュメントの Step 5 で挙げられています。必要に応じて作業します。

おわりに

Veeam Backup & Replication 12 の構成データベースを SQL Server から PostgreSQL に移行する流れを簡単に紹介しました。

デフォルトの構成データベースが PostgreSQL になったことで、これまで Microsoft SQL Server Express を使うことで生じていたさまざまな制約から解放されたことはうれしい変更です。大規模な環境でも SQL Server を別のサーバに用意しなくてもよくなったので、構成が複雑になりがちな Veeam も、少しだけシンプルにできそうですね。

@kurokobo

くろいです。ギターアンサンブルやら音響やらがフィールドの IT やさんなアルトギター弾き。たまこう 48 期ぎたさん、SFC '07 おんぞう、新日本ギターアンサンブル、Rubinetto。今は野良気味。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です