Deployment di IBM Db2 Warehouse su Compute Engine con archiviazione GlusterFS

Questo tutorial illustra come creare un cluster IBM Db2 Warehouse su Compute Engine con un file system GlusterFS come livello di archiviazione. GlusterFS è un file system di rete open source scalabile.

Questo tutorial è utile se sei un amministratore di sistema, sviluppatore, tecnico o amministratore di database e vuoi eseguire il deployment di un cluster IBM Db2 Warehouse su Google Cloud.

Per una panoramica di IBM Db2 Warehouse e delle opzioni di deployment su Google Cloud, consulta la panoramica della serie.

In questo tutorial utilizzerai il seguente software:

  • Ubuntu-server 16.04
  • Versione Community Docker
  • IBM Db2 Warehouse Enterprise Edition (prova)
  • Client IBM Db2 Warehouse
  • File system GlusterFS

Obiettivi

  • Accedi alle immagini Docker IBM Db2 Warehouse nel Docker Store.
  • Esegui il provisioning di un account di servizio personalizzato che disponga solo delle autorizzazioni necessarie per questa architettura.
  • Avvia le VM del cluster.
  • Configura il file system GlusterFS.
  • Inizializza l'autenticazione Docker Store.
  • Esegui il deployment dei container IBM Db2 Warehouse nel cluster.
  • Esegui IBM Db2 Warehouse.
  • Caricare dati di esempio in IBM Db2 Warehouse.
  • Connettiti alla console di amministrazione IBM Db2 e testa il deployment.

Costi

Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:

Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Attiva l'API Compute Engine.

    Abilita l'API

  5. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  7. Attiva l'API Compute Engine.

    Abilita l'API

  8. Se non hai un ID Docker, creane uno nel Docker Store.

In questo tutorial viene utilizzato IBM Db2 Warehouse Enterprise Edition. Se non hai già una licenza per questo software, potresti essere in grado di utilizzare una versione di prova gratuita per questo tutorial.

Al termine di questo tutorial, puoi evitare una fatturazione continua eliminando le risorse che hai creato. Per scoprire di più, vedi Pulizia.

Architettura

In questo tutorial, eseguirai il deployment di tre istanze di Compute Engine in tre zone diverse:

  • Un'istanza denominata db2wh-1 è inizialmente designata come nodo head.
  • Le istanze denominate db2wh-2 e db2wh-3 sono inizialmente definite come nodi di dati.

Il ruolo (nodo di testa o di dati) delle singole istanze può cambiare se si verifica il funzionamento del nodo di testa.

Esegui anche il deployment di un file system condiviso GlusterFS sui tre nodi. GlusterFS viene utilizzato come file system condiviso per il cluster IBM Db2 Warehouse.

L'architettura è mostrata nel seguente diagramma:

Architettura

Accesso alle immagini Docker IBM Db2 Warehouse Edition

In questo tutorial, consenti al tuo account Docker Store di scaricare una versione di prova gratuita di IBM Db2 Warehouse Edition dal Docker Store. Questo implica il download di due immagini separate: un server e un client.

  1. Nel browser, vai all'immagine Docker EEB Db2 Warehouse EE.
  2. Accedi con il nome utente e la password Docker.
  3. Fai clic su Vai alla cassa.
  4. Inserisci i tuoi dati.
  5. Se accetti i termini, seleziona le caselle di controllo Accetto ... e Confermo ... a destra.
  6. Fai clic su Get Content.

    Viene visualizzata la pagina Configurazione. Non è necessario seguire queste istruzioni, perché verranno eseguiti più avanti nel tutorial.

  7. Ripeti la procedura per l'immagine client IDA Db2 Warehouse.

Preparazione dell'ambiente

Esegui la maggior parte dei passaggi di questo tutorial in Cloud Shell. Quando apri Cloud Shell, puoi anche clonare automaticamente il repository GitHub associato a questo tutorial.

  • Apri Cloud Shell e clona il repository GitHub per questo tutorial:

    APRI Cloud Shell

Provisioning di un account di servizio per la gestione delle istanze di Compute Engine

In questo tutorial, creerai un account di servizio per gestire le istanze di Compute Engine. È buona norma limitare l'account di servizio ai soli ruoli e alle autorizzazioni di accesso necessarie per eseguire l'applicazione.

Per questo tutorial, l'unico ruolo richiesto per l'account di servizio è il ruolo Visualizzatore Compute (roles/compute.viewer). Questo ruolo fornisce l'accesso in sola lettura alle risorse di Compute Engine.

  1. In Cloud Shell, crea un account di servizio denominato db2wh-sa:

    gcloud iam service-accounts create db2wh-sa --display-name=db2wh-sa
    
  2. Crea una variabile di ambiente che memorizza l'indirizzo email dell'account di servizio completo:

    export GCE_SERVICE_ACCOUNT_EMAIL="db2wh-sa@$(gcloud config get-value project 2> /dev/null).iam.gserviceaccount.com"
    
  3. Associa compute.viewer all'account di servizio:

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

Creazione di regole firewall

Puoi creare le regole firewall per consentire le comunicazioni e l'accesso interni al cluster dalla console di gestione al cluster. Inoltre, configurerai le regole per consentire la comunicazione interna GlusterFS.

Per ulteriori informazioni, vedi:

  1. In Cloud Shell, crea le regole firewall necessarie per le comunicazioni tra nodi:

    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 le regole firewall per la console di amministrazione:

    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 le regole firewall per 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
    

Inizializzazione dell'ambiente Compute Engine

In questa sezione creerai dischi permanenti per i volumi GlusterFS, avvierai le istanze di Compute Engine, concederai le autorizzazioni e completerai l'inizializzazione dell'ambiente.

Crea dischi permanenti per GlusterFS

In questo tutorial, creerai dischi permanenti aggiuntivi per ospitare il file system GlusterFS.

  1. In Cloud Shell, crea un disco denominato db2wh-1-glusterfs:

    gcloud compute disks create db2wh-1-glusterfs \
        --size=1024 \
        --zone=us-central1-c
    
  2. Crea un secondo disco denominato db2wh-2-glusterfs:

    gcloud compute disks create db2wh-2-glusterfs \
        --size=1024 \
        --zone=us-central1-b
    
  3. Crea un terzo disco denominato db2wh-3-glusterfs:

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

Avvia istanze di Compute Engine

Utilizzando lo script di avvio nel repository di GitHub crei tre istanze di Compute Engine per i nodi del cluster. Le istanze si trovano in zone diverse per supportare l'alta disponibilità. Questo include la mappatura di un indirizzo IP interno a ogni istanza.

  1. In Cloud Shell, crea un'istanza denominata 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 l'istanza 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 l'istanza 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
    

Accedi al Docker Store dalle istanze di Compute Engine

Ora fornisci le tue credenziali a ciascuno dei tre membri del cluster per abilitare le comunicazioni con il Docker Store.

  1. In Cloud Shell, accedi al Docker Store in db2wh-1:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker login" \
        -- -t
    
  2. Accedi al Docker Store in db2wh-2:

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command="sudo docker login" \
        -- -t
    
  3. Accedi al Docker Store in db2wh-3:

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

Crea il file dei nodi

Ora crei un file nodes, che viene utilizzato da IBM Db2 Warehouse per individuare i nodi nel cluster. Ogni riga specifica il tipo iniziale del nodo, il nome DNS e l'indirizzo IP.

  • In Cloud Shell, crea i file dei nodi connettendoti all'istanza dbw2h-1 tramite 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"'
    

Avvio dei container IBM Db2 Warehouse

Ora avvii i container IBM Db2 Warehouse sulle tre istanze.

  1. In Cloud Shell, avvia il container Docker su 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. Avvia il container Docker su 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. Avvia il container Docker su 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 che l'avvio sia completo:

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

    Questa operazione potrebbe richiedere 40-60 minuti, durante i quali potresti rilevare alcuni errori. Puoi ignorarli per questo tutorial.

    La configurazione è stata completata quando è visualizzato lo stato running successfully nell'output:

    HA Management up and running successfully!
    Successfully started IBM Db2 Warehouse service stack!
    
  5. Utilizza SSH per connetterti a db2wh-1 e reimpostare la password amministratore:

    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
    

Test del deployment

Hai completato la configurazione dei contenitori del server, ora puoi testarli.

Deployment del container Client IBM Db2 Warehouse

Per caricare i dati su IBM Db2 Warehouse, ora puoi eseguire il deployment nel container client.

  1. In Cloud Shell, copia i dati di esempio nell'istanza di Compute Engine che eseguirà il container client:

    gcloud compute scp solutions-db2wh/sample-data/nyc-wifi-locs.csv db2wh-1:/tmp \
        --zone=us-central1-c
    
  2. Copia lo schema della tabella di esempio nell'istanza di Compute Engine:

    gcloud compute scp solutions-db2wh/sample-data/sample-table.sql db2wh-1:/tmp \
        --zone=us-central1-c
    
  3. Avvia il container Docker su 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'
    

Caricare dati di esempio

Per testare il deployment, devi caricare i dati di esempio sul server IBM Db2 Warehouse.

  1. In Cloud Shell, visualizza la password creata in precedenza:

    echo $DB2_ADMIN_PASSWORD
    
  2. Apri una finestra della shell nel container Client IBM Db2 Warehouse:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh-client cli' \
        -- -t
    
  3. Crea una variabile di ambiente che memorizzi la password, dove [PASSWORD] è la password che hai ricevuto in precedenza nella procedura:

    DB_PASSWORD=[PASSWORD]
    
  4. Crea una variabile di ambiente che memorizzi l'alias del database:

    DB_ALIAS=BLUDB
    

    BLUDB è il nome database predefinito in IBM Db2 Warehouse.

  5. Crea una variabile di ambiente che memorizzi il nome host del database:

    DB_HOST=db2wh-1
    
  6. Configura il catalogo database:

    db_catalog --add $DB_HOST --alias $DB_ALIAS
    
  7. Crea una tabella in cui inserire dati di esempio nel server IBM Db2 Warehouse:

    dbsql -f /sample-table.sql -d $DB_ALIAS -h $DB_HOST -u bluadmin -W $DB_PASSWORD
    
  8. Carica i dati sul server 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. Chiudi la shell client IBM Db2 Warehouse:

    exit
    

Convalidare i dati con la Console di amministrazione

Ora puoi connetterti alla console di amministrazione di IBM Db2 Warehouse e verificare i dati che hai caricato.

  1. In Cloud Shell, individua l'indirizzo IP esterno del servizio:

    gcloud compute instances describe db2wh-1 \
        --zone=us-central1-c \
        --format='value(networkInterfaces[0].accessConfigs[0].natIP)'
    
  2. Apri un browser e vai all'URL seguente, dove [EXTERNAL_IP] è l'indirizzo IP del passaggio precedente:

    https://[EXTERNAL_IP]:8443
    

    Puoi ignorare l'avviso di sicurezza.

  3. Accedi con le seguenti credenziali:

    • Nome utente: bluadmin
    • Password: (la password creata nel passaggio precedente)
  4. Se accetti il Contratto di licenza con l'utente finale (EULA) di IBM Db2 Warehouse, fai clic su Accept (Accetto).

  5. Sul lato sinistro, apri il menu e seleziona Amministrazione > Tabelle:

    UI di amministrazione di IBM Db2 Warehouse, che mostra la cartella Tables

  6. Chiudi il popup Tour rapido.

  7. Fai clic su NYC_FREE_PUBLIC_WIFI:

    Elenco degli hotspot Wi-Fi disponibili

  8. Fai clic sulla scheda Data Distribution e accertati che la tabella sia compilata:

    Scheda Distribuzione dei dati nell&#39;elenco Tabelle

    Vedrai 2871 righe in totale, che corrisponde all'intero set di dati.

  9. Fai clic su Genera SQL.

  10. Seleziona SELEZIONA istruzione.

  11. Fai clic su OK.

    La scheda Genera SQL si apre e viene precompilata con un'istruzione SELECT generata automaticamente.

  12. Aggiungi una clausola LIMIT all'istruzione SELECT generata automaticamente per limitare i risultati ai primi cinque record:

    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. Fai clic su Esegui e seleziona Esegui tutto.

    Un elenco dei record viene visualizzato nella scheda Set di risultati, a indicare che i dati di esempio sono stati caricati correttamente.

    Risultati dell&#39;esecuzione dell&#39;istruzione SQL in cui sono visualizzati 5 record dei dati caricati

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. Nella console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto da eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi