Implementa IBM Db2 Warehouse en Compute Engine con almacenamiento de NFS

En este instructivo, se muestra cómo crear un clúster de IBM Db2 Warehouse en Compute Engine con una unidad de sistema de archivos de red (NFS) como capa de almacenamiento. Usa Filestore como el backend de NFS para la solución de almacenamiento compartido. Sin embargo, puedes elegir cualquier otra solución de NFS que pueda implementarse en la nube.

Este instructivo te resultará útil si eres administrador de sistemas, desarrollador, ingeniero o administrador de bases de datos y deseas implementar un clúster de IBM Db2 Warehouse en Google Cloud.

Para obtener una descripción general de IBM Db2 Warehouse y las opciones de implementación en Google Cloud, consulta la descripción general de la serie.

En este instructivo, usarás el siguiente software:

  • Ubuntu-server 16.04
  • Docker Community Edition
  • IBM Db2 Warehouse Enterprise Edition (versión de prueba)
  • IBM Db2 Warehouse Client

Objetivos

  • Obtener acceso a las imágenes de Docker de IBM Db2 Warehouse en la Docker Store
  • Crear una instancia de Filestore
  • Aprovisionar una cuenta de servicio personalizada que solo tenga los permisos necesarios para esta arquitectura
  • Inicializar la autenticación en la Docker Store
  • Implementar los contenedores de IBM Db2 Warehouse en el clúster
  • Ejecutar IBM Db2 Warehouse
  • Subir datos de muestra a IBM Db2 Warehouse
  • Conectarse a la Consola del administrador de IBM Db2

Costos

En este instructivo, se usan componentes facturables de Google Cloud, que incluyen los siguientes:

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  4. Habilita las API de Compute Engine and Filestore.

    Habilita las API

  5. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  7. Habilita las API de Compute Engine and Filestore.

    Habilita las API

  8. Si no tienes un ID de Docker, crea uno en Docker Store.

En este instructivo, usarás IBM Db2 Warehouse Enterprise Edition. Si aún no tienes una licencia de este software, tal vez puedas usar una versión de prueba gratuita para este instructivo.

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Arquitectura

En este instructivo, implementarás tres instancias de Compute Engine en tres zonas diferentes:

  • En un principio, una instancia llamada db2wh-1 se designa como el nodo principal.
  • Al comienzo, las instancias llamadas db2wh-2 y db2wh-3 se designan como nodos de datos.

La función (nodo principal o de datos) de cada instancia puede cambiar si falla el nodo principal.

También implementas una instancia de Filestore llamada db2wh-data-nfs, que actúa como el almacenamiento compartido para los nodos del clúster.

La arquitectura se muestra en el siguiente diagrama:

Arquitectura

Obtén acceso a las imágenes de Docker de IBM Db2 Warehouse Edition

En este instructivo, permitirás que tu cuenta de la Docker Store descargue una versión de prueba gratuita de IBM Db2 Warehouse Edition desde la Docker Store. Esto implica descargar dos imágenes distintas: un servidor y un cliente.

  1. En tu navegador, ve a la imagen de Docker de IBM Db2 Warehouse EE.

  2. Accede con tu nombre de usuario y contraseña de Docker.

  3. Haz clic en Proceed to checkout (Ir a confirmación de compra).

  4. Completa tus datos.

  5. Si estás de acuerdo con los términos, selecciona las casillas de verificación I agree... (Acepto…) y I acknowledge… (Reconozco...) que aparecen a la derecha.

  6. Haz clic en Get content (Obtener contenido).

    Esta acción te llevará a la página Setup (Configuración). No es necesario que sigas las instrucciones, ya que realizarás esos pasos más adelante en el instructivo.

  7. Repite el proceso para la imagen de IBM Db2 Warehouse Client.

Prepara tu entorno

Realizarás la mayoría de los pasos de este instructivo en Cloud Shell. Cuando abres Cloud Shell, también puedes clonar automáticamente el repositorio de GitHub asociado con este instructivo.

  • Abre Cloud Shell y clona el repositorio de GitHub de este instructivo:

    Abrir Cloud Shell

Crea la instancia de Filestore

El siguiente paso es crear la instancia de base de datos de Filestore.

  1. En Cloud Shell, crea una instancia de Filestore:

    gcloud beta filestore instances create db2wh-data-nfs \
        --location=us-central1-c --tier=STANDARD \
        --file-share=name="db2whdata",capacity=1TB \
        --network=name="default",reserved-ip-range="10.0.0.0/29"
    

    Esto crea una instancia de Filestore de nivel estándar llamada db2wh-data-nfs con capacidad de 1 TB y un punto de activación llamado db2whdata.

  2. Crea una variable de entorno que almacene la dirección IP de la instancia de Filestore:

    export FILESTORE_IP=$(gcloud beta filestore instances describe db2wh-data-nfs --location=us-central1-c \
    --format='value(networks[0].ipAddresses[0])')
    

Aprovisiona una cuenta de servicio para administrar instancias de Compute Engine

En el instructivo, crearás una cuenta de servicio para administrar las instancias de Compute Engine. Se recomienda que limites la cuenta de servicio a los permisos de acceso y funciones necesarios para ejecutar la aplicación.

En este instructivo, la única función necesaria para la cuenta de servicio es la de visualizador de Compute (roles/compute.viewer). Esta función proporciona acceso de solo lectura a los recursos de Compute Engine.

  1. En Cloud Shell, crea una cuenta de servicio llamada db2wh-sa:

    gcloud iam service-accounts create db2wh-sa --display-name=db2wh-sa
    
  2. Crea una variable de entorno que almacene el nombre de correo electrónico de la cuenta de servicio:

    export GCE_SERVICE_ACCOUNT_EMAIL="db2wh-sa@$(gcloud config get-value project 2> /dev/null).iam.gserviceaccount.com"
    
  3. Vincula la función compute.viewer a la cuenta de servicio:

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

Crea reglas de firewall

Creas reglas de firewall para permitir las comunicaciones internas del clúster y el acceso desde la consola de administración al clúster. A fin de obtener más información, consulta los requisitos de IBM Db2 Warehouse para Linux y hardware x86 en el sitio de asistencia de IBM.

  1. En Cloud Shell, crea las reglas de firewall necesarias para las comunicaciones entre nodos:

    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. Crea las reglas de firewall para la Consola del administrador:

    gcloud compute firewall-rules create db2wh-admin \
        --description="db2wh admin console" \
        --action=ALLOW --rules=tcp:8443 \
        --source-ranges=0.0.0.0/0
    

Inicializa el entorno de Compute Engine

En esta sección, iniciarás instancias de Compute Engine, otorgarás permisos y finalizarás la inicialización del entorno.

Inicia instancias de Compute Engine

Usa la secuencia de comandos de inicio en el repositorio de GitHub y crea tres instancias de Compute Engine para los nodos del clúster. Las instancias están en zonas distintas para permitir una disponibilidad alta. Esto incluye mapear direcciones IP internas a cada una de las instancias.

  1. En Cloud Shell, crea una instancia llamada 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=nfs_filestore,filestoreip=$FILESTORE_IP \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL
    
  2. Crea una instancia llamada 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=nfs_filestore,filestoreip=$FILESTORE_IP \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL
    
  3. Crea una instancia llamada 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=nfs_filestore,filestoreip=$FILESTORE_IP \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL
    

Accede a Docker Store desde las instancias de Compute Engine

A continuación, suministrarás las credenciales a cada uno de los tres miembros del clúster a fin de permitir la comunicación con Docker Store.

  1. En Cloud Shell, accede a Docker Store en db2wh-1:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker login" \
        -- -t
    
  2. Accede a la Docker Store en db2wh-2:

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command="sudo docker login" \
        -- -t
    
  3. Accede a la Docker Store en db2wh-3:

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

Crea el archivo de nodos

Ahora, crea el archivo nodes, que IBM Db2 Warehouse usará para descubrir los nodos del clúster. Cada línea especifica el tipo inicial del nodo, su nombre DNS y su dirección IP.

  1. En Cloud Shell, conéctate a la instancia dbw2h-1 mediante SSH para crear los archivos nodes:

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

Inicia los contenedores de IBM Db2 Warehouse

A continuación, inicia los contenedores de Db2 Warehouse en las tres instancias.

  1. En Cloud Shell, inicia el contenedor de Docker en 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. Inicia el contenedor de Docker en 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. Inicia el contenedor de Docker en 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. Verifica que el inicio se haya completado:

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

    Esto puede llevar entre 40 y 60 minutos, tiempo durante el cual es posible que detectes algunos errores. Puedes ignorarlos para este instructivo.

    La configuración se completa cuando ves el mensaje running successfully en el resultado:

    HA Management up and running successfully!
    Successfully started IBM Db2 Warehouse service stack!
    
  5. Usa SSH para conectarte a db2wh-1 y restablecer la contraseña del 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
    

Prueba tu implementación

Ahora que terminaste de configurar los contenedores del servidor, puedes probarlo.

Implementa el contenedor de IBM Db2 Warehouse Client

Para subir datos a IBM Db2 Warehouse, ahora puedes hacer la implementación en el contenedor de Client:

  1. En Cloud Shell, copia los datos de muestra a la instancia de Compute Engine que ejecutará el contenedor de Client:

    gcloud compute scp solutions-db2wh/sample-data/nyc-wifi-locs.csv db2wh-1:/tmp \
        --zone=us-central1-c
    
  2. Copia el esquema de la tabla de muestra en la instancia de Compute Engine que ejecutará el contenedor cliente:

    gcloud compute scp solutions-db2wh/sample-data/sample-table.sql db2wh-1:/tmp \
        --zone=us-central1-c
    
  3. Inicia el contenedor de Docker en 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'
    

Sube los datos de muestra

Para ayudarte a probar la implementación, sube datos de muestra al servidor de IBM Db2 Warehouse.

  1. En Cloud Shell, muestra la contraseña creada anteriormente:

    echo $DB2_ADMIN_PASSWORD
    
  2. Abre una ventana de shell en el contenedor cliente de IBM Db2 Warehouse:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh-client cli' \
        -- -t
    
  3. Crea una variable de entorno que almacene la contraseña, según la cual [PASSWORD] es la contraseña que obtuviste anteriormente en este procedimiento:

    DB_PASSWORD=[PASSWORD]
    
  4. Crea una variable de entorno que almacene el alias de la base de datos:

    DB_ALIAS=BLUDB
    

    BLUDB es el nombre de la base de datos predeterminada de IBM Db2 Warehouse.

  5. Crea una variable de entorno que almacene el nombre del host de la base de datos:

    DB_HOST=db2wh-1
    
  6. Configura el catálogo de la base de datos:

    db_catalog --add $DB_HOST --alias $DB_ALIAS
    
  7. Crea una tabla para contener los datos de muestra en el servidor de IBM Db2 Warehouse:

    dbsql -f /sample-table.sql -d $DB_ALIAS -h $DB_HOST -u bluadmin -W $DB_PASSWORD
    
  8. Sube los datos al servidor de 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. Cierra el shell de IBM Db2 Warehouse Client:

    exit
    

Valida los datos con la Consola del administrador

Ahora, puedes conectarte a la Consola del administrador de IBM Db2 Warehouse y verificar los datos que subiste.

  1. En Cloud Shell, busca la dirección IP externa del servicio:

    gcloud compute instances describe db2wh-1 \
        --zone=us-central1-c \
        --format='value(networkInterfaces[0].accessConfigs[0].natIP)'
    
  2. Abre un navegador y ve a la siguiente URL, en la cual [EXTERNAL_IP] es la dirección IP del paso anterior:

    https://[EXTERNAL_IP]:8443
    

    Puedes omitir la advertencia de seguridad.

  3. Accede con las siguientes credenciales:

    • Nombre de usuario: bluadmin
    • Contraseña: (la que creaste en el procedimiento anterior)
  4. Si aceptas el CLUF (Contrato de licencia para el usuario final) de IBM Db2 Warehouse, haz clic en Accept (Aceptar).

  5. En el lado izquierdo, abre el menú y luego selecciona Administer > Tablas (Tables):

    IU de administración de IBM Db2 Warehouse, que muestra la carpeta Tablas

  6. Cierra la ventana emergente Recorrido rápido.

  7. Haz clic en NYC_FREE_PUBLIC_WIFI:

    Lista de hotspots de Wi-Fi disponibles

  8. Haz clic en la pestaña Data Distribution (Distribución de datos) y asegúrate de que se hayan propagado los datos en la tabla:

    Pestaña Distribución de datos en la lista Tablas

    Verás 2,871 filas en total, que es el conjunto de datos completo.

  9. Haz clic en Generate SQL (Generar SQL).

  10. Selecciona SELECT statement (Instrucción SELECT).

  11. Haz clic en Aceptar.

    Se abre la pestaña Generate SQL y ya está propagada con una instrucción SELECT que se genera de forma automática.

  12. Agrega una cláusula LIMIT a la instrucción SELECT generada de forma automática para limitar los resultados a los primeros cinco 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. Haz clic en Ejecutar (Run) y luego selecciona Run all.

    Aparecerá una lista de registros en la pestaña Result Set para indicar que subiste con éxito los datos de muestra.

    Resultados de la ejecución de la instrucción de SQL que muestra 5 registros de los datos subidos

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Próximos pasos