Hinweis:

Multi-VM-LAMP-Stack auf Oracle Virtualization 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 den folgenden Konfigurationen:

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 aus 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 neues Terminal vom Luna Desktop und verbinden Sie sich über SSH mit der Instanz ol-node-01.

    ssh opc@<YOUR ol-node-01 PUBLIC_IP>
    
  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 - 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 ihn so ein, dass libvirt-VMs ausgeführt werden.

    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
    

    Die Ausgabe zeigt an, dass der Service aktiviert ist und ausgeführt wird. 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. SSH-Schlüsselpaar für sichere Verbindung zur VM generieren

    ssh-keygen -t rsa -b 4096
    

    Drücken Sie Enter, um die Standardwerte 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. ISO-Abbild mit den Benutzerdaten und Metadatendateien generieren
    sudo genisoimage -output /var/lib/libvirt/images/vm-01.iso -volid cidata -joliet -rock ~/user-data ~/meta-data
    
  9. Finden Sie die Betriebssystemvariante, die mit dem heruntergeladenen Image übereinstimmt
    osinfo-query os | grep ol8
    
  10. Oracle Linux-Image in ein neues Datenträgerimage für vm-01 kopieren
    sudo cp /var/lib/libvirt/images/OL8U10_x86_64-kvm-b237.qcow2 /var/lib/libvirt/images/vm-01.qcow
    
  11. Neue virtuelle Maschine mit dem Namen vm-01 mit angegebenen Ressourcen und Konfiguration erstellen
    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. Alle ausgeführten virtuellen Maschinen auflisten
    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. Rufen Sie Details zur virtuellen Maschine ab, indem Sie hostnamectl ausführen.

    hostnamectl
    
  16. 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)

  17. Metadatendatei für vm-02 erstellen

    cat << 'EOF' | sudo tee ~/meta-data > /dev/null
    instance-id: iid-local02
    local-hostname: vm-02
    EOF
    
  18. ISO-Abbild für vm-02 generieren
    sudo genisoimage -output /var/lib/libvirt/images/vm-02.iso -volid cidata -joliet -rock ~/user-data ~/meta-data
    
  19. Oracle Linux-Image in ein neues Datenträgerimage für vm-02 kopieren
    sudo cp /var/lib/libvirt/images/OL8U10_x86_64-kvm-b237.qcow2 /var/lib/libvirt/images/vm-02.qcow
    
  20. Neue virtuelle Maschine namens vm-02 mit angegebenen Ressourcen und Konfiguration erstellen
    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
    
  21. Alle ausgeführten virtuellen Maschinen auflisten
    sudo virsh list
    
  22. Rufen Sie die IP-Adresse der virtuellen Maschine vm-02 ab.

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

    ssh opc@<ip_address_of_vm-02>
    
  24. Rufen Sie Details zur virtuellen Maschine ab, indem Sie hostnamectl ausführen.

    hostnamectl
    
  25. Beenden Sie den vm-02-Server, um mit dem nächsten Schritt fortzufahren

    exit
    
  26. 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 '192.168.122.46 (192.168.122.46)' can't be established.
    ECDSA key fingerprint is SHA256:xcuVfQdoFDCC72i7plD0OfqDTSBG6QWhOm5ti4HIKEs.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '192.168.122.46' (ECDSA) to the list of known hosts.
    
    [opc@vm-01 ~]$ hostnamectl
       Static hostname: vm-01
             Icon name: computer-vm
               Chassis: vm
            Machine ID: 30c9345b511448b681aafb3371de9792
               Boot ID: c2d5586b094f4d299a4ba6c05086d004
        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
    
  27. Extrahieren Sie die IP-Adresse von vm-01, und speichern Sie sie in der Variablen VM01_IP
     VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  28. Extrahieren Sie die IP-Adresse von vm-02, und speichern Sie sie in der Variablen VM02_IP
     VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  29. Stellen Sie sicher, dass die VMs-IP-Adresse ordnungsgemäß gespeichert ist:
     echo "VM-01 (Web): $VM01_IP"
    
     echo "VM-02 (Web): $VM02_IP"
    
  30. SSH-Befehl für die VMs testen
     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. SSH stellt von der ol-node-01-Instanz eine SSH-Verbindung zu VM-01 her
     ssh opc@$VM01_IP
    
  2. Repository-Konfiguration MySQL herunterladen
     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. MySQL-Server und -Client installieren
     sudo yum install -y mysql mysql-server
    
  5. Service MySQL starten
     sudo systemctl start mysqld
    
  6. MySQL-Service beim Booten aktivieren
     sudo systemctl enable mysqld
    
  7. Eingehenden MySQL-Traffic über die Firewall zulassen
     sudo firewall-cmd --permanent --add-service=mysql
    
  8. Firewallkonfiguration neu laden, um Änderungen anzuwenden
     sudo firewall-cmd --reload
    

    MySQL konfigurieren

  9. Temporäres Root-Kennwort aus MySQL-Log extrahieren
     TEMP_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
    
  10. Melden Sie sich bei MySQL mit temporärem Root-Kennwort 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 'Welcome#123';
    
  12. "admin"-Benutzer mit sicherem Kennwort erstellen
     CREATE USER 'admin'@'%' IDENTIFIED BY 'Welcome#123';
    
  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 'Welcome#123';
    
  15. 'empuser' alle Berechtigungen erteilen
     GRANT ALL PRIVILEGES ON *.* TO 'empuser'@'%' WITH GRANT OPTION;
    
  16. Privilegtabellen neu laden, um Änderungen anzuwenden
     FLUSH PRIVILEGES;
    
  17. MySQL-Shell beenden
     \q
    
  18. SSH-Session von VM-01 beenden
     exit
    

Schritt 6: Apache/PHP auf VM-02 einrichten

  1. SSH stellt von der ol-node-01-Instanz 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. PHP-Erweiterungen MySQL und JSON installieren
     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. Firewallkonfiguration neu laden, um Änderungen anzuwenden
     sudo firewall-cmd --reload
    
  8. Verbindung von Apache mit Netzwerkressourcen zulassen
     sudo setsebool -P httpd_can_network_connect 1
    
  9. SSH-Session von VM-02 beenden
     exit
    

Schritt 7: Apache testen

  1. IP-Adresse von VM-02 IHRER VM_02 IP anzeigen:
     echo "VM-02 (Web): $VM02_IP"
    
  2. Öffnen Sie ein neues Terminal auf dem Luna Desktop, 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 IP>:80 opc@<YOUR ol-node-01 PUBLIC_IP>
    
  3. Verwenden Sie einen Browser von Luna oder einer 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. Zur SSH-Instanz opc@ol-node-01 zurückkehren

  2. IP-Adresse von VM-01 aus DHCP-Leasings abrufen
     VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  3. IP-Adresse von VM-02 aus DHCP-Leasings abrufen
     VM02_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-02 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  4. SSH stellt von der ol-node-01-Instanz 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. Testanwendung für Datenbankverbindung erstellen

     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', 'Welcome#123');
     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. Berechtigungen für Anwendungsdatei festlegen
     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 Wert für die IP-Adresse vm-01 ändern
     sudo vi /var/www/html/dbtest.php
    

    Beispielausgabe:

    ``Text … Code before define('DB_SERVER', '$VM01_IP'); … Code after definition('DB_SERVER', '192.168.122.???');

  9. VM-02 beenden

     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 ol-node-01 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:

Schritt 10: Mitarbeiterdatenbank erstellen und laden

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

  2. IP-Adresse von VM-01 aus DHCP-Leasings abrufen
     VM01_IP=$(sudo virsh net-dhcp-leases --network default | grep vm-01 | tail -1 | awk '{print $5}' | cut -d'/' -f1)
    
  3. IP-Adresse von VM-02 aus DHCP-Leasings abrufen
     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 SSH-Instanz opc@ol-node-01 eine SSH-Verbindung zu VM-01 her.
     ssh opc@$VM01_IP
    
  5. In /tmp-Ordner wechseln
     cd /tmp
    
  6. MySQL Mitarbeiterbeispieldatenbank herunterladen
     sudo curl -L -o employees_db_full.zip "https://objectstorage.us-ashburn-1.oraclecloud.com/p/5UYZYk1vh241OqeHp_J0xnzBpzUOxZtTgaqCH16OP7HpOjC71W207gAY9EY1rW2U/n/idazzjlcjqzj/b/mysql-ee-downloads/o/employees_db_full.zip"
    
  7. Komprimierungswerkzeuge installieren
     sudo dnf install -y unzip
    
  8. Datenbank extrahieren
     sudo unzip employees_db_full.zip
    
     cd employees_db_full
    
  9. Datenbank laden
     mysql -u admin -pWelcome#123 < employee.sql
    
  10. Datenbank laden
     mysql -u admin -pWelcome#123 -e "USE employee; SHOW TABLES; SELECT COUNT(*) FROM employee;"
    
  11. Datenbank-VM beenden
     exit
    

Schritt 11: Webanwendung für Mitarbeiterdatenbank erstellen

  1. SSH stellt von der ol-node-01-Instanz eine SSH-Verbindung zu VM-02 her
     ssh opc@$VM02_IP
    
  2. Professionelle Mitarbeiterdatenbankanwendung erstellen
     sudo tee /var/www/html/employee.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', 'Welcome#123');
         define('DB_NAME', 'employee');
    
         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 employee");
             $stats['employee'] = $stmt->fetch()['count'];
                
             $stmt = $pdo->query("SELECT COUNT(*) as count FROM department");
             $stats['departments'] = $stmt->fetch()['count'];
                
             $stmt = $pdo->query("SELECT COUNT(*) as count FROM salary");
             $stats['salaries'] = $stmt->fetch()['count'];
                
             $stmt = $pdo->query("SELECT COUNT(*) as count FROM title");
             $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['employee']) . '</div><div>Employee</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 employee
             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 employee ORDER BY hire_date DESC LIMIT 20");
             $employee = $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 ($employee 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 department 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+ employee, 400,000+ salary records</p>
         </div>
     </body>
     </html>
     EOF
    
  3. Legen Sie korrekte Berechtigungen fest
     sudo chown apache:apache /var/www/html/employee.php
    
  4. Zeile define('DB_SERVER', '$VM01_IP'); aktualisieren, indem der Wert für $VM01_IP mit dem gespeicherten IP-Adresswert geändert wird
     sudo vi /var/www/html/employee.php
    

    Beispielausgabe:

    ``Text … Code before define('DB_SERVER', '$VM01_IP'); … Code after definition('DB_SERVER', '192.168.122.???');

  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 ol-node-01 PUBLIC_IP>
    
  2. Demo zur Mitarbeiterdatenbank durchsuchen:
     http://localhost:8081/employee.php
    

Erwartete Ergebnisse:


Verfügbare Anwendungen:

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

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


Wichtige Verwaltungsbefehle

VM-Management

  1. Liste der ausgeführten VMs und deren Status
     sudo virsh list
    
  2. VM-01 starten
     sudo virsh start vm-01
    
  3. VM-01 herunterfahren
     sudo virsh shutdown vm-01
    
  4. DHCP-Leasings für VMs im Standardnetzwerk anzeigen
     sudo virsh net-dhcp-leases --network default
    

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

  1. Setup virtuelles Cloud-Netzwerk ``` 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: Validierung der Virtualisierung durch Umgebungsunterstützung fort.

Nächste Schritte

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

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.