IBM Db2 Warehouse auf Compute Engine mit GlusterFS-Speicher bereitstellen

In dieser Anleitung wird gezeigt, wie ein IBM Db2 Warehouse-Cluster in Compute Engine erstellt wird. Dafür wird ein GlusterFS-Dateisystem als Speicherschicht ausgeführt. GlusterFS ist ein skalierbares Open-Source-Netzwerkdateisystem.

Diese Anleitung ist hilfreich für Systemadministratoren, Entwickler und Datenbankadministratoren, die einen IBM DB2 Warehouse-Cluster in Google Cloud bereitstellen möchten.

Eine Übersicht über IBM Db2 Warehouse und die Bereitstellungsoptionen in Google Cloud finden Sie in der Übersicht der Reihe.

In dieser Anleitung verwenden Sie folgende Software:

  • Ubuntu-Server 16.04
  • Docker Community Edition
  • IBM Db2 Warehouse Enterprise Edition (Testversion)
  • IBM Db2 Warehouse-Client
  • GlusterFS-Dateisystem

Ziele

  • Auf die IBM Db2 Warehouse Docker-Images im Docker Store zugreifen
  • Benutzerdefiniertes Dienstkonto bereitstellen, das nur die für diese Architektur erforderlichen Berechtigungen hat
  • Cluster-VMs starten
  • GlusterFS-Dateisystem konfigurieren
  • Docker Store-Authentifizierung initialisieren
  • IBM Db2 Warehouse-Container im Cluster bereitstellen
  • IBM Db2 Warehouse ausführen
  • Beispieldaten in IBM Db2 Warehouse hochladen
  • Verbindung zur IBM Db2-Verwaltungskonsole herstellen und die Bereitstellung testen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Aktivieren Sie die Compute Engine API.

    Aktivieren Sie die API

  5. Erstellen Sie eine Docker-ID im Docker Store, wenn Sie noch keine haben.

In dieser Anleitung wird die IBM Db2 Warehouse Enterprise Edition verwendet. Wenn Sie noch keine Lizenz für diese Software haben, können Sie eventuell eine kostenlose Testversion für diese Anleitung verwenden.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Architektur

In dieser Anleitung erstellen Sie drei Compute Engine-Instanzen in drei verschiedenen Zonen:

  • Eine Instanz mit dem Namen db2wh-1 wird anfänglich als Hauptknoten bezeichnet.
  • Die Instanzen mit den Namen db2wh-2 und db2wh-3 werden anfänglich als Datenknoten bezeichnet.

Die Funktion einzelner Instanzen (Haupt- oder Datenknoten) kann sich ändern, wenn der Hauptknoten ausfällt und es zum Failover kommt.

Sie stellen auch ein freigegebenes GlusterFS-Dateisystem auf den drei Knoten bereit. GlusterFS wird als gemeinsames Dateisystem für den IBM Db2 Warehouse-Cluster verwendet.

Diese Architektur wird im folgenden Diagramm dargestellt:

Architektur

Auf die Docker-Images von IBM Db2 Warehouse Edition zugreifen

In dieser Anleitung wird Ihrem Docker Store-Konto das Herunterladen einer kostenlosen Testversion von IBM Db2 Warehouse Edition aus dem Docker Store erlaubt. Dazu werden zwei separate Images heruntergeladen – für Server und Client.

  1. Wechseln Sie in Ihrem Browser zum IBM Db2 Warehouse EE Docker-Image.
  2. Melden Sie sich mit Ihrem Docker-Nutzernamen und -Passwort an.
  3. Klicken Sie auf Proceed to checkout (Zur Kasse).
  4. Geben Sie Ihre Daten ein.
  5. Klicken Sie, wenn Sie den Nutzungsbestimmungen zustimmen, auf die Kästchen I agree … (Ich stimme zu) und I acknowledge … (Ich bestätige) auf der rechten Seite.
  6. Klicken Sie auf Get Content (Inhalt abrufen).

    Daraufhin wird die Seite Setup (Einrichtung) eingeblendet. Die Hinweise auf dieser Seite können Sie ignorieren, da diese Schritte später in der Anleitung ausgeführt werden.

  7. Wiederholen Sie den Vorgang für das IBM Db2 Warehouse-Client-Image.

Umgebung vorbereiten

Die meisten Schritte in dieser Anleitung werden in Cloud Shell ausgeführt. Mit geöffneter Cloud Shell können Sie auch das mit dieser Anleitung verknüpfte GitHub-Repository automatisch klonen.

  • Rufen Sie Cloud Shell auf und klonen Sie das GitHub-Repository für diese Anleitung:

    Zu Cloud Shell

Dienstkonto zum Verwalten von Compute Engine-Instanzen bereitstellen

In dieser Anleitung erstellen Sie ein Dienstkonto zur Verwaltung von Compute Engine-Instanzen. Es wird empfohlen, das Dienstkonto auf die Rollen und Zugriffsberechtigungen zu beschränken, die zur Ausführung der Anwendung erforderlich sind.

Für diese Anleitung ist "Compute-Betrachter" (roles/compute.viewer) die einzige für das Dienstkonto erforderliche Rolle. Diese Rolle bietet schreibgeschützten Zugriff auf Compute Engine-Ressourcen.

  1. Erstellen Sie in Cloud Shell ein Dienstkonto mit dem Namen db2wh-sa:

    gcloud iam service-accounts create db2wh-sa --display-name=db2wh-sa
    
  2. Erstellen Sie eine Umgebungsvariable, in der die vollständige E-Mail-Adresse des Dienstkontos gespeichert ist:

    export GCE_SERVICE_ACCOUNT_EMAIL="db2wh-sa@$(gcloud config get-value project 2> /dev/null).iam.gserviceaccount.com"
    
  3. Binden Sie compute.viewer an das Dienstkonto:

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

Firewallregeln erstellen

Sie erstellen Firewallregeln, um die interne Clusterkommunikation und den Zugriff von der Verwaltungskonsole auf den Cluster zuzulassen. Außerdem konfigurieren Sie Regeln, um die interne GlusterFS-Kommunikation zuzulassen.

Weitere Informationen:

  1. Erstellen Sie in Cloud Shell die Firewallregeln, die für die Kommunikation zwischen Knoten erforderlich sind:

    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. Erstellen Sie Firewallregeln für die Verwaltungskonsole:

    gcloud compute firewall-rules create db2wh-admin \
        --description="db2wh admin console" \
        --action=ALLOW \
        --rules=tcp:8443 \
        --source-ranges=0.0.0.0/0
    
  3. Erstellen Sie Firewallregeln für 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-Umgebung initialisieren

In diesem Abschnitt erstellen Sie nichtflüchtige Laufwerke für GlusterFS-Volumes, starten Compute Engine-Instanzen, erteilen Berechtigungen und beenden die Initialisierung der Umgebung.

Nichtflüchtige Laufwerke für GlusterFS erstellen

In dieser Anleitung erstellen Sie weitere nichtflüchtige Laufwerke zum Hosten des GlusterFS-Dateisystems.

  1. Erstellen Sie in Cloud Shell einen Speicher mit dem Namen db2wh-1-glusterfs:

    gcloud compute disks create db2wh-1-glusterfs \
        --size=1024 \
        --zone=us-central1-c
    
  2. Erstellen Sie einen zweiten Speicher mit dem Namen db2wh-2-glusterfs:

    gcloud compute disks create db2wh-2-glusterfs \
        --size=1024 \
        --zone=us-central1-b
    
  3. Erstellen Sie einen dritten Speicher mit dem Namen db2wh-3-glusterfs:

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

Compute Engine-Instanzen starten

Mit dem Startskript im GitHub-Repository erstellen Sie für die Clusterknoten drei Instanzen von Compute Engine. Die Instanzen befinden sich in verschiedenen Zonen, um eine Hochverfügbarkeit zu ermöglichen. Dies beinhaltet die Zuordnung einer internen IP-Adresse zu jeder Instanz.

  1. Erstellen Sie in Cloud Shell eine Instanz namens 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. Erstellen Sie die Instanz 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. Erstellen Sie die Instanz 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
    

Von Compute Engine-Instanzen beim Docker Store anmelden

Geben Sie nun Ihre Anmeldedaten für jedes der drei Mitglieder des Clusters ein, damit mit dem Docker Store kommuniziert werden kann.

  1. Melden Sie sich in Cloud Shell im Docker Store auf db2wh-1 an:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker login" \
        -- -t
    
  2. Melden Sie sich im Docker Store auf db2wh-2 an:

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command="sudo docker login" \
        -- -t
    
  3. Melden Sie sich im Docker Store auf db2wh-3 an:

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

Knotendatei erstellen

Erstellen Sie jetzt die Datei nodes, mit der IBM Db2 Warehouse die Knoten im Cluster ermittelt. Jede Zeile gibt den anfänglichen Typ des Knotens, seinen DNS-Namen und seine IP-Adresse an.

  • Erstellen Sie in Cloud Shell die Knotendateien, indem Sie eine SSH-Verbindung zur Instanz dbw2h-1 herstellen:

    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-Container starten

Starten Sie jetzt in den drei Instanzen die IBM Db2 Warehouse-Container.

  1. Starten Sie in Cloud Shell den Docker-Container auf 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. Starten Sie den Docker-Container auf 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. Starten Sie den Docker-Container auf 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. Prüfen Sie, ob der Startvorgang abgeschlossen ist:

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

    Dies kann 40 bis 60 Minuten dauern. In dieser Zeit werden möglicherweise ermittelte Fehler angezeigt. Sie können sie für diese Anleitung ignorieren.

    Die Konfiguration ist abgeschlossen, wenn Sie den Status running successfully in der Ausgabe sehen:

    HA Management up and running successfully!
    Successfully started IBM Db2 Warehouse service stack!
    
  5. Stellen Sie eine SSH-Verbindung zu db2wh-1 her und setzen Sie das Administratorpasswort zurück:

    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
    

Bereitstellung testen

Die Konfiguration der Server-Container ist jetzt abgeschlossen und kann nun getestet werden.

IBM Db2 Warehouse Client-Container bereitstellen

Für das Hochladen von Daten in IBM Db2 Warehouse stellen Sie jetzt den Client-Container bereit.

  1. Kopieren Sie in Cloud Shell Beispieldaten in die Compute Engine-Instanz, die den Client-Container ausführt:

    gcloud compute scp solutions-db2wh/sample-data/nyc-wifi-locs.csv db2wh-1:/tmp \
        --zone=us-central1-c
    
  2. Kopieren Sie das Beispieltabellenschema in diese Compute Engine-Instanz:

    gcloud compute scp solutions-db2wh/sample-data/sample-table.sql db2wh-1:/tmp \
        --zone=us-central1-c
    
  3. Starten Sie den Docker-Container auf 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'
    

Beispieldaten hochladen

Laden Sie für den Test der Bereitstellung Beispieldaten auf den IBM Db2 Warehouse-Server hoch.

  1. Rufen Sie in Cloud Shell das zuvor erstellte Passwort auf:

    echo $DB2_ADMIN_PASSWORD
    
  2. Öffnen Sie im Container des IBM Db2 Warehouse-Clients ein Shell-Fenster:

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh-client cli' \
        -- -t
    
  3. Erstellen Sie eine Umgebungsvariable, in der das Passwort gespeichert wird, wobei [PASSWORD] das zuvor aufgerufene Passwort ist:

    DB_PASSWORD=[PASSWORD]
    
  4. Erstellen Sie eine Umgebungsvariable, in der der Datenbankalias gespeichert wird:

    DB_ALIAS=BLUDB
    

    BLUDB ist der Standarddatenbankname in IBM Db2 Warehouse.

  5. Erstellen Sie eine Umgebungsvariable, in der der Datenbankhostname gespeichert wird:

    DB_HOST=db2wh-1
    
  6. Richten Sie den Datenbankkatalog ein:

    db_catalog --add $DB_HOST --alias $DB_ALIAS
    
  7. Erstellen Sie für die Beispieldaten eine Tabelle auf dem IBM Db2 Warehouse-Server:

    dbsql -f /sample-table.sql -d $DB_ALIAS -h $DB_HOST -u bluadmin -W $DB_PASSWORD
    
  8. Laden Sie die Daten auf den IBM Db2 Warehouse-Server hoch:

    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. Verlassen Sie die Shell des IBM Db2 Warehouse-Clients:

    exit
    

Daten mit der Verwaltungskonsole prüfen

Sie können jetzt eine Verbindung zur IBM Db2 Warehouse-Verwaltungskonsole herstellen und prüfen, ob die Daten hochgeladen wurden.

  1. Suchen Sie in Cloud Shell die externe IP-Adresse des Dienstes:

    gcloud compute instances describe db2wh-1 \
        --zone=us-central1-c \
        --format='value(networkInterfaces[0].accessConfigs[0].natIP)'
    
  2. Rufen Sie einen Browser und die folgende URL auf, wobei [EXTERNAL_IP] die IP-Adresse aus dem vorherigen Schritt ist:

    https://[EXTERNAL_IP]:8443
    

    Sie können die Sicherheitswarnung ignorieren.

  3. Geben Sie folgende Anmeldedaten ein:

    • Nutzername: bluadmin
    • Passwort: das Passwort, das Sie im vorherigen Abschnitt erstellt haben
  4. Klicken Sie auf Accept (Akzeptieren), wenn Sie dem Endnutzer-Lizenzvertrag (EULA) von IBM Db2 Warehouse zustimmen.

  5. Öffnen Sie auf der linken Seite das Menü und wählen Sie Administer > Tables (Verwalten > Tabellen) aus:

    IBM Db2 Warehouse-Verwaltungsoberfläche mit dem Ordner &quot;Tables&quot; (Tabellen)

  6. Schließen Sie das Pop-up Quick Tour (Kurzeinführung).

  7. Klicken Sie auf NYC_FREE_PUBLIC_WIFI:

    Liste der verfügbaren WLAN-Hotspots

  8. Klicken Sie auf den Tab Data Distribution (Datenverteilung) und prüfen Sie, ob die Tabelle Werte enthält:

    Tab &quot;Data Distribution&quot; (Datenverteilung) in der Tabellenliste

    Es werden insgesamt 2.871 Zeilen angezeigt, also das gesamte Dataset.

  9. Klicken Sie auf Generate SQL (SQL generieren).

  10. Wählen Sie SELECT statement (SELECT-Anweisung) aus.

  11. Klicken Sie auf OK.

    Der Tab Generate SQL wird geöffnet und darin wird eine automatisch erstellte SELECT-Anweisung angezeigt.

  12. Fügen Sie der automatisch generierten SELECT-Anweisung eine LIMIT-Klausel hinzu, um die Ergebnisse auf die ersten fünf Datensätze zu beschränken:

    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. Klicken Sie auf Run (Ausführen) und wählen Sie Run all (Alle ausführen) aus.

    Auf dem Tab Result Set (Ergebnis-Set) wird eine Liste von Datensätzen angezeigt, aus der hervorgeht, dass die Beispieldaten erfolgreich hochgeladen wurden.

    Ergebnisse der ausgeführten SQL-Anweisung mit fünf Datensätzen der hochgeladenen Daten

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Weitere Informationen