在 Compute Engine 上使用 GlusterFS 存储部署 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 映像。
  • 预配一个自定义服务帐号,使其仅具有此架构所需的权限。
  • 启动您的集群虚拟机。
  • 配置 GlusterFS 文件系统。
  • 初始化 Docker Store 身份验证。
  • 将 IBM Db2 Warehouse 容器部署到集群。
  • 运行 IBM Db2 Warehouse。
  • 在 IBM Db2 Warehouse 中上传样本数据。
  • 连接到 IBM Db2 管理控制台并测试部署。

费用

本教程使用 Google Cloud 的以下收费组件:

请使用价格计算器根据您的预计使用情况来估算费用。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Compute Engine API。

    启用 API

  5. 如果您没有 Docker ID,请在 Docker Store 中创建一个。

在本教程中,您将使用 IBM Db2 Warehouse Enterprise Edition。如果您还没有此软件的许可,则可以在本教程中使用免费试用版。

完成本教程后,您可以删除所创建的资源以避免继续计费。如需了解详情,请参阅清理

架构

在本教程中,您将在三个不同的地区部署三个 Compute Engine 实例:

  • 实例 db2wh-1,初始指定为头节点。
  • 实例 db2wh-2db2wh-3,初始指定为数据节点。

如果头节点发生故障转移,可更改各实例的角色(头节点或数据节点)。

您还将在三个节点上部署 GlusterFS 共享文件系统。GlusterFS 用作 IBM Db2 Warehouse 集群的共享文件系统。

架构如下图所示:

架构

获取 IBM Db2 Warehouse Edition Docker 映像

在本教程中,您将使用 Docker Store 帐号从 Docker Store 下载 IBM Db2 Warehouse Edition 的免费试用版。这涉及下载两个不同的映像 - 服务器和客户端。

  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 Client 映像重复此过程。

准备环境

您将在 Cloud Shell 中执行本教程的大部分步骤。打开 Cloud Shell 时,您还可以自动克隆与本教程相关的 GitHub 代码库。

预配服务帐号以管理 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

    gcloud compute disks create db2wh-2-glusterfs \
        --size=1024 \
        --zone=us-central1-b
    
  3. 创建第三个磁盘 db2wh-3-glusterfs

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

启动 Compute Engine 实例

使用 GitHub 代码库中的启动脚本,为集群节点创建三个 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 通信。

  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
    

创建节点文件

您现在可以创建 nodes 文件,IBM Db2 Warehouse 使用该文件来发现集群中的节点。每一行中指定了节点的初始类型、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 容器

您现在可以在三个实例上启动 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 Client 容器

要将数据上传到 IBM Db2 Warehouse,您现在可以部署 Client 容器。

  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 Client 容器中打开一个 shell 窗口:

    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 Client shell:

    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. 打开浏览器并转到以下网址,其中 [EXTERNAL_IP] 是上一步中获得的 IP 地址:

    https://[EXTERNAL_IP]:8443
    

    您可以忽略安全警告。

  3. 使用以下凭据登录:

    • 用户名:bluadmin
    • 密码:(您此前在操作过程中创建的密码)
  4. 如果您接受 IBM Db2 Warehouse EULA,请点击 Accept

  5. 打开左侧的菜单,然后选择 Administer > Tables

    显示了 Tables 文件夹的 IBM Db2 Warehouse 管理界面

  6. 关闭 Quick Tour 弹出窗口。

  7. 点击 NYC_FREE_PUBLIC_WIFI

    可用的 Wi-Fi 热点的列表

  8. 点击 Data Distribution 标签页,确保表中已填充了数据:

    Tables 列表中的 Data Distribution 标签页

    您总共可以看到 2871 行,这是整个数据集。

  9. 点击 Generate SQL

  10. 选择 SELECT statement

  11. 点击 OK

    这将打开 Generate SQL 标签页,其中预先填充了自动生成的 SELECT 语句。

  12. LIMIT 子句添加到自动生成的 SELECT 语句,以将结果限制为前五条记录:

    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 标签页中会显示一系列记录,这就表明您已成功上传样本数据。

    运行 SQL 语句产生的结果,其中显示了所上传数据中的 5 条记录

清理

为避免因本教程中使用的资源而导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

删除项目

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤