Standardmäßig werden Daten in OpenStack-Instanzen auf ‚ephemeral‘ Festplatten gespeichert. Diese Festplatten bleiben während des ganzen Lebens mit der Instanz. Wenn Sie die Instanz beenden, verschwindet diese Festplatte und alle darin gespeicherten Daten. Der kurzlebige Speicher wird einer einzigen Instanz zugeordnet und kann nicht in eine andere Instanz verschoben werden.
In diesem Abschnitt wird ein Blockspeicher eingeführt, der auch als Volume-Speicher bezeichnet wird und den Zugriff auf persistente Speichergeräte ermöglicht. Sie interagieren mit Blockspeicher, indem Sie Volumes an laufende Instanzen anhängen, so wie Sie ein USB-Laufwerk an einen physischen Server anschließen können. Sie können Volumes von einer Instanz trennen und sie wieder an eine andere Instanz anschließen und die Daten bleiben intakt. Das OpenStack Block Storage (Cinder)-Projekt implementiert Blockspeicher.
Obwohl Sie Objektspeicher zum Speichern von Bildern konfiguriert haben, benötigt die Fractal-Anwendung eine Datenbank, um den Speicherort und die Parameter, die zum Erstellen von Bildern in Objektspeicher verwendet wurden, zu verfolgen. Dieser Datenbankserver kann nicht kaputtgehen.
Wenn Sie ein fortgeschrittener Benutzer sind, denken Sie darüber nach, wie Sie die Datenbank aus der Architektur entfernen und sie mit Object Storage Metadaten ersetzen können, und tragen Sie diese Schritte dann zu: doc: craziness.
Andernfalls lesen Sie weiter, um zu lernen, wie Sie arbeiten können, und verschieben Sie den Fractal-Anwendungsdatenbank-Server, um den Speicher zu blockieren.
Später verwenden Sie ein Blockspeicher-Volume, um einen permanenten Speicher für den Datenbankserver für die Fractal-Anwendung bereitzustellen. Aber zuerst lernen Sie, wie man ein Blockspeichergerät erstellt und anhängt.
Verbinden mit dem API-Endpunkt:
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
auth_username = 'your_auth_username'
auth_password = 'your_auth_password'
auth_url = 'http://controller:5000'
project_name = 'your_project_name_or_id'
region_name = 'your_region_name'
provider = get_driver(Provider.OPENSTACK)
connection = provider(auth_username,
auth_password,
ex_force_auth_url=auth_url,
ex_force_auth_version='2.0_password',
ex_tenant_name=project_name,
ex_force_service_region=region_name)
Um es auszuprobieren, machen Sie ein 1GB Volumen namens ‚Test‘.
volume = connection.create_volume(1, 'test')
print(volume)
<StorageVolume id=755ab026-b5f2-4f53-b34a-6d082fb36689 size=1 driver=OpenStack>
Um zu sehen, ob die Volumenerstellung erfolgreich war, listen Sie alle Volumes auf:
volumes = connection.list_volumes() print(volumes)
[<StorageVolume id=755ab026-b5f2-4f53-b34a-6d082fb36689 size=1 driver=OpenStack>]
Sie benötigen einen Server für die dedizierte Datenbank. Verwenden Sie das Abbild, die Variante und das Schlüsselpaar, das Sie verwendet haben :doc: / getting_started, um einen :code:` app-database` Instanz zu starten.
Sie benötigen auch eine Sicherheitsgruppe, um den Zugriff auf den Datenbankserver (für MySQL, Port 3306) aus dem Netzwerk zu ermöglichen:
db_group = connection.ex_create_security_group('database', 'for database service')
connection.ex_create_security_group_rule(db_group, 'TCP', 3306, 3306)
instance = connection.create_node(name='app-database',
image=image,
size=flavor,
ex_keyname=keypair_name,
ex_security_groups=[db_group])
Erstellen Sie ein Volume-Objekt, indem Sie die eindeutige Kennung (UUID) für das Volume verwenden. Verwenden Sie dann das Serverobjekt aus dem vorherigen Code-Snippet, um das Volume an folgende Adresse anzuhängen: code: / dev / vdb:
volume = connection.ex_get_volume('755ab026-b5f2-4f53-b34a-6d082fb36689')
connection.attach_volume(instance, volume, '/dev/vdb')
Melden Sie sich beim Server an, um die folgenden Schritte auszuführen.
Bemerkung
Ersetzen Sie :code: IP_DATABASE mit der IP-Adresse der Datenbankinstanz und USERNAME an den entsprechenden Benutzernamen.
Jetzt das leere Blockgerät vorbereiten.
$ ssh -i ~/.ssh/id_rsa USERNAME@IP_DATABASE
# fdisk -l
Disk /dev/vdb: 1073 MB, 1073741824 bytes
16 heads, 63 sectors/track, 2080 cylinders, total 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/vdb doesn't contain a valid partition table
# mke2fs /dev/vdb
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
# mkdir /mnt/database
# mount /dev/vdb /mnt/database
Stoppen Sie den laufenden MySQL-Datenbankdienst und verschieben Sie die Datenbankdateien aus :file: /var/lib/mysql auf das neue Volume, das vorübergehend an: file :/mnt/database angebracht ist.
# systemctl stop mariadb
# mv /var/lib/mysql/* /mnt/database
Synchronisieren Sie die Dateisysteme und montieren Sie das Blockgerät, das die Datenbankdateien enthält, an :file: /var/lib/mysql.
# sync
# umount /mnt/database
# rm -rf /mnt/database
# echo "/dev/vdb /var/lib/mysql ext4 defaults 1 2" >> /etc/fstab
# mount /var/lib/mysql
Schließlich starten Sie den gestoppten MySQL-Datenbankdienst und bestätigen, dass alles wie erwartet funktioniert.
# systemctl start mariadb
# mysql -ufaafo -ppassword -h localhost faafo -e 'show tables;'
Sie können das Volume ablösen und an anderer Stelle wieder anbringen, oder verwenden Sie die folgenden Schritte, um das Volume zu löschen.
Warnung
Die folgenden Operationen sind zerstörerisch und führen zu Datenverlust.
Um ein Volume abzulösen und zu löschen:
connection.detach_volume(volume)
connection.destroy_volume(volume)
True
Bemerkung
detach_volume
and destroy_volume
take a
volume object, not a name.
Weitere Features, wie das Erstellen von Volume-Snapshots, sind für Backups nützlich:
snapshot_name = 'test_backup_1'
connection.create_volume_snapshot('test', name=snapshot_name)
Informationen zu diesen und anderen Anrufen finden Sie unter `libcloud Dokumentation <http://ci.apache.org/projects/libcloud/docs/compute/drivers/openstack.html> `_.
Bisher haben Sie die Datenbank manuell erstellt, was für eine einzige Datenbank nützlich ist, die Sie selten aktualisieren. Allerdings bietet die OpenStack :code: trove-Komponente Datenbank als Service (DBaaS).
Bemerkung
Dieser OpenStack-Datenbank-Service ist derzeit nicht in vielen Clouds installiert, aber wenn Ihre Cloud es unterstützt, kann es Ihr Leben bei der Arbeit mit Datenbanken viel einfacher machen.
SDKs unterstützen den Dienst noch nicht, aber Sie können den Kommandozeilenclient ‚trove‘ verwenden, um dort zu arbeiten.
Um den Befehlszeilenclient ‚trove‘ zu installieren, siehe `Installieren der OpenStack-Befehlszeilenclients <https://docs.openstack.org/cli-reference/common/cli_install_openstack_command_line_clients.html#install-the-clients> `_.
Um die Umgebungsvariablen für Ihre Cloud in einer: file: openrc.sh Datei einzurichten, siehe` Umgebungsvariablen mit der OpenStack RC Datei einstellen <https://docs.openstack.org/cli-reference/common/cli_set_environment_variables_using_openstack_rc.html> `_.
Stellen Sie sicher, dass Sie eine Datei haben: openrc.sh Datei, Quelle, und bestätigen Sie, dass Ihr Trove Client funktioniert:
$ cat openrc.sh
export OS_USERNAME=your_auth_username
export OS_PASSWORD=your_auth_password
export OS_TENANT_NAME=your_project_name
export OS_AUTH_URL=http://controller:5000/v2.0
export OS_REGION_NAME=your_region_name
$ source openrc.sh
$ trove --version
1.0.9
Informationen über unterstützte Funktionen und die Arbeit mit einer vorhandenen Datenbankdienstinstallation finden Sie unter `Datenbank als Dienst in OpenStack <http://www.slideshare.net/hastexo/hands-on-trove-database-as-a-service-in-openstack-33588994> `_.
Sie sollten jetzt ziemlich sicher sein, mit Block Storage Volumes zu arbeiten. Weitere Informationen zu anderen Anrufen finden Sie in der Datenträgerdokumentation für Ihr SDK. Oder versuchen Sie eines dieser Tutorial Schritte:
: doc: / orchestration: Automatisches Orchestrieren Ihrer Applikation.
Vernetzung: Learn about complex networking.
Beratung für Entwickler, die neu in Betrieb sind: Get advice about operations.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.