Fivetran HVR を Windows Server にインストールし初期設定を行う #Fivetran

2024.04.03

はじめに

Fivetran では、 High Volume Replicator(以下、HVR)として、データをデータソースからターゲットに移動するためのツールを提供しています。
HVR を Windows Server にインストール、初期設定を行い、ソースからターゲットへのレプリケーションを行ってみましたので、その際の手順を記事としました。

HVR の概要

HVR は SaaS 版と異なり、サーバーを用意しインストールして使用します。
組織によっては、外部サービス(SaaS としての Fivetran)に、データを共有できない場面があるかと思います。
このためのソリューションとして、Fivetran は HVR を提供しています。HVR をクライアント側の環境にインストールすることで、このデータ処理を組織管理のネットワーク内で行えます。

HVR は、2024年1月までは Local Data Processing(LDP)と呼ばれていましたが、2月より HVR の名称に変更されています。(厳密には、元々の名称が HVR で戻されています。)
また、HVR の利用には Business Critical 以上のエディションが必要です。

アーキテクチャ

下図は公式ドキュメントより引用した図です。

HVR では、ソースのトランザクション ログをリアルタイムで読み取り、そのデータを圧縮・必要に応じて暗号化し Hub マシン に送信します。
Hub マシンには、Hub System がインストールされており、ここでデータを処理し、ターゲットに統合します。

HVR の主な構成要素は以下になります。

  • HVR Hub System
    • サーバー上に Fivetran HVR をインストールしたもの
    • チャンネルと呼ばれる論理エンティティでレプリケーションを管理し、データ処理を行います
  • Repository DB
  • HVR Agent
    • 通常はソースまたはターゲットと同じマシン上にインストールされます
    • Hub で実行される処理の一部をオフロードします
    • エージェントでは、送信前にデータが圧縮されるため、圧縮データをネットワーク経由で送信する際に、必要な帯域幅やデータパケットを少なくできます
    • HVR はエージェントレス アーキテクチャもサポートしています(この場合、Hub がエージェントの役割を担います)
  • Location
    • Source:HVR が変更をキャプチャする場所
    • Target:HVR が変更を統合する場所

前提条件

ここでは、エージェントレス アーキテクチャとして、以下の構成で検証を行いました。

  • HVR Hub System:6.1.0_44
    • OS: Windows Server 2019
    • インスタンスタイプ:m5.2xlarge
    • ボリューム
      • C:50 GB
      • D:50 GB
  • Repository DB
    • Amazon RDS for MySQL:8.0.35
    • インスタンスクラス:db.m5.large
  • Source
    • Amazon RDS for PostgreSQL:14.10-R2
    • インスタンスクラス:db.t3.micro
  • Target:Snowflake

それぞれシステム要件は以下に記載があります。

構成図は下図の通りです。
リポジトリデータベースとソースとなる PostgreSQL はプライベートサブネットに構築し、Hub マシンのセキュリティグループからの通信を許可しています。

Repository DB

ここでは RDS MySQL を使用しましたが、以下にその他のデータベースの要件について記載があります。

リポジトリとして使用するには、データベースと、Hub System からアクセスするためのユーザーを作成する必要があります。具体的には、これにより、リポジトリとして指定したデータベースに対して、各種情報を格納するリポジトリ テーブルが作成されます。

MySQL においては、リポジトリユーザーは、リポジトリテーブルを作成および削除する権限が必要です。

データベース・ユーザーの作成

ここでは、以下の手順でリポジトリの設定を行いました。
Hub System に RDP で接続後、MySQL クライアントを以下よりインストールします。

リポジトリに接続します。

mysqlsh --sql -u admin -p <パスワード> -h <ホスト名> -P 3306

ログイン後、以下のコマンドでリポジトリ操作用のユーザーと、リポジトリ用のデータベースを作成します。

--データベースを作成
CREATE DATABASE ldp_repository;
--ユーザー作成
CREATE USER 'ldp_user' IDENTIFIED BY '<パスワード>';
--ldp_repository に対する全権限を付与
GRANT ALL PRIVILEGES ON ldp_repository.* TO 'ldp_user';

ソースの準備

本記事では、ソースとして Amazon RDS for PostgreSQL を使用します。
Hub System に RDP で接続、psql をインストールし、接続します。

psql.exe -h "<ホスト名>" -p 5432 -U "postgres"

データベース・ユーザーの作成

以下のコマンドで、Snowflake にロードするソース用のテーブルを作成しました。

--ユーザーの作成
CREATE USER fivetran_repository_user WITH PASSWORD '<パスワード>' CREATEDB;
--ロールを変更
SET ROLE fivetran_repository_user;
--データベースの作成
CREATE DATABASE fivetran_source;
--データベースを切り替え
\c fivetran_source
--テーブルを作成
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE
);
--レコードを追加
INSERT INTO users (name, email) VALUES ('Taro Yamada', 'taro@example.com');

データソースとしての PostgreSQL

データソースとして PostgreSQL を使用する際の手順は以下に記載があります。

HVR では、PostgreSQL からのキャプチャの方法として、以下を使用できます。

  • Logical Replication
    • レプリケーションスロットからの SQL フェッチ
    • デフォルトかつ推奨
  • Direct DBMS Log Reading
    • PostgreSQL のバイナリログとアーカイブから直接キャプチャ
    • HVR バージョン 6.1.5/5 以降、非推奨
    • 将来的に廃止予定

Logical Replication を使用するための設定

ここでは、上記より Logical Replication を使用します。この際の設定手順は以下に記載があります。

  • パラメータグループの変更
    • RDS for PostgreSQL なので、カスタムパラメータグループを変更し rds.logical_replication1 に設定します

  • ソースデータソースユーザーにレプリケーション権限を付与
    • 論理レプリケーションの場合、HVR データベース ユーザーは REPLICATION 権限を持っている必要があります
--レプリケーション権限の付与
GRANT rds_replication TO fivetran_repository_user;
--検証
SELECT pg_create_logical_replication_slot('hvr', 'test_decoding');

Hub のインストールと設定

Windows に Hub システムをインストールするための手順や前提条件は以下に記載があります。

また、後述する手順でリポジトリデータベースやソース・ターゲットの設定も行っていますが、この際の設定内容は対象となるデータベース製品ごとに設定項目が異なる場合があるのでご注意ください。

Perl のインストール

Hub システムを動作させるためには、Perl バージョン 5.6 以降がインストールされている必要があります。
ここでは、以下より 5.36 をインストールしました。

インストールファイルのダウンロード

インストールファイルは、Fivetran ダッシュボードの [ダウンロード] タブから入手できます。

インストール

ダウンロード後、インストールファイルを実行します。

規約に同意し [Next] をクリックします。

製品のインストールディレクトリを指定します。デフォルトでは下図の通りです。

ここでは、以下に変更しました。

--HVR_HOME
D:\Fivetran\hvr_home
--HVR_COMFIG
D:\Fivetran\hvr_config
--HVR_TMP
D:\Fivetran\hvr_tmp

プログラムフォルダを指定します。デフォルトのままとしました。

インストールのタイプとして、ここでは「Local Processing Hub」を指定します。

サーバーが接続を要求するポートを設定します。証明書とキーファイルもここで指定可能です。
ここでは、検証目的のため、指定していません。

hvralertmanager をスケジュール実行するための Windowsスケジューラー タスクを作成します。
hvralertmanager | Fivetran documentation

サービスを実行するユーザーアカウントを指定します。ここでは「Local System account」を指定しました。

環境変数を追加する場合、ここでチェックを入れると自動的に追加されます。

[Next] を押して、インストールを開始します。

HVR Hub の構成

インストール後、Hub の構成を行います。

ブラウザでセットアップページを開き [Proceed with System Setup] をクリックします。

規約を読み、リポジトリデータベースを選択します。ここでは「MySQL」を選択しました。

データベースへの接続情報を指定します。

接続など問題なければ下図の表示となります。

ライセンス認証を行います。

Fivetran HVR を使用するには、有効なライセンスが必要です。ライセンスモデルは以下の2種類があります。

  • Consumption-based:Business Critical の場合
    • Fivetran サーバーに Hub システムを登録します
    • Hub システムから Fivetran サーバーにアクセスできる必要があります
  • Usage-based Subscription:Private Deployment の場合
    • ライセンス ファイル ( .lic ファイル) を Hub システムに手動で追加/登録します

Licensing | Fivetran documentation

ここではライセンスキーを所持していたため [Add License Manually] よりライセンスキーを指定します。問題なければ下図の表示となります。

Hub システム上のユーザーを作成します。
デフォルトでは、ユーザーは SysAdmin権限で作成されます。

Hubシステムの暗号化 wallet を構成します。ここでは Software wallet を選択しました。

  • Disabled wallet
    • HVR 内のユーザーパスワードは、難読化(Obfuscation)され、リポジトリデータベース内に保存されます
  • Software wallet
    • HVR内のユーザーパスワードは、ランダムキーを使用して暗号化され、リポジトリデータベース内に保存されます

初期 Hub を作成します。HVR では、レプリケーションオブジェクトの集まりを Hub と呼びます。はじめに作成する Hub の名称をここで指定します。

新規ユーザーへのデフォルト権限を設定します。ここでは「ReadOnly」の指定としました。その他にも下図のような指定が可能です。

以上で初期セットアップは完了です。

Hub マシンへログイン

セットアップ完了後、Hub マシンへのログイン画面が表示されるので、作成したユーザーでログインします。

チャンネルの作成

HVR では、一緒に処理されるデータのグループとして「チャンネル」を定義します。当然 HVR 内には、複数のデータソースとターゲットを登録できますが、これらは「チャンネル」によって紐づけられます。

ログイン後、下図の [Create New Chennel] よりチャンネルを作成します。

チャンネル名を設定します。

チャンネルタイプのタイプとして、レプリケーショントポロジーを選択します。

HVR では、複数のシステム間でのデータレプリケーションがサポートされています。ここでは、One-to-One(ソースからターゲットへの一方向のデータ レプリケーション)を選択しました。

次に、ロケーション(ソース・ターゲット)の設定を行います。

ソースの設定

ここでは、RDS for PostgreSQL を使用するので PostgreSQL を選択します。

次に、エージェントの有無を指定します。HVR では、エージェントを使用することで、パフォーマンスやセキュリティ上のメリットを得られます。

ただし、HVR はエージェントレスの構成もサポートしているため、ここでは「Connect directly from hub」を指定しました。

ソースへの接続情報を指定します。

PosgreSQL の場合「Advanced Settings」で PostgreSQL クライアントのパスを指定します。

テスト接続が問題なければ、下図の表示となります。

ソースに対するキャプチャの方法を指定します。上述の通り、Logical Replication を使用するので、「SQL Fetch from Replication Slot」を選択しました。

さいごに名前を設定し、ソースの設定は完了です。

ターゲットの設定

次にターゲット側の設定を行います。

ターゲットには Snowflake を指定しました。ユーザーに必要な権限は以下に記載があります。

ここでは、以下の記事と同様の手順でユーザー、ロール、ロード先のデータベース・スキーマを作成しました。

また、Hub マシン上でドライバをインストールしておきます。
ODBC - Snowflake Developers

エージェントについては、ソース同様に無しの構成として「Connect directly from hub」を指定しました。

次に、接続情報を入力します。ドライバをインストールしていると「ODBC DRIVER」からドライバを指定できるようになります。

Snowflake については、データロード時に、外部ステージ上にデータを配置するか指定できます。パフォーマンスを向上させるために、このオプションを使用できます。
ここでは検証目的のため「Integrate Staging Directory」のチェックは外して次に進みました。また、この場合は Snowflake 内部ステージにデータファイルがステージングされるようです。

さいごに名前を設定し、ソースの設定は完了です。

チャンネルの設定:Replication Style

ソースとターゲットの設定後、チャンネルに関する設定を行います。
Replication Style では、ソースからターゲットのデータをレプリケートする際のデータ変更方法を指定します。ここでは、「Soft Delete」による論理削除を指定し、次に進みました。

チャンネルの設定:レプリケートするテーブルの選択

次に、連携するデータベース内のテーブルを指定します。[Select Tables] をクリックします。

ここでは users テーブルのみなので、こちらにチェックを入れます。

テーブルを選択すると「グループ」を選択できます。ここでは下図の通りデフォルトのままの設定としました。

テーブル グループは、HVR チャンネル内のテーブルの論理グループとして機能します。ソースからターゲットの異なるスキーマにテーブルを作成したい場合に、異なるテーブル グループを使用することで、効率的に宛先を制御できます。

チャンネルの設定:レプリケーションの開始

さいごに、チャンネル作成後、すぐにレプリケーションを開始する場合は、下図の通りチェックを入れ [Complete Channel Creation] をクリックします。

レプリケーションの確認

しばらくすると、レプリケーションが開始され、ターゲット側にデータがロードされます。

が、ここではエラーとなってしまいました。Jobs の View Log よりログを確認できます。

図の通り、ロードするテーブルに対する所有者権限が必要とのことなので、ソーステーブルの所有者を変更します。

ALTER TABLE public.users OWNER TO fivetran_repository_user;

確認

> \dt
                 List of relations
 Schema | Name  | Type  |          Owner
--------+-------+-------+--------------------------
 public | users | table | fivetran_repository_user
(1 row)

その後、問題なく動作しました。

Snowflake 側でもロードが確認できました。

変更データのキャプチャ

レコードの追加

ソーステーブルにレコードを追加してみます。

INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');

変更後、すぐに Snowflake 側にも追加されます。

さらに追加してみます。

INSERT INTO users (name, email) VALUES
('Alice Smith', 'alice.smith@example.com'),
('Bob Johnson', 'bob.johnson@example.com');

こちらもすぐ反映されました。

HVR では SaaS 版とは異なり、ソースで変化があると、すぐにキャプチャしターゲットに反映されます。

レコードの変更

レコード変更時の動作を見てみます。

UPDATE users SET email = 'new.email@example.com' WHERE id = 2;

この場合もすぐ変更が反映され、[HVR_CHANGE_TIME] も更新されました。

レコードの削除

さいごにレコードを削除してみます。

DELETE FROM users WHERE id = 2;

Snowflake 側で確認すると [HVR_IS_DELETED] が 1 に変更され、今回指定の論理削除が実行されていることを確認できました。

DDL のサポート

HVR と PosgreSQL については、以下のドキュメントにあるように DDL がサポートされていません。

さいごに

Fivetran の HVR について、インストールから初期設定とデータのレプリケーションまでを実施してみました。特に設定面では SaaS 版と結構違うな、という印象でした。HVR 側の各種設定や構成によってはエージェントも追加できるのでその辺りも今後試して記事にできればと思いました。
本記事が何かの参考になれば幸いです。

参考