GlusterFS ストレージを使用した Compute Engine への IBM Db2 Warehouse のデプロイ

このチュートリアルでは、GlusterFS ファイル システムをストレージ レイヤとして使用して Compute Engine 上に IBM Db2 Warehouse クラスタを作成する方法を示します。GlusterFS はオープンソースのスケーラブルなネットワーク ファイル システムです。

このチュートリアルは、Google Cloud に IBM Db2 Warehouse クラスタをデプロイする、システム管理者、開発者、エンジニア、データベース管理者向けです。

IBM DB2 Warehouse と Google Cloud 上でのデプロイメント オプションの概要については、シリーズの概要をご覧ください。

このチュートリアルでは、次のソフトウェアを使用します。

  • Ubuntu-server 16.04
  • Docker Community Edition
  • IBM Db2 Warehouse Enterprise Edition(試用版)
  • IBM Db2 Warehouse クライアント
  • GlusterFS ファイル システム

目標

  • Docker Store にある IBM Db2 Warehouse Docker イメージにアクセスする。
  • このアーキテクチャで必要な権限のみを持つカスタム サービス アカウントをプロビジョニングする。
  • クラスタ VM を起動する。
  • GlusterFS ファイル システムを構成する。
  • Docker Store 認証を初期化する。
  • IBM Db2 Warehouse コンテナをクラスタにデプロイする。
  • IBM Db2 Warehouse を実行する。
  • IBM Db2 Warehouse でサンプルデータをアップロードする。
  • IBM Db2 管理コンソールに接続してデプロイをテストします。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを作成できます。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Compute Engine API を有効にします。

    API を有効にする

  5. Docker ID をお持ちでない場合は、Docker Store で作成してください。

このチュートリアルでは、IBM Db2 Warehouse Enterprise Edition を使用します。このソフトウェアのライセンスをまだお持ちでない場合は、無料の試用版をこのチュートリアルで使用できます。

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。

アーキテクチャ

このチュートリアルでは、3 つの異なるゾーンに 3 つの Compute Engine インスタンスをデプロイします。

  • db2wh-1 という名前のインスタンスが、最初にヘッドノードとして指定されています。
  • db2wh-2 および db2wh-3 という名前のインスタンスが、最初にデータノードとして指定されています。

ヘッドノードがフェイルオーバーすると、個々のインスタンスのロール(ヘッドノードまたはデータノード)が変わる可能性があります。

また、GlusterFS 共有ファイル システムを 3 つのノード上にデプロイします。GlusterFS は、IBM Db2 Warehouse クラスタの共有ファイル システムとして使用されます。

次の図にアーキテクチャを示します。

アーキテクチャ

IBM Db2 Warehouse Edition の Docker イメージにアクセスする

このチュートリアルでは、Docker Store アカウントを使用して Docker Store から IBM Db2 Warehouse Edition の無料評価版をダウンロードします。これには、サーバーとクライアントの 2 つの別個のイメージをダウンロードすることが含まれます。

  1. ブラウザで、IBM Db2 Warehouse EE Docker イメージに移動します。
  2. Docker のユーザー名とパスワードを使ってログインします。
  3. [Proceed to checkout] をクリックします。
  4. 詳細を記入します。
  5. 利用規約に同意する場合は、右側の [I agree ...] と [I acknowledge ...] のチェックボックスをオンにします。
  6. [Get Content] をクリックします。

    自動的に [Setup] ページに移動します。このページの手順はチュートリアルの後半で行うので、現時点で行う必要はありません。

  7. IBM Db2 Warehouse クライアント イメージについても同じプロセスを繰り返します。

環境の準備

このチュートリアルのほとんどの手順は、Cloud Shell で実行します。また、Cloud Shell を開くと、このチュートリアルに関連する GitHub リポジトリのクローンを自動的に作成することもできます。

  • Cloud Shell を開き、このチュートリアル用に GitHub リポジトリのクローンを作成します。

    Cloud Shell を開く

Compute Engine インスタンスの管理のためのサービス アカウントのプロビジョニング

このチュートリアルでは、Compute Engine インスタンスを管理するためのサービス アカウントを作成します。ベスト プラクティスとして、サービス アカウントの権限をアプリケーションの実行に必要な役割とアクセス許可だけに制限することをおすすめします。

このチュートリアルでサービス アカウントに必要なロールは、Compute Viewer ロール(roles/compute.viewer)のみです。この役割は、Compute Engine リソースへの読み取り専用アクセス権を提供します。

  1. Cloud Shell で、db2wh-sa という名前のサービス アカウントを作成します。

    gcloud iam service-accounts create db2wh-sa --display-name=db2wh-sa
    
  2. 完全なサービス アカウント メールアドレスを格納する環境変数を作成します。

    export GCE_SERVICE_ACCOUNT_EMAIL="db2wh-sa@$(gcloud config get-value project 2> /dev/null).iam.gserviceaccount.com"
    
  3. compute.viewer をサービス アカウントにバインドします。

    gcloud projects add-iam-policy-binding $(gcloud config get-value project 2> /dev/null) \
        --member serviceAccount:$GCE_SERVICE_ACCOUNT_EMAIL \
        --role roles/compute.viewer
    

ファイアウォール ルールの作成

ファイアウォール ルールを作成して、内部クラスタ通信と、管理コンソールからクラスタへのアクセスを許可します。さらに、内部 GlusterFS 通信を許可するようにルールを構成します。

関連ページ

  1. Cloud Shell で、ノード間通信に必要なファイアウォール ルールを作成します。

    gcloud compute firewall-rules create db2wh-internal \
        --description="db2wh" \
        --action=ALLOW \
        --rules=tcp:50000-50001,tcp:60000-60060,tcp:25000-25999,tcp:50022,tcp:9929,tcp:9300,tcp:8998,tcp:5000,tcp:2379-2380,tcp:389 \
        --source-tags=db2wh \
        --target-tags=db2wh
    
  2. 管理コンソール用のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create db2wh-admin \
        --description="db2wh admin console" \
        --action=ALLOW \
        --rules=tcp:8443 \
        --source-ranges=0.0.0.0/0
    
  3. GlusterFS 用のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create db2wh-glusterfs \
        --description="db2wh glusterfs" \
        --action=ALLOW \
        --rules=tcp:22,tcp:111,tcp:139,tcp:24007,tcp:24009-24108,tcp:49152-49251 \
        --source-tags=db2wh \
        --target-tags=db2wh
    

Compute Engine 環境の初期化

このセクションでは、GlusterFS ボリューム用の永続ディスクを作成し、Compute Engine インスタンスを起動して、権限を付与します。その後、環境の初期化を完了します。

GlusterFS の永続ディスクを作成する

このチュートリアルでは、GlusterFS ファイル システムをホストするための追加の永続ディスクを作成します。

  1. Cloud Shell で、db2wh-1-glusterfs という名前のディスクを作成します。

    gcloud compute disks create db2wh-1-glusterfs \
        --size=1024 \
        --zone=us-central1-c
    
  2. db2wh-2-glusterfs という名前の 2 番目のディスクを作成します。

    gcloud compute disks create db2wh-2-glusterfs \
        --size=1024 \
        --zone=us-central1-b
    
  3. db2wh-3-glusterfs という名前の 3 番目のディスクを作成します。

    gcloud compute disks create db2wh-3-glusterfs \
        --size=1024 \
        --zone=us-central1-f
    

Compute Engine インスタンスを起動する

GitHub リポジトリの起動スクリプトを使用して、クラスタノード用の 3 つの Compute Engine インスタンスを作成します(高可用性をサポートするために、これらのインスタンスを異なるゾーンに配置します)。これには、内部 IP アドレスを各インスタンスにマッピングすることが含まれます。

  1. Cloud Shell で、db2wh-1 という名前のインスタンスを作成します。

    gcloud compute instances create db2wh-1 \
        --image-family=ubuntu-1604-lts \
        --image-project=ubuntu-os-cloud \
        --tags=db2wh --boot-disk-size=50GB \
        --machine-type=n1-standard-16 \
        --zone=us-central1-c \
        --private-network-ip=10.128.0.100 \
        --metadata=storagetype=gluster \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL \
        --disk=device-name=sdb,name=db2wh-1-glusterfs
    
  2. インスタンス db2wh-2 を作成します。

    gcloud compute instances create db2wh-2 \
        --image-family=ubuntu-1604-lts \
        --image-project=ubuntu-os-cloud \
        --tags=db2wh --boot-disk-size=50GB \
        --machine-type=n1-standard-16 \
        --zone=us-central1-b \
        --private-network-ip=10.128.0.101 \
        --metadata=storagetype=gluster \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL \
        --disk=device-name=sdb,name=db2wh-2-glusterfs
    
  3. インスタンス db2wh-3 を作成します。

    gcloud compute instances create db2wh-3 \
        --image-family=ubuntu-1604-lts \
        --image-project=ubuntu-os-cloud \
        --tags=db2wh --boot-disk-size=50GB \
        --machine-type=n1-standard-16 \
        --zone=us-central1-f \
        --private-network-ip=10.128.0.102 \
        --metadata=storagetype=gluster \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL \
        --disk=device-name=sdb,name=db2wh-3-glusterfs
    

Compute Engine インスタンスから Docker Store にログインする

ここでは、Docker Store との通信を可能にするために、クラスタの 3 つの各メンバーに認証情報を提供します。

  1. Cloud Shell で、db2wh-1 の Docker Store にログインします。

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker login" \
        -- -t
    
  2. db2wh-2 の Docker Store にログインします。

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command="sudo docker login" \
        -- -t
    
  3. db2wh-3 の Docker Store にログインします。

    gcloud compute ssh db2wh-3 \
        --zone=us-central1-f \
        --command="sudo docker login" \
        -- -t
    

ノードファイルを作成する

ここでは、IBM Db2 Warehouse がクラスタ内のノードを検出するために使用する nodes ファイルを作成します。各行で、ノードの初期タイプ、その DNS 名と IP アドレスを指定します。

  • Cloud Shell で、SSH から dbw2h-1 インスタンスに接続してノードファイルを作成します。

    gcloud compute ssh db2wh-1 --zone=us-central1-c \
        --command='sudo bash -c "cat <<EOF >  /mnt/clusterfs/nodes
    head_node=db2wh-1:10.128.0.100
    data_node=db2wh-2:10.128.0.101
    data_node=db2wh-3:10.128.0.102
    EOF"'
    

IBM Db2 Warehouse コンテナの起動

ここでは、3 つのインスタンスで IBM Db2 Warehouse コンテナを起動します。

  1. Cloud Shell で、db2wh-1 の Docker コンテナを起動します。

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 store/ibmcorp/db2wh_ee:v2.12.0-db2wh-linux'
    
  2. db2wh-2 の Docker コンテナを起動します。

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 store/ibmcorp/db2wh_ee:v2.12.0-db2wh-linux'
    
  3. db2wh-3 の Docker コンテナを起動します。

    gcloud compute ssh db2wh-3 \
        --zone=us-central1-f \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 store/ibmcorp/db2wh_ee:v2.12.0-db2wh-linux'
    
  4. 起動が完了したことを確認します。

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh status --check-startup' \
        -- -t
    

    これには 40〜60 分かかることがあります。その間にエラーがいくつか検出されることもありますが、このチュートリアルでは無視してかまいません。

    構成が完了すると、ステータス running successfully が出力に表示されます。

    HA Management up and running successfully!
    Successfully started IBM Db2 Warehouse service stack!
    
  5. SSH を使用して db2wh-1 に接続し、管理者パスワードを再設定してください。

    DB2_ADMIN_PASSWORD=$(openssl rand -hex 8)
    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker exec db2wh setpass ${DB2_ADMIN_PASSWORD}" \
        -- -t
    

デプロイをテストする

サーバー コンテナの構成が完了したので、次にこれをテストできます。

IBM Db2 Warehouse クライアント コンテナをデプロイする

IBM Db2 Warehouse にデータをアップロードするために、クライアント コンテナにデプロイできます。

  1. Cloud Shell で、クライアント コンテナを実行する Compute Engine インスタンスにサンプルデータをコピーします。

    gcloud compute scp solutions-db2wh/sample-data/nyc-wifi-locs.csv db2wh-1:/tmp \
        --zone=us-central1-c
    
  2. その Compute Engine インスタンスにサンプル テーブル スキーマをコピーします。

    gcloud compute scp solutions-db2wh/sample-data/sample-table.sql db2wh-1:/tmp \
        --zone=us-central1-c
    
  3. db2wh-1 の Docker コンテナを起動します。

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh-client -v /tmp/nyc-wifi-locs.csv:/nyc-wifi-locs.csv -v /tmp/sample-table.sql:/sample-table.sql store/ibmcorp/db2wh_ce:v3.0.1-db2wh_client-linux'
    

サンプルデータをアップロードする

デプロイのテストの一環として、サンプルデータを IBM Db2 Warehouse サーバーにアップロードします。

  1. Cloud Shell で、以前に作成したパスワードを表示します。

    echo $DB2_ADMIN_PASSWORD
    
  2. IBM Db2 Warehouse クライアント コンテナでシェル ウィンドウを開きます。

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh-client cli' \
        -- -t
    
  3. パスワードを格納する環境変数を作成します。[PASSWORD] は、前の手順で設定したパスワードです。

    DB_PASSWORD=[PASSWORD]
    
  4. データベース エイリアスを格納する環境変数を作成します。

    DB_ALIAS=BLUDB
    

    BLUDB は、IBM Db2 Warehouse のデフォルトのデータベース名です。

  5. データベース ホスト名を格納する環境変数を作成します。

    DB_HOST=db2wh-1
    
  6. データベース カタログを設定します。

    db_catalog --add $DB_HOST --alias $DB_ALIAS
    
  7. IBM Db2 Warehouse サーバーにサンプルデータを保持するためのテーブルを作成します。

    dbsql -f /sample-table.sql -d $DB_ALIAS -h $DB_HOST -u bluadmin -W $DB_PASSWORD
    
  8. データを IBM Db2 Warehouse サーバーにアップロードします。

    dbload -verbose -host $DB_HOST -u bluadmin -pw $DB_PASSWORD -db $DB_ALIAS -schema BLUADMIN -t NYC_FREE_PUBLIC_WIFI -df /nyc-wifi-locs.csv -delim ',' -quotedValue DOUBLE -timeStyle 12HOUR -skipRows 1
    
  9. IBM Db2 Warehouse クライアント シェルを閉じます。

    exit
    

管理コンソールを使用してデータを検証する

これで IBM Db2 Warehouse 管理コンソールに接続し、アップロードしたデータを確認できるようになりました。

  1. Cloud Shell で、サービスの外部 IP アドレスを見つけます。

    gcloud compute instances describe db2wh-1 \
        --zone=us-central1-c \
        --format='value(networkInterfaces[0].accessConfigs[0].natIP)'
    
  2. ブラウザを開き、次の URL にアクセスします。[EXTERNAL_IP] は、前の手順で取得した IP アドレスにします。

    https://[EXTERNAL_IP]:8443
    

    セキュリティ警告は無視できます。

  3. 次の認証情報でログインします。

    • ユーザー名: bluadmin
    • パスワード: (前の手順で作成したパスワード)
  4. IBM Db2 Warehouse EULA に同意する場合は、[Accept] をクリックします。

  5. 左側のメニューを開き、[Administer] > [Tables] を選択します。

    Tables フォルダを表示する IBM Db2 Warehouse 管理 UI

  6. [Quick Tour] ポップアップを閉じます。

  7. NYC_FREE_PUBLIC_WIFI をクリックします。

    利用可能な Wi-Fi ホットスポットのリスト

  8. [Data Distribution] タブをクリックして、テーブルにデータが入力されていることを確認します。

    Tables リスト内の Data Distribution タブ

    合計で 2,871 行あることがわかります。これはデータセット全体です。

  9. [Generate SQL] クリックします。

  10. [SELECT statement] を選択します。

  11. [OK] をクリックします。

    [Generate SQL] タブが開き、自動生成された SELECT ステートメントが事前に入力されます。

  12. 自動生成された SELECT ステートメントに LIMIT 句を追加して、結果を最初の 5 つのレコードに制限します。

    SELECT "THE_GEOM", "OBJECTID", "BORO", "TYPE", "PROVIDER", "NAME", "LOCATION",
           "LAT", "LON", "X", "Y", "LOCATION_T", "REMARKS", "CITY", "SSID",
           "SOURCEID", "ACTIVATED", "BOROCODE", "BORONAME", "NTACODE", "NTANAME",
           "COUNDIST", "POSTCODE", "BOROCD", "CT2010", "BOROCT2010", "BIN", "BBL", "DOITT_ID"
      FROM "BLUADMIN"."NYC_FREE_PUBLIC_WIFI"
      LIMIT 5;
    
  13. [Run] をクリックしてから、[Run All] を実行します。

    レコードのリストが [Result Set] タブに表示され、サンプルデータが正常にアップロードされたことが示されます。

    アップロードされたデータから 5 件のレコードを表示する SQL ステートメントの実行結果

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ