Multi-VM-LAMP-Stack auf Oracle Linux KVM erstellen

Einführung

Der Kern der Oracle Virtualization-Lösung ist der Oracle Linux KVM-Host. Zusätzlich zu diesem Hypervisor können Sie viele virtuelle Maschinen ausführen, auf denen jeweils eines der unterstützten Betriebssysteme ausgeführt wird, darunter Oracle Linux, RHEL, Windows, Ubuntu, Solaris und andere. Diese Virtualisierungslösung wird über den Oracle Linux Virtualization Manager verwaltet, der eine einzige Schnittstelle für die Organisation bietet. Neben der Verwaltung mehrerer Hosts/Multi-VMs ermöglicht Oracle Linux Virtualization Manager die wichtigsten Features der Oracle Virtualization-Lösung. Beispiel: Oracle Linux Virtualization Manager bietet automatische High Availability mit VM-Failover, Livemigration von VMs zwischen Hosts ohne Ausfallzeit, rollenbasierte Zugriffskontrolle und Auditlogging sowie vereinfachte Backup- und Disaster Recovery-Workflows. Diese Unternehmensfeatures verwandeln Oracle Linux KVM von einzelnen Hosts in eine echte Unternehmensvirtualisierungsplattform.

In diesem Tutorial werden wir die zentrale Hypervisor-Technologie untersuchen, die Oracle Virtualization unterstützt. Kernel-basierte virtuelle Maschine (KVM) ist ein Open-Source-Hypervisor vom Typ 1 (Bare-Metal). Mit dieser Funktion kann ein Hostsystem wie Oracle Linux mehrere virtuelle Maschinen (VMs) oder Gäste hosten, wenn es auf unterstützter Hardware ausgeführt wird.

In diesem Tutorial wird Oracle Linux KVM bereitgestellt, um virtuelle Maschinen zu erstellen, die mit LAMP-Stackanwendungen konfiguriert sind. So können Sie vollständige Webentwicklungsumgebungen mit Linux-, Apache-, MySQL- und PHP-Komponenten auf mehreren VMs hosten.

Wichtig: Die beiden Anwendungscodes in dieser Übung dienen nur zu Schulungszwecken. Sie wurden entwickelt, um Entwicklern beim Erlernen und Üben von Fähigkeiten zur Anwendungsentwicklung mit dem LAMP-Stack zu helfen. Diese Codes sind nicht für Produktionsumgebungen vorgesehen und sollten nicht unverändert in einer Live-Einstellung verwendet werden.

Ziele

Voraussetzungen

Jedes Oracle Linux-System mit einem Nicht-Root-Benutzer mit Sudo-Berechtigungen.

Schritt 1: Oracle Linux bereitstellen

Hinweis: Wenn Sie in Ihrem eigenen Mandanten ausgeführt werden, lesen Sie das Projekt linux-virt-labs GitHub README.md, und schließen Sie die Voraussetzungen ab, bevor Sie die Übungsumgebung bereitstellen.

  1. Öffnen Sie ein Terminal auf dem Luna Desktop.

  2. Klonen Sie das Projekt linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Wechseln Sie in das Arbeitsverzeichnis.

    cd linux-virt-labs/ol
    
  4. Installieren Sie die erforderlichen Sammlungen.

    ansible-galaxy collection install -r requirements.yml
    
  5. Bereitstellen der Übungsumgebung.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e instance_ocpus="4" -e instance_memory="64"
    

    Die kostenlose Übungsumgebung erfordert die zusätzliche Variable local_python_interpreter, die ansible_python_interpreter für Wiedergaben festlegt, die auf localhost ausgeführt werden. Diese Variable ist erforderlich, da die Umgebung das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python unter den python3.6-Modulen installiert.

    Die Standard-Deployment-Ausprägung verwendet AMD-CPU und Oracle Linux 8. Zur Verwendung einer Intel CPU fügen Sie -e instance_shape="VM.Standard3.Flex" hinzu

    Wichtig: Warten Sie, bis das Playbook erfolgreich ausgeführt wird, und erreichen Sie die Unterbrechungsaufgabe. In dieser Phase des Playbooks ist die Installation von Oracle Linux abgeschlossen, und die Instanzen sind bereit. Notieren Sie sich die vorherige Wiedergabe, in der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten und alle anderen Deployment-Informationen gedruckt werden, die während der Ausführung der Übung erforderlich sind.

Schritt 2: Validierung der Virtualisierung durch die Umgebung

  1. Öffnen Sie ein Terminal, und melden Sie sich mit SSH bei der Instanz ol-node-01 an.

    ssh opc@<ip_address_of_instance>
    
  2. Führen Sie den folgenden Befehl aus, um den CPU-Typ zu bestimmen.

    grep -e 'vendor_id' /proc/cpuinfo | uniq
    

    Die vendor_id meldet entweder AuthenticAMD für eine AMD-CPU oder GenuinIntel für eine Intel-CPU.

  3. Prüfen Sie, ob die Hardware die Virtualisierung unterstützt.

    Führen Sie den Befehl aus, der Ihrem CPU-Typ entspricht.

    1. Überprüfen Sie, ob AMD V CPU-Erweiterungen vorhanden sind.
    grep -w -o 'svm' /proc/cpuinfo | uniq
    
    1. Überprüfen Sie, ob die Intel VT CPU-Erweiterungen vorhanden sind.
    grep -w -o 'vmx' /proc/cpuinfo | uniq
    

    Das Vorhandensein eines dieser Flags in der Befehlsausgabe gibt an, dass dieses System die Virtualisierung unterstützt. Sie können auch den Befehl lscpu verwenden und den Eintrag Virtualization in der Ausgabe suchen.

  4. Prüfen Sie auf die geladenen KVM-Module.

    lsmod | grep kvm
    

    Die Ausgabe zeigt die KVM-Kernelmodule nach der Installation von Virtualisierungspackages und dem Starten des libvirtd-Service an. Auf Cloud-Systemen wie OCI werden diese Module automatisch geladen, wenn libvirtd gestartet wird, nicht während der Packageinstallation. Die Ladefolge ist: Pakete installieren → libvirtd Dienst starten → Module erscheinen in lsmod Ausgabe.

Schritt 3: KVM installieren und starten

  1. Prüfen Sie die ausgeführte Version von Oracle Linux.

    hostnamectl | grep 'Operating System'
    
  2. Installieren Sie die zugehörigen Softwarepackages für die Oracle Linux-Virtualisierung.

    Mit diesen Befehlen werden die Virtualisierungspackages installiert, die libvirt und andere Abhängigkeiten von Oracle Linux enthalten. Das libvirt-Package enthält eine Software-Library und eine API zur Verwaltung virtueller KVM-Maschinen und den libvirtd-Daemon, der im Hintergrund ausgeführt wird, um die eigentliche VM-Verwaltung zu verwalten.

    sudo dnf module install -y virt
    
  3. Installieren Sie virt-install, ein Tool zum Erstellen und Konfigurieren von virtuellen Maschinen (VMs) mit dem KVM-Hypervisor (Kernel-basierte virtuelle Maschine).

    sudo dnf install -y virt-install
    
  4. Stellen Sie sicher, dass der Hostrechner bereit ist, und richten Sie die Ausführung von libvirt-VMs ein.

    virt-host-validate
    

    Wenn alle Prüfungen erfolgreich sind, ist das System für die Erstellung von VMs vorbereitet. Wenn Prüfungen nicht erfolgreich sind, befolgen Sie die Anweisungen, um das Problem zu beheben. Wenn eine Prüfung den Wert WARN zurückgibt, befolgen Sie die Anweisungen, um die Virtualisierungsfunktionen zu verbessern.

  5. Starten Sie die Systemd-Services, damit sie bei jedem Booten automatisch gestartet werden.

    sudo systemctl enable --now libvirtd.service
    
  6. Prüfen Sie den Servicestatus, um zu bestätigen, dass sie hochgefahren und gestartet sind.

    sudo systemctl status libvirtd.service
    

    Theutput zeigt den Service als aktiviert an und wird ausgeführt. Geben Sie bei Bedarf den Buchstaben "q" ein, um den Ausgabemodus zu beenden.

Schritt 4: Zwei virtuelle Maschinen mit Oracle Cloud-Images erstellen

  1. Wechseln Sie zum Speicherort des KVM-Images.

    cd /var/lib/libvirt/images
    
  2. Laden Sie die Oracle Linux-VM-Vorlage herunter.

    sudo curl -O https://yum.oracle.com/templates/OracleLinux/OL8/u10/x86_64/OL8U10_x86_64-kvm-b237.qcow2
    

    VM-01 erstellen (Datenbank)

  3. Erstellen Sie eine Metadaten-Datei.

    cat << 'EOF' | sudo tee ~/meta-data > /dev/null
    instance-id: iid-local01
    local-hostname: vm-01
    EOF
    
  4. Erstellen Sie eine Benutzerdatendatei.

    cat << 'EOF' | sudo tee ~/user-data > /dev/null
    #cloud-config
    
    system_info:
      default_user:
        name: opc
    
    ssh_authorized_keys:
      - <paste_public_key_here>
    EOF
    
  5. Generieren Sie ein SSH-Schlüsselpaar für eine sichere Verbindung zur VM.

    ssh-keygen -t rsa -b 4096
    

    Drücken Sie Enter, um die Standardeinstellungen zu übernehmen. Der Befehl schreibt das Schlüsselpaar in das Verzeichnis .ssh im Home-Verzeichnis des Benutzers.

  6. Extrahieren Sie den generierten SSH-Public Key.
    SSHKEY=$(cat ~/.ssh/id_rsa.pub)
    
  7. Aktualisieren Sie die Benutzerdatendatei mit dem generierten öffentlichen SSH-Schlüssel.
    sed -i "s|<paste_public_key_here>|${SSHKEY}|g" ~/user-data
    
  8. Generieren Sie ein ISO-Abbild, das die Benutzer- und Metadatendateien enthält.
    sudo genisoimage -output /var/lib/libvirt/images/vm-01.iso -volid cidata -joliet -rock ~/user-data ~/meta-data
    
  9. Suchen Sie die Betriebssystemvariante, die mit dem heruntergeladenen Image übereinstimmt.
    osinfo-query os | grep ol8
    
  10. Kopieren Sie das Oracle Linux-Image in ein neues Datenträgerimage für vm-01.
    sudo cp /var/lib/libvirt/images/OL8U10_x86_64-kvm-b237.qcow2 /var/lib/libvirt/images/vm-01.qcow
    
  11. Erstellen Sie eine neue virtuelle Maschine namens vm-01 mit angegebenen Ressourcen und Konfigurationen.
    sudo virt-install --name vm-01 \
    --memory 2048 \
    --vcpus 2 \
    --disk /var/lib/libvirt/images/vm-01.qcow,device=disk,bus=virtio \
    --disk /var/lib/libvirt/images/vm-01.iso,device=cdrom \
    --os-type linux --os-variant ol8.10 \
    --virt-type kvm --graphics none \
    --network network=default,model=virtio \
    --noautoconsole \
    --import
    
  12. Listen Sie alle laufenden virtuellen Maschinen auf.
    sudo virsh list
    
  13. Rufen Sie die IP-Adresse der virtuellen Maschine vm-01 ab.

    sudo virsh net-dhcp-leases --network default
    
  14. Stellen Sie sicher, dass die virtuelle Maschine funktioniert, indem Sie eine Verbindung mit ssh herstellen.

    ssh opc@<ip_address_of_vm-01>
    
  15. Beenden Sie den vm-01-Server, um mit dem nächsten Schritt fortzufahren.

    exit
    

    Sie können die Version prüfen und zusätzliche Details zum BS in der virtuellen Maschine abrufen, indem Sie hostnamectl ausführen.

    VM-02 erstellen (Webserver)

  16. Erstellen Sie eine Metadatendatei für vm-02.

    cat << 'EOF' | sudo tee ~/meta-data > /dev/null
    instance-id: iid-local02
    local-hostname: vm-02
    EOF
    
  17. Generieren Sie ein ISO-Abbild für vm-02.
    sudo genisoimage -output /var/lib/libvirt/images/vm-02.iso -volid cidata -joliet -rock ~/user-data ~/meta-data
    
  18. Kopieren Sie das Oracle Linux-Image in ein neues Datenträgerimage für vm-02.
    sudo cp /var/lib/libvirt/images/OL8U10_x86_64-kvm-b237.qcow2 /var/lib/libvirt/images/vm-02.qcow
    
  19. Erstellen Sie eine neue virtuelle Maschine namens vm-02 mit angegebenen Ressourcen und Konfigurationen.
    sudo virt-install --name vm-02 \
    --memory 2048 \
    --vcpus 2 \
    --disk /var/lib/libvirt/images/vm-02.qcow,device=disk,bus=virtio \
    --disk /var/lib/libvirt/images/vm-02.iso,device=cdrom \
    --os-type linux --os-variant ol8.10 \
    --virt-type kvm --graphics none \
    --network network=default,model=virtio \
    --noautoconsole \
    --import
    
  20. Listen Sie alle laufenden virtuellen Maschinen auf.
    sudo virsh list
    
  21. Rufen Sie die IP-Adresse der virtuellen Maschine vm-02 ab.

    sudo virsh net-dhcp-leases --network default
    
  22. Stellen Sie sicher, dass die virtuelle Maschine funktioniert, indem Sie eine Verbindung mit ssh herstellen.

    ssh opc@<ip_address_of_vm-02>
    
  23. Beenden Sie den vm-01-Server, um mit dem nächsten Schritt fortzufahren.

    exit
    
  24. Sie können die Version prüfen und zusätzliche Details zum BS in der virtuellen Maschine abrufen, indem Sie hostnamectl ausführen.

    hostnamectl
    

    Beispielausgabe:

    [oracle@ol-node01 images]$ ssh opc@192.168.122.46
    The authenticity of host '[host]' can't be established.
    ECDSA key fingerprint is [fingerprint].
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '[IP]' (ECDSA) to the list of known hosts.
    
    [opc@vm-01 ~]$ hostnamectl
       Static hostname: vm-01
             Icon name: computer-vm
               Chassis: vm
            Machine ID: [MachineID]
               Boot ID: [BootID]
        Virtualization: kvm
      Operating System: Oracle Linux Server 8.10
           CPE OS Name: cpe:/o:oracle:linux:8:10:server
                Kernel: Linux 5.15.0-206.153.7.1.el8uek.x86_64
          Architecture: x86-64
    
  25. Extrahieren Sie die IP-Adresse von vm-01.
     VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  26. Extrahieren Sie die IP-Adresse von vm-02.
     VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  27. Speichern Sie die VM-IP-Adresse zur späteren Verwendung:
     echo "VM-01 (Web): $VM01_IP"
    
     echo "VM-02 (Web): $VM02_IP"
    
  28. Testen Sie den SSH-Befehl für die VMs.
     ssh -o ConnectTimeout=10 opc@$VM01_IP "echo 'VM-01 OK'"
    
     ssh -o ConnectTimeout=10 opc@$VM02_IP "echo 'VM-02 OK'"
    

Schritt 5: MySQL auf VM-01 einrichten

MySQL installieren

  1. Stellen Sie von der Instanz ol-node-01 SSH eine SSH-Verbindung zu VM-01 her.
     ssh opc@$VM01_IP
    
  2. Laden Sie die Repository-Konfiguration MySQL herunter.
     sudo yum -y install https://dev.mysql.com/get/mysql84-community-release-el8-1.noarch.rpm
    
  3. Deaktivieren Sie das Standardmodul MySQL, um Konflikte zu vermeiden.
     sudo yum -y module disable mysql
    
  4. Installieren Sie MySQL-Server und -Client.
     sudo yum install -y mysql mysql-server
    
  5. Starten Sie den MySQL-Service.
     sudo systemctl start mysqld
    
  6. Aktivieren Sie den MySQL-Service, um beim Booten zu starten.
     sudo systemctl enable mysqld
    
  7. Eingehenden MySQL-Traffic über die Firewall zulassen.
     sudo firewall-cmd --permanent --add-service=mysql
    
  8. Laden Sie die Firewallkonfiguration neu, um Änderungen anzuwenden.
     sudo firewall-cmd --reload
    

    MySQL konfigurieren

  9. Extrahieren Sie das temporäre Root-Kennwort aus dem MySQL-Log.
     TEMP_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
    
  10. Melden Sie sich mit dem temporären Root-Kennwort bei MySQL an.
     mysql -uroot -p$TEMP_PASS --connect-expired-password
    
  11. Ändern Sie das Root-Passwort in einen sicheren Wert.
     ALTER USER 'root'@'localhost' IDENTIFIED BY '[password]';
    
  12. Erstellen Sie einen Admin-Benutzer mit einem sicheren Passwort.
     CREATE USER 'admin'@'%' IDENTIFIED BY '[password]';
    
  13. Alle Berechtigungen für 'admin'-Benutzer erteilen.
     GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
    
  14. Erstellen Sie einen "empuser"-Benutzer mit einem sicheren Passwort.
     CREATE USER 'empuser'@'%' IDENTIFIED BY '[password]';
    
  15. Erteilen Sie "empuser" alle Berechtigungen.
     GRANT ALL PRIVILEGES ON *.* TO 'empuser'@'%' WITH GRANT OPTION;
    
  16. Laden Sie Berechtigungstabellen neu, um Änderungen anzuwenden.
     FLUSH PRIVILEGES;
    
  17. Beenden Sie die Shell MySQL.
     \q
    
  18. Beenden Sie die SSH-Session von VM-01.
     exit
    

Schritt 6: Apache/PHP auf VM-02 einrichten

  1. Stellen Sie von der Instanz ol-node-01 SSH eine SSH-Verbindung zu VM-02 her.
     ssh opc@$VM02_IP
    
  2. Apache HTTP-Server installieren
     sudo yum install -y httpd
    
  3. Installieren Sie PHP 8.2 und seine Abhängigkeiten.
     sudo dnf install -y @php:8.2
    
  4. Installieren Sie die PHP-Erweiterungen MySQL und JSON.
     sudo yum install -y php-mysqlnd php-json
    
  5. Apache HTTP-Server aktivieren und starten
     sudo systemctl enable --now httpd
    
  6. Eingehenden HTTP-Traffic auf Port 80 zulassen.
     sudo firewall-cmd --permanent --add-port=80/tcp
    
  7. Laden Sie die Firewallkonfiguration neu, um Änderungen anzuwenden.
     sudo firewall-cmd --reload
    
  8. Ermöglichen Sie Apache die Verbindung mit Netzwerkressourcen.
     sudo setsebool -P httpd_can_network_connect 1
    
  9. Beenden Sie die SSH-Session von VM-02.
     exit
    

Schritt 7: Apache testen

  1. Zeigen Sie die öffentliche IP-Adresse von VM-02 YOUR_VM_02_PUBLIC_IP an:
     echo "VM-02 (Web): $VM02_IP"
    
  2. Öffnen Sie eine neue Terminal-Luna- oder On-Premise-Umgebung, und erstellen Sie einen SSH-Tunnel, um vom lokalen Rechner auf den VM-02-Webserver zuzugreifen.

    … ersetzen Sie zuerst **** und ****

     ssh -L 8081:<YOUR_VM_02_PUBLIC_IP>:80 opc@<YOUR_OCI_PUBLIC_IP>
    
  3. Verwenden Sie einen Browser von Luna oder On-Premise-Umgebung, um Apache zu testen, indem Sie über den SSH-Tunnel auf den Webserver zugreifen.
     http://localhost:8081
    

    Wichtig: Lassen Sie den SSH-Tunnel und -Browser zur späteren Verwendung geöffnet

Schritt 8: Testanwendung erstellen


  1. Kehren Sie zur SSH-Instanz opc@ol-node-01 zurück.

  2. Rufen Sie die IP-Adresse von VM-01 aus DHCP-Leasings ab.
     VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  3. Rufen Sie die IP-Adresse von VM-02 aus DHCP-Leasings ab.
     VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  4. Stellen Sie von der Instanz ol-node-01 SSH eine SSH-Verbindung zu VM-02 her.
     ssh opc@$VM02_IP
    
  5. Erstellen Sie eine PHP-Infoseite, um die PHP-Konfiguration anzuzeigen.
     sudo tee /var/www/html/info.php > /dev/null << 'EOF'
     <?php phpinfo(); ?>
     EOF
    
  6. Erstellen Sie eine Testanwendung für die Datenbankverbindung.

     sudo tee /var/www/html/dbtest.php > /dev/null << 'EOF'
     <?php
     echo "<h1>Multi-VM LAMP Stack Test</h1>";
    
     // Database connection details
     define('DB_SERVER', '$VM01_IP');
     define('DB_USERNAME', 'admin');
     define('DB_PASSWORD', '[password]');
     define('DB_NAME', 'mysql');
    
     echo "<p>Testing connection to MySQL at: " . DB_SERVER . "</p>";
    
     // Test network connectivity
     $fp = @fsockopen(DB_SERVER, 3306, $errno, $errstr, 5);
     if (!$fp) {
         echo "<p style='color: red;'>ERROR: Cannot reach MySQL server</p>";
         echo "<p>Error: $errstr ($errno)</p>";
     } else {
         echo "<p style='color: green;'>✓ Network connection successful</p>";
         fclose($fp);
            
         // Test MySQL connection
         $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
         if($link === false){
             echo "<p style='color: red;'>ERROR: Could not connect to MySQL</p>";
             echo "<p>Error: " . mysqli_connect_error() . "</p>";
         } else {
             echo "<p style='color: green;'>✓ Successfully Connected to MySQL!</p>";
             echo "<p>MySQL Version: " . mysqli_get_server_info($link) . "</p>";
             echo "<p>Host Info: " . mysqli_get_host_info($link) . "</p>";
             mysqli_close($link);
         }
     }
     ?>
     EOF
    
  7. Legen Sie Berechtigungen für Anwendungsdateien fest.
     sudo chown apache:apache /var/www/html/*.php
    
  8. Aktualisieren Sie die Zeile define('DB_SERVER', '$VM01_IP');, indem Sie den Wert für $VM01_IP mit dem gespeicherten IP-Adresswert ändern.
     sudo vi /var/www/html/dbtest.php
    

    Beispielausgabe:

    "``text … Code before define('DB_SERVER', '192.168.122.???'); … Code after

  9. Beenden Sie VM-02.

     exit
    

Schritt 9: Auf Webserver- und Datenbanktestanwendung zugreifen


  1. Wenn der SSH-Tunnel geschlossen ist, erstellen Sie ihn für den Basistest.
     ssh -L 8081:$VM02_IP:80 opc@<YOUR_OCI_PUBLIC_IP>
    
  2. Basis-LAMP-Test Durchsuchen Sie nach:
     http://localhost:8081/info.php
    
  3. Grundlegende Datenbank-Test-Demo Navigieren Sie zu:
    http://localhost:8081/dbtest.php
    

Erwartete Ergebnisse:

Basistest: Grün Meldung "Erfolgreich verbunden mit MySQL!"


Schritt 10: Mitarbeiterdatenbank erstellen und laden

  1. Sie sollten sich in der SSH-Instanz opc@ol-node-01 befinden.

  2. Rufen Sie die IP-Adresse von VM-01 aus DHCP-Leasings ab.
     VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  3. Rufen Sie die IP-Adresse von VM-02 aus DHCP-Leasings ab.
     VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  4. Stellen Sie in der SSH-Instanz opc@ol-node-01 eine SSH-Verbindung zu VM-01 her.
     ssh opc@$VM01_IP
    
  5. Wechseln Sie in den Ordner /tmp.
     cd /tmp
    
  6. Laden Sie die Beispieldatenbank für Mitarbeiter MySQL herunter.
     curl -L -o master.zip https://github.com/datacharmer/test_db/zipball/master/
    
  7. Installieren Sie Komprimierungswerkzeuge.
     sudo dnf install -y unzip
    
  8. Exportieren Sie die Datenbank.
     sudo unzip master.zip
    
     sudo mv datacharmer-test_db-* employees_db
    
     cd employees_db
    
  9. Datenbank laden.
     mysql -u admin -p[password] < employees.sql
    
  10. Prüfen Sie, ob die Datenbank geladen wurde.
     mysql -u admin -p[password] -e "USE employees; SHOW TABLES; SELECT COUNT(*) FROM employees;"
    
  11. Datenbank-VM beenden.
     exit
    

Schritt 11: Webanwendung für Mitarbeiterdatenbank erstellen

  1. Stellen Sie in der SSH-Instanz ol-node-01 eine SSH-Verbindung zu VM-02 her.
     ssh opc@$VM02_IP
    
  2. Anwendung für professionelle Mitarbeiterdatenbanken erstellen
     sudo tee /var/www/html/employees.php > /dev/null << 'EOF'
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <title>Employee Database - Multi-VM LAMP Demo</title>
         <style>
             body { 
                 font-family: Arial, sans-serif; 
                 max-width: 1200px; 
                 margin: 0 auto; 
                 padding: 20px;
                 background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
             }
             .header { 
                 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                 color: white; 
                 text-align: center; 
                 padding: 30px;
                 border-radius: 15px;
                 margin-bottom: 20px;
                 box-shadow: 0 8px 16px rgba(0,0,0,0.1);
             }
             .info-box { 
                 background: rgba(255,255,255,0.9);
                 padding: 25px; 
                 border-radius: 12px;
                 box-shadow: 0 4px 8px rgba(0,0,0,0.1);
                 margin-bottom: 20px;
                 backdrop-filter: blur(10px);
             }
             .success { color: #28a745; font-weight: bold; }
             .error { color: #dc3545; font-weight: bold; }
             table { 
                 width: 100%; 
                 border-collapse: collapse; 
                 margin: 20px 0;
                 background: rgba(255,255,255,0.9);
                 border-radius: 12px;
                 overflow: hidden;
                 box-shadow: 0 4px 8px rgba(0,0,0,0.1);
             }
             th, td { 
                 padding: 15px; 
                 text-align: left; 
                 border-bottom: 1px solid #ddd;
             }
             th { 
                 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                 color: white;
                 font-weight: bold;
             }
             tr:hover { background-color: rgba(102, 126, 234, 0.1); }
             .stats { 
                 display: grid; 
                 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); 
                 gap: 20px; 
                 margin: 20px 0; 
             }
             .stat-card { 
                 background: white; 
                 padding: 20px; 
                 border-radius: 10px; 
                 text-align: center; 
                 box-shadow: 0 4px 8px rgba(0,0,0,0.1);
             }
             .stat-number { font-size: 2em; font-weight: bold; color: #667eea; }
         </style>
     </head>
     <body>
         <div class="header">
             <h1>🏢 Employee Database Demo</h1>
             <p>MySQL Employee Sample Database on Multi-VM Architecture</p>
         </div>
    
         <?php
         // Database connection details
         define('DB_SERVER', '$VM01_IP');
         define('DB_USERNAME', 'empuser');
         define('DB_PASSWORD', '[password]');
         define('DB_NAME', 'employees');
    
         try {
             // Connect to MySQL database on separate VM
             $pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
             $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                
             echo '<div class="info-box success">';
             echo '<h2>✅ Connected to Employee Database</h2>';
             echo '<p><strong>Database Server:</strong> ' . DB_SERVER . ' (vm-01)</p>';
             echo '<p><strong>Web Server:</strong> ' . gethostname() . ' (vm-02)</p>';
             echo '</div>';
                
             // Get database statistics
             $stats = [];
                
             $stmt = $pdo->query("SELECT COUNT(*) as count FROM employees");
             $stats['employees'] = $stmt->fetch()['count'];
                
             $stmt = $pdo->query("SELECT COUNT(*) as count FROM departments");
             $stats['departments'] = $stmt->fetch()['count'];
                
             $stmt = $pdo->query("SELECT COUNT(*) as count FROM salaries");
             $stats['salaries'] = $stmt->fetch()['count'];
                
             $stmt = $pdo->query("SELECT COUNT(*) as count FROM titles");
             $stats['titles'] = $stmt->fetch()['count'];
                
             echo '<div class="info-box">';
             echo '<h2>📊 Database Statistics</h2>';
             echo '<div class="stats">';
             echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['employees']) . '</div><div>Employees</div></div>';
             echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['departments']) . '</div><div>Departments</div></div>';
             echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['salaries']) . '</div><div>Salary Records</div></div>';
             echo '<div class="stat-card"><div class="stat-number">' . number_format($stats['titles']) . '</div><div>Job Titles</div></div>';
             echo '</div>';
             echo '</div>';
                
             // Show recent employees
             echo '<div class="info-box">';
             echo '<h2>👥 Sample Employee Data</h2>';
             $stmt = $pdo->query("SELECT emp_no, first_name, last_name, gender, hire_date FROM employees ORDER BY hire_date DESC LIMIT 20");
             $employees = $stmt->fetchAll();
                
             echo '<table>';
             echo '<thead><tr><th>Employee #</th><th>First Name</th><th>Last Name</th><th>Gender</th><th>Hire Date</th></tr></thead>';
             echo '<tbody>';
                
             foreach ($employees as $emp) {
                 echo '<tr>';
                 echo '<td>' . htmlspecialchars($emp['emp_no']) . '</td>';
                 echo '<td>' . htmlspecialchars($emp['first_name']) . '</td>';
                 echo '<td>' . htmlspecialchars($emp['last_name']) . '</td>';
                 echo '<td>' . htmlspecialchars($emp['gender']) . '</td>';
                 echo '<td>' . htmlspecialchars($emp['hire_date']) . '</td>';
                 echo '</tr>';
             }
             echo '</tbody></table>';
             echo '</div>';
                
             // Show departments
             echo '<div class="info-box">';
             echo '<h2>🏬 Departments</h2>';
             $stmt = $pdo->query("SELECT dept_no, dept_name FROM departments ORDER BY dept_name");
             $departments = $stmt->fetchAll();
                
             echo '<table>';
             echo '<thead><tr><th>Department Code</th><th>Department Name</th></tr></thead>';
             echo '<tbody>';
                
             foreach ($departments as $dept) {
                 echo '<tr>';
                 echo '<td>' . htmlspecialchars($dept['dept_no']) . '</td>';
                 echo '<td>' . htmlspecialchars($dept['dept_name']) . '</td>';
                 echo '</tr>';
             }
             echo '</tbody></table>';
             echo '</div>';
                
         } catch (PDOException $e) {
             echo '<div class="info-box error">';
             echo '<h2>❌ Database Connection Error</h2>';
             echo '<p>Error: ' . htmlspecialchars($e->getMessage()) . '</p>';
             echo '</div>';
         }
         ?>
    
         <div class="info-box">
             <h2>🏗️ Multi-VM Architecture</h2>
             <p><strong>Database VM (vm-01):</strong> MySQL Server with Employee Database</p>
             <p><strong>Web VM (vm-02):</strong> Apache + PHP Web Application</p>
             <p><strong>Data Source:</strong> MySQL Sample Employee Database</p>
             <p><strong>Records:</strong> 300,000+ employees, 400,000+ salary records</p>
         </div>
     </body>
     </html>
     EOF
    
  3. Legen Sie korrekte Berechtigungen fest.
     sudo chown apache:apache /var/www/html/employees.php
    
  4. Aktualisieren Sie die Zeile define('DB_SERVER', '$VM01_IP');, indem Sie den Wert für $VM01_IP mit dem gespeicherten IP-Adresswert ändern.
     sudo vi /var/www/html/employees.php
    

    Beispielausgabe:

    "``text … Code before define('DB_SERVER', '192.168.122.???'); … Code after

  5. Webserver-VM beenden.
     exit
    

Schritt 12: Auf Mitarbeiteranwendung zugreifen

  1. Wenn der SSH-Tunnel geschlossen ist, erstellen Sie ihn für den Basistest.
     ssh -L 8081:$VM02_IP:80 opc@<YOUR_OCI_PUBLIC_IP>
    
  2. Demo zur Mitarbeiterdatenbank durchsuchen:
     http://localhost:8081/employees.php
    

Erwartete Ergebnisse:


Verfügbare Anwendungen:

🔧 Grundlegender LAMP-Test (http://localhost:8081/dbtest.php)

🏢 Demo zur Mitarbeiterdatenbank (http://localhost:8081/employees.php)


Wichtige Verwaltungsbefehle

VM-Management

  1. Listen Sie ausgeführte VMs und ihren Status auf.
     sudo virsh list
    
  2. Starten Sie VM-01.
     sudo virsh start vm-01
    
  3. Fahren Sie VM-01 herunter.
     sudo virsh shutdown vm-01
    
  4. Zeigen Sie DHCP-Leases für VMs im Standardnetzwerk an.
     sudo virsh net-dhcp-leases --network default
    

Setup für die Ausführung dieser Übung auf Oracle Cloud Infrastructure

  1. Virtuelles Cloud-Netzwerksetup: ``Navigieren: Networking → Virtuelle Cloud-Netzwerke → VCN-Assistenten starten
    • Name: ol-vcn-01
    • VCN-Navigation erstellen: Networking → Virtuelle Cloud-Netzwerke → kvm-network → Sicherheitslisten Fügen Sie die folgenden Ingress-Regeln hinzu:
    • SSH: Quelle 0.0.0.0/0, TCP-Port 22
    • HTTP: Quelle 0.0.0.0/0, TCP-Port 80 ``
  2. Compute-Instanzsetup:
         Navigation: Hamburger Menu → Compute → Instances → Create Instance
    
         Configuration:
         - Name: ol-node-01
         - Image: Oracle Linux 8 (Latest)
         - Shape: VM.Standard.E4.Flex (4 OCPUs, 16GB RAM)
         - Boot Volume: 100 GB
         - VCN: ol-vcn-01 
         - Subnet: Public subnet ol-vcn-01
         - Assign Public IP: Yes
         - Add SSH Key: Upload your public key
    
  3. Compute-Public IP mit SSH testen.
     ssh opc@<ol-vcn-01_PUBLIC_IP>
    
  4. Fahren Sie mit Schritt 2 fort: Validierung der Virtualisierung durch die Umgebung.

Nächste Schritte

Erfahren Sie, wie Sie Hosts und VMS mit Oracle Linux Virtual Manager (OLVM) verwalten

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.