Implementación de IBM Db2 Warehouse en Compute Engine con almacenamiento de GlusterFS

En este instructivo, se muestra cómo crear un clúster de IBM Db2 Warehouse en Compute Engine con un sistema de archivos GlusterFS como capa de almacenamiento. GlusterFS es un sistema de archivos de red escalable y de código abierto.

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 sobre IBM Db2 Warehouse y las opciones de implementación en Google Cloud, consulta la descripción general de 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
  • Sistema de archivos GlusterFS

Objetivos

  • Obtener acceso a las imágenes de Docker de IBM Db2 Warehouse en la Docker Store
  • Aprovisionar una cuenta de servicio personalizada que solo tenga los permisos necesarios para esta arquitectura
  • Iniciar tus VM del clúster
  • Configurar el sistema de archivos GlusterFS
  • 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 en IBM Db2 Warehouse
  • Conectarse a la Consola del administrador de IBM Db2 y probar la implementación

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 la API Compute Engine.

    Habilita la API

  5. 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.

Además, implementarás un sistema de archivos compartido de GlusterFS en los tres nodos. GlusterFS se usa como el sistema de archivos compartidos para el clúster de IBM Db2 Warehouse.

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

Aprovisiona una cuenta de servicio para administrar instancias de Compute Engine

En este 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 la dirección de correo electrónico de la cuenta de servicio completa:

    export GCE_SERVICE_ACCOUNT_EMAIL="db2wh-sa@$(gcloud config get-value project 2> /dev/null).iam.gserviceaccount.com"
    
  3. Vincula el compute.viewer con 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

Crea reglas de firewall para permitir las comunicaciones internas del clúster y el acceso desde la consola de administración hacia el clúster. Además, configuras reglas para permitir la comunicación interna de GlusterFS.

Para obtener más información, consulte:

  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
    
  3. Crea las reglas de firewall para 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
    

Inicializa el entorno de Compute Engine

En esta sección, crearás discos persistentes para volúmenes de GlusterFS, iniciarás instancias de Compute Engine, otorgarás permisos y terminarás la inicialización del entorno.

Crea discos persistentes para GlusterFS

En este instructivo, crearás discos persistentes adicionales para alojar el sistema de archivos GlusterFS.

  1. En Cloud Shell, crea un disco con el nombre db2wh-1-glusterfs:

    gcloud compute disks create db2wh-1-glusterfs \
        --size=1024 \
        --zone=us-central1-c
    
  2. Crea un segundo disco con el nombre db2wh-2-glusterfs:

    gcloud compute disks create db2wh-2-glusterfs \
        --size=1024 \
        --zone=us-central1-b
    
  3. Crea un tercer disco con el nombre db2wh-3-glusterfs:

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

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=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. 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=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. 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=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
    

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.

  • En Cloud Shell, crea los archivos del nodo mediante la conexión de la instancia dbw2h-1 a través de SSH:

    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

Ahora, inicia los contenedores de IBM 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 en este instructivo.

    Se completa la configuración cuando se muestra el estado 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 esa instancia de Compute Engine:

    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