Hinweis:
- Dieses Tutorial ist in einer von Oracle bereitgestellten kostenlosen Übungsumgebung verfügbar.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. In der Übung ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
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
- OCI-, Luna- oder On-Premise-Server einrichten
- Oracle Linux KVM bereitstellen
- Virtuelle Maschine mit Oracle Cloud-Images erstellen
- MySQL-Server installieren
- Webserver mit Apache und PHP installieren
Voraussetzungen
Jedes Oracle Linux-System mit den folgenden Konfigurationen:
- ein 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.
-
Öffnen Sie ein Terminal aus dem Luna Desktop.
-
Klonen Sie das Projekt
linux-virt-labsGitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git -
Wechseln Sie in das Arbeitsverzeichnis.
cd linux-virt-labs/ol -
Installieren Sie die erforderlichen Sammlungen.
ansible-galaxy collection install -r requirements.yml -
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, dieansible_python_interpreterfü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"hinzuWichtig: 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
-
Ö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> -
Führen Sie den folgenden Befehl aus, um den CPU-Typ zu bestimmen.
grep -e 'vendor_id' /proc/cpuinfo | uniqDie
vendor_idmeldet entwederAuthenticAMDfür eine AMD-CPU oderGenuinIntelfür eine Intel-CPU. -
Prüfen Sie, ob die Hardware die Virtualisierung unterstützt.
Führen Sie den Befehl aus, der Ihrem CPU-Typ entspricht.
- Überprüfen Sie, ob AMD V CPU-Erweiterungen vorhanden sind.
grep -w -o 'svm' /proc/cpuinfo | uniq- Überprüfen Sie, ob die Intel VT CPU-Erweiterungen vorhanden sind.
grep -w -o 'vmx' /proc/cpuinfo | uniqDas Vorhandensein eines dieser Flags in der Befehlsausgabe gibt an, dass dieses System die Virtualisierung unterstützt. Sie können auch den Befehl
lscpuverwenden und den EintragVirtualizationin der Ausgabe suchen. -
Prüfen Sie auf die geladenen KVM-Module.
lsmod | grep kvmDie 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
-
Prüfen Sie die ausgeführte Version von Oracle Linux.
hostnamectl | grep 'Operating System' -
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 -
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 -
Stellen Sie sicher, dass der Hostrechner bereit ist, und richten Sie ihn so ein, dass libvirt-VMs ausgeführt werden.
virt-host-validateWenn 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
WARNzurückgibt, befolgen Sie die Anweisungen, um die Virtualisierungsfunktionen zu verbessern. -
Starten Sie die Systemd-Services, damit sie bei jedem Booten automatisch gestartet werden.
sudo systemctl enable --now libvirtd.service -
Prüfen Sie den Servicestatus, um zu bestätigen, dass sie hochgefahren und gestartet sind.
sudo systemctl status libvirtd.serviceDie 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
-
Wechseln Sie zum Speicherort des KVM-Images.
cd /var/lib/libvirt/images -
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.qcow2VM-01 erstellen (Datenbank)
-
Erstellen Sie eine Metadaten-Datei.
cat << 'EOF' | sudo tee ~/meta-data > /dev/null instance-id: iid-local01 local-hostname: vm-01 EOF -
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 -
SSH-Schlüsselpaar für sichere Verbindung zur VM generieren
ssh-keygen -t rsa -b 4096Drücken Sie
Enter, um die Standardwerte zu übernehmen. Der Befehl schreibt das Schlüsselpaar in das Verzeichnis.sshim Home-Verzeichnis des Benutzers. - Extrahieren Sie den generierten SSH-Public Key
SSHKEY=$(cat ~/.ssh/id_rsa.pub) - Aktualisieren Sie die Benutzerdatendatei mit dem generierten öffentlichen SSH-Schlüssel
sed -i "s|<paste_public_key_here>|${SSHKEY}|g" ~/user-data - 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 - Finden Sie die Betriebssystemvariante, die mit dem heruntergeladenen Image übereinstimmt
osinfo-query os | grep ol8 - 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 - 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 - Alle ausgeführten virtuellen Maschinen auflisten
sudo virsh list -
Rufen Sie die IP-Adresse der virtuellen Maschine
vm-01ab.sudo virsh net-dhcp-leases --network default -
Stellen Sie sicher, dass die virtuelle Maschine funktioniert, indem Sie eine Verbindung mit
sshherstellen.ssh opc@<ip_address_of_vm-01> -
Rufen Sie Details zur virtuellen Maschine ab, indem Sie
hostnamectlausführen.hostnamectl -
Beenden Sie den vm-01-Server, um mit dem nächsten Schritt fortzufahren
exitSie können die Version prüfen und zusätzliche Details zum BS in der virtuellen Maschine abrufen, indem Sie
hostnamectlausführen.VM-02 erstellen (Webserver)
-
Metadatendatei für vm-02 erstellen
cat << 'EOF' | sudo tee ~/meta-data > /dev/null instance-id: iid-local02 local-hostname: vm-02 EOF - 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 - 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 - 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 - Alle ausgeführten virtuellen Maschinen auflisten
sudo virsh list -
Rufen Sie die IP-Adresse der virtuellen Maschine
vm-02ab.sudo virsh net-dhcp-leases --network default -
Stellen Sie sicher, dass die virtuelle Maschine funktioniert, indem Sie eine Verbindung mit
sshherstellen.ssh opc@<ip_address_of_vm-02> -
Rufen Sie Details zur virtuellen Maschine ab, indem Sie
hostnamectlausführen.hostnamectl -
Beenden Sie den vm-02-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
hostnamectlausführen.hostnamectlBeispielausgabe:
[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 - 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) - 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) - Stellen Sie sicher, dass die VMs-IP-Adresse ordnungsgemäß gespeichert ist:
echo "VM-01 (Web): $VM01_IP"echo "VM-02 (Web): $VM02_IP" - 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
- SSH stellt von der ol-node-01-Instanz eine SSH-Verbindung zu VM-01 her
ssh opc@$VM01_IP - Repository-Konfiguration MySQL herunterladen
sudo yum -y install https://dev.mysql.com/get/mysql84-community-release-el8-1.noarch.rpm - Deaktivieren Sie das Standardmodul MySQL, um Konflikte zu vermeiden
sudo yum -y module disable mysql - MySQL-Server und -Client installieren
sudo yum install -y mysql mysql-server - Service MySQL starten
sudo systemctl start mysqld - MySQL-Service beim Booten aktivieren
sudo systemctl enable mysqld - Eingehenden MySQL-Traffic über die Firewall zulassen
sudo firewall-cmd --permanent --add-service=mysql - Firewallkonfiguration neu laden, um Änderungen anzuwenden
sudo firewall-cmd --reloadMySQL konfigurieren
- Temporäres Root-Kennwort aus MySQL-Log extrahieren
TEMP_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}') - Melden Sie sich bei MySQL mit temporärem Root-Kennwort an
mysql -uroot -p$TEMP_PASS --connect-expired-password - Ändern Sie das Root-Passwort in einen sicheren Wert
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Welcome#123'; - "admin"-Benutzer mit sicherem Kennwort erstellen
CREATE USER 'admin'@'%' IDENTIFIED BY 'Welcome#123'; - Alle Berechtigungen für 'admin'-Benutzer erteilen
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; - Erstellen Sie einen 'empuser'-Benutzer mit einem sicheren Passwort
CREATE USER 'empuser'@'%' IDENTIFIED BY 'Welcome#123'; - 'empuser' alle Berechtigungen erteilen
GRANT ALL PRIVILEGES ON *.* TO 'empuser'@'%' WITH GRANT OPTION; - Privilegtabellen neu laden, um Änderungen anzuwenden
FLUSH PRIVILEGES; - MySQL-Shell beenden
\q - SSH-Session von VM-01 beenden
exit
Schritt 6: Apache/PHP auf VM-02 einrichten
- SSH stellt von der ol-node-01-Instanz eine SSH-Verbindung zu VM-02 her
ssh opc@$VM02_IP - Apache HTTP-Server installieren
sudo yum install -y httpd - Installieren Sie PHP 8.2 und seine Abhängigkeiten
sudo dnf install -y @php:8.2 - PHP-Erweiterungen MySQL und JSON installieren
sudo yum install -y php-mysqlnd php-json - Apache HTTP-Server aktivieren und starten
sudo systemctl enable --now httpd - Eingehenden HTTP-Traffic auf Port 80 zulassen
sudo firewall-cmd --permanent --add-port=80/tcp - Firewallkonfiguration neu laden, um Änderungen anzuwenden
sudo firewall-cmd --reload - Verbindung von Apache mit Netzwerkressourcen zulassen
sudo setsebool -P httpd_can_network_connect 1 - SSH-Session von VM-02 beenden
exit
Schritt 7: Apache testen
- IP-Adresse von VM-02 IHRER VM_02 IP anzeigen:
echo "VM-02 (Web): $VM02_IP" -
Ö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> - 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:8081Wichtig: Lassen Sie den SSH-Tunnel und -Browser zur späteren Verwendung geöffnet
Schritt 8: Testanwendung erstellen
-
Zur SSH-Instanz opc@ol-node-01 zurückkehren
- 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) - 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) - SSH stellt von der ol-node-01-Instanz eine SSH-Verbindung zu VM-02 her
ssh opc@$VM02_IP - Erstellen Sie eine PHP-Infoseite, um die PHP-Konfiguration anzuzeigen
sudo tee /var/www/html/info.php > /dev/null << 'EOF' <?php phpinfo(); ?> EOF -
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 - Berechtigungen für Anwendungsdatei festlegen
sudo chown apache:apache /var/www/html/*.php - 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.phpBeispielausgabe:
``Text … Code before define('DB_SERVER', '$VM01_IP'); … Code after definition('DB_SERVER', '192.168.122.???');
-
VM-02 beenden
exit
Schritt 9: Auf Webserver- und Datenbanktestanwendung zugreifen
- 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> - Basis-LAMP-Test Durchsuchen Sie nach:
http://localhost:8081/info.php - 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
-
Sie sollten sich in der SSH-Instanz opc@ol-node-01 befinden
- 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) - 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) - Stellen Sie von der SSH-Instanz opc@ol-node-01 eine SSH-Verbindung zu VM-01 her.
ssh opc@$VM01_IP - In /tmp-Ordner wechseln
cd /tmp - 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" - Komprimierungswerkzeuge installieren
sudo dnf install -y unzip - Datenbank extrahieren
sudo unzip employees_db_full.zipcd employees_db_full - Datenbank laden
mysql -u admin -pWelcome#123 < employee.sql - Datenbank laden
mysql -u admin -pWelcome#123 -e "USE employee; SHOW TABLES; SELECT COUNT(*) FROM employee;" - Datenbank-VM beenden
exit
Schritt 11: Webanwendung für Mitarbeiterdatenbank erstellen
- SSH stellt von der ol-node-01-Instanz eine SSH-Verbindung zu VM-02 her
ssh opc@$VM02_IP - 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 - Legen Sie korrekte Berechtigungen fest
sudo chown apache:apache /var/www/html/employee.php - 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.phpBeispielausgabe:
``Text … Code before define('DB_SERVER', '$VM01_IP'); … Code after definition('DB_SERVER', '192.168.122.???');
- Webserver-VM beenden
exit
Schritt 12: Auf Mitarbeiteranwendung zugreifen
- 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> - Demo zur Mitarbeiterdatenbank durchsuchen:
http://localhost:8081/employee.php
Erwartete Ergebnisse:
- Basistest: Grün Meldung "Erfolgreich verbunden mit MySQL!"
- Mitarbeiterdemo: Professionelle Benutzeroberfläche mit über 300.000 Mitarbeiterdatensätzen
Verfügbare Anwendungen:
🔧 Grundlegender LAMP-Test (http://localhost:8081/dbtest.php)
- Einfacher Test der Datenbankkonnektivität
- Anzeige von Systeminformationen
- Version und Status von MySQL
🏢 Demo zur Mitarbeiterdatenbank (http://localhost:8081/employee.php)
- Über 300.000 Mitarbeiterdatensätze
- Über 400.000 Gehaltsdatensätze
- Professionelle Benutzeroberfläche mit Statistiken
- Real-World Data für Demonstrationen
- Abteilungslisten und Mitarbeiterdetails
Wichtige Verwaltungsbefehle
VM-Management
- Liste der ausgeführten VMs und deren Status
sudo virsh list - VM-01 starten
sudo virsh start vm-01 - VM-01 herunterfahren
sudo virsh shutdown vm-01 - 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
- 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 ``
- 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 - Compute-Public IP mit SSH testen
ssh opc@<ol-vcn-01_PUBLIC_IP> -
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
Verwandte Links
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.
Create Multi-VM LAMP Stack on Oracle Virtualization
G43719-02