Como implantar o IBM Db2 Warehouse no Compute Engine com armazenamento GlusterFS

Neste tutorial, você aprende a criar um cluster do IBM Db2 Warehouse no Compute Engine com um sistema de arquivos GlusterFS como camada de armazenamento. O GlusterFS (em inglês) é um sistema de arquivos de rede escalonável e de código aberto.

Este tutorial é destinado a administradores de sistemas ou bancos de dados, desenvolvedores e engenheiros que queiram implantar um cluster IBM Db2 Warehouse no Google Cloud.

Para uma visão geral sobre o IBM Db2 Warehouse e as opções de implantação no Google Cloud, consulte esta página.

Você usará os softwares a seguir neste tutorial:

  • Ubuntu-server 16.04
  • Docker Community Edition
  • IBM Db2 Warehouse Enterprise Edition (versão de avaliação)
  • Cliente do IBM Db2 Warehouse
  • Sistema de arquivos GlusterFS

Objetivos

  • Acessar as imagens Docker do IBM Db2 Warehouse na Docker Store.
  • Provisionar uma conta de serviço personalizada que tenha apenas as permissões necessárias para essa arquitetura.
  • Inicializar as VMs do seu cluster.
  • Configurar o sistema de arquivos GlusterFS.
  • Inicializar a autenticação da Docker Store.
  • Implantar os contêineres do IBM Db2 Warehouse no cluster.
  • Executar o IBM Db2 Warehouse.
  • Fazer upload de dados de amostra no IBM Db2 Warehouse.
  • Conectar-se ao console de administração do IBM Db2 e testar a implantação.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative a API Compute Engine.

    Ative a API

  5. Se você não tiver um código do Docker, crie um no Docker Store.

Neste tutorial, usaremos o IBM Db2 Warehouse Enterprise Edition. Se você ainda não tiver uma licença desse software (em inglês), use a versão de avaliação gratuita para concluir este tutorial.

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Arquitetura

Neste tutorial, você implantará três instâncias do Compute Engine em três zonas diferentes:

  • Uma instância chamada db2wh-1 é inicialmente designada como o nó principal.
  • As instâncias chamadas db2wh-2 e db2wh-3 são inicialmente designadas como nós de dados.

Os papéis (nó principal ou de dados) das instâncias individuais poderão mudar se o nó principal falhar.

Você também implantará um sistema de arquivos compartilhados GlusterFS nos três nós. O GlusterFS é usado como o sistema de arquivos compartilhados para o cluster do IBM Db2 Warehouse.

Veja a arquitetura no diagrama a seguir:

Arquitetura

Como acessar as imagens do Docker do IBM Db2 Warehouse Edition

Neste tutorial, será preciso fazer o download na Docker Store de uma versão de avaliação gratuita do IBM Db2 Warehouse Edition. Isso envolve o download de duas imagens separadas, do servidor e do cliente.

  1. No navegador, acesse a imagem Docker do IBM Db2 Warehouse EE (em inglês).
  2. Faça login com seu nome de usuário e senha do Docker.
  3. Clique em Proceed to checkout.
  4. Preencha seus dados.
  5. Se você concordar com os termos, marque as caixas de seleção I agree ... e I acknowledge ... à direita.
  6. Clique em Get Content.

    Isso direcionará você para a página Configuração. Não é necessário seguir as instruções, porque você realizará essas etapas posteriormente no tutorial.

  7. Repita o processo para a imagem do cliente do IBM Db2 Warehouse (em inglês).

Como preparar o ambiente

A maioria das etapas deste tutorial são realizadas no Cloud Shell. Ao abrir o Cloud Shell, você também pode clonar automaticamente o repositório do GitHub deste tutorial.

Como provisionar uma conta de serviço para gerenciar instâncias do Compute Engine

Neste tutorial, você criará uma conta de serviço para gerenciar instâncias do Compute Engine. Recomendamos limitar a conta de serviço apenas aos papéis e às permissões de acesso necessários para executar o aplicativo.

Neste tutorial, o único papel necessário para a conta de serviço é o de Visualizador do Compute (roles/compute.viewer). Ele fornece acesso somente leitura aos recursos do Compute Engine.

  1. No Cloud Shell, crie uma conta de serviço chamada db2wh-sa:

    gcloud iam service-accounts create db2wh-sa --display-name=db2wh-sa
    
  2. Crie uma variável de ambiente para armazenar o endereço de e-mail completo da conta de serviço:

    export GCE_SERVICE_ACCOUNT_EMAIL="db2wh-sa@$(gcloud config get-value project 2> /dev/null).iam.gserviceaccount.com"
    
  3. Vincule o compute.viewer à conta de serviço:

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

Como criar regras de firewall

Crie regras de firewall para permitir comunicações internas do cluster e acesso a ele a partir do console de gerenciamento, e configure outras para possibilitar a comunicação interna do GlusterFS.

Para mais informações, veja:

  1. No Cloud Shell, crie as regras de firewall necessárias para comunicações entre nós:

    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. Crie regras de firewall para o console de administração:

    gcloud compute firewall-rules create db2wh-admin \
        --description="db2wh admin console" \
        --action=ALLOW \
        --rules=tcp:8443 \
        --source-ranges=0.0.0.0/0
    
  3. Crie regras de firewall para o 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
    

Como inicializar o ambiente do Compute Engine

Nesta seção, você criará discos permanentes para volumes GlusterFS, iniciará instâncias do Compute Engine, concederá permissões e concluirá a inicialização do ambiente.

Criar discos permanentes para o GlusterFS

Neste tutorial, você criará outros discos permanentes para hospedar o sistema de arquivos GlusterFS.

  1. No Cloud Shell, crie um disco chamado db2wh-1-glusterfs:

    gcloud compute disks create db2wh-1-glusterfs \
        --size=1024 \
        --zone=us-central1-c
    
  2. Crie um segundo disco chamado db2wh-2-glusterfs:

    gcloud compute disks create db2wh-2-glusterfs \
        --size=1024 \
        --zone=us-central1-b
    
  3. Crie um terceiro disco chamado db2wh-3-glusterfs:

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

Iniciar instâncias do Compute Engine

Usando o script de inicialização no repositório do GitHub, crie três instâncias do Compute Engine para os nós do cluster. Lembre-se de que as instâncias estão em zonas diferentes para proporcionar alta disponibilidade. Isso inclui o mapeamento de endereços IP internos para cada uma das instâncias.

  1. No Cloud Shell, crie uma instância chamada 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. Crie a instância 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. Crie a instância 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
    

Fazer login na Docker Store a partir de instâncias do Compute Engine

Agora, forneça suas credenciais para cada um dos três membros do cluster para ativar as comunicações com a Docker Store.

  1. No Cloud Shell, faça login na Docker Store em db2wh-1:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker login" \
        -- -t
    
  2. Faça login na Docker Store em db2wh-2:

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command="sudo docker login" \
        -- -t
    
  3. Faça login na Docker Store em db2wh-3:

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

Criar o arquivo de nós

Agora, crie o arquivo nodes que o IBM Db2 Warehouse usará para descobrir os nós no cluster. Cada linha especifica o tipo inicial, o nome DNS e o endereço IP do nó.

  • No Cloud Shell, conecte-se à instância dbw2h-1 por meio do SSH para criar os arquivos de nós:

    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"'
    

Como inicializar os contêineres do IBM Db2 Warehouse

Agora, inicie os contêineres do IBM Db2 Warehouse nas três instâncias.

  1. No Cloud Shell, inicie o contêiner do Docker em db2wh-1:

    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. Inicie o contêiner do Docker em db2wh-2:

    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. Inicie o contêiner do Docker em db2wh-3:

    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. Verifique se a inicialização foi concluída:

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

    Esse processo pode levar de 40 a 60 minutos. Durante esse tempo, talvez alguns erros sejam detectados. Ignore-os neste tutorial.

    O status running successfully na saída indica que a configuração foi concluída:

    HA Management up and running successfully!
    Successfully started IBM Db2 Warehouse service stack!
    
  5. Use o SSH para se conectar a db2wh-1 e redefina a senha do administrador:

    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
    

Como testar a implantação

Agora que você terminou de configurar os contêineres do servidor, teste a implantação.

Implantar o contêiner de cliente do IBM Db2 Warehouse

Para fazer upload de dados no IBM Db2 Warehouse, implante no contêiner do cliente.

  1. No Cloud Shell, copie os dados de amostra para a instância do Compute Engine que executará o contêiner do cliente:

    gcloud compute scp solutions-db2wh/sample-data/nyc-wifi-locs.csv db2wh-1:/tmp \
        --zone=us-central1-c
    
  2. Copie o esquema da tabela de amostra para essa instância do Compute Engine:

    gcloud compute scp solutions-db2wh/sample-data/sample-table.sql db2wh-1:/tmp \
        --zone=us-central1-c
    
  3. Inicie o contêiner do Docker em db2wh-1:

    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'
    

Fazer upload dos dados de amostra

Para facilitar o teste da implantação, faça upload dos dados de amostra no servidor do IBM Db2 Warehouse.

  1. No Cloud Shell, exiba a senha criada anteriormente:

    echo $DB2_ADMIN_PASSWORD
    
  2. Abra uma janela do shell no contêiner do cliente do IBM Db2 Warehouse:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh-client cli' \
        -- -t
    
  3. Crie uma variável de ambiente para armazenar a senha, em que [PASSWORD] é a senha que você criou anteriormente:

    DB_PASSWORD=[PASSWORD]
    
  4. Crie uma variável de ambiente que armazene o alias do banco de dados:

    DB_ALIAS=BLUDB
    

    BLUDB é o nome padrão do banco de dados no IBM Db2 Warehouse.

  5. Crie uma variável de ambiente para armazenar o nome do host do banco de dados:

    DB_HOST=db2wh-1
    
  6. Configure o catálogo do banco de dados:

    db_catalog --add $DB_HOST --alias $DB_ALIAS
    
  7. Crie uma tabela para armazenar os dados de amostra no servidor do IBM Db2 Warehouse:

    dbsql -f /sample-table.sql -d $DB_ALIAS -h $DB_HOST -u bluadmin -W $DB_PASSWORD
    
  8. Faça upload dos dados para o servidor do 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. Feche o shell do cliente do IBM Db2 Warehouse:

    exit
    

Validar os dados usando o console de administração

Agora conecte-se ao console de administração do IBM Db2 Warehouse e verifique os dados carregados.

  1. No Cloud Shell, encontre o endereço IP externo do serviço:

    gcloud compute instances describe db2wh-1 \
        --zone=us-central1-c \
        --format='value(networkInterfaces[0].accessConfigs[0].natIP)'
    
  2. Abra um navegador e acesse o URL abaixo, em que [EXTERNAL_IP] é o endereço IP da etapa anterior:

    https://[EXTERNAL_IP]:8443
    

    Ignore o aviso de segurança.

  3. Faça login com as credenciais a seguir:

    • Nome de usuário: bluadmin
    • Senha: a que você criou no procedimento anterior
  4. Caso você aceite o EULA do IBM Db2 Warehouse, clique em Accept.

  5. No lado esquerdo, abra o menu e selecione Administer > Tables:

    IU de administração do IBM Db2 Warehouse, mostrando a pasta &quot;Tables&quot;

  6. Feche o pop-up do Quick Tour.

  7. Clique em NYC_FREE_PUBLIC_WIFI:

    Lista de pontos de acesso Wi-Fi disponíveis

  8. Clique na guia Data Distribution e verifique se a tabela está preenchida:

    Guia &quot;Data Distribution&quot; na listagem &quot;Tables&quot;

    São exibidas 2.871 linhas no total, que compõem todo o conjunto de dados.

  9. Clique em Generate SQL.

  10. Selecione SELECT statement.

  11. Clique em OK.

    A guia Generate SQL será aberta e preenchida com uma instrução SELECT gerada automaticamente.

  12. Adicione uma cláusula LIMIT à instrução SELECT gerada automaticamente para limitar os resultados aos cinco primeiros registros:

    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. Clique em Run e selecione Run All.

    Uma lista dos registros é exibida na guia Result Set, mostrando que o upload dos dados de amostra foi concluído com sucesso.

    Resultados da execução da instrução SQL com cinco registros dos dados carregados

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir