Blockieren Sie Speicherplatz

Blockieren Sie Speicherplatz

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.

Grundlagen

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:

import shade

conn = shade.openstack_cloud(cloud='myfavoriteopenstack')

Um es auszuprobieren, machen Sie ein 1GB Volumen namens ‚Test‘.

volume = conn.create_volume(size=1, display_name='test')

Bemerkung

Der Parameter :code: size ist in Gigabyte.

Um zu sehen, ob die Volumenerstellung erfolgreich war, listen Sie alle Volumes auf:

volumes = conn.list_volumes()
for vol in volumes:
    print(vol)

Verwenden Sie Blockspeicher für den Fractal-Datenbankserver

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 = conn.create_security_group('database', 'for database service')
conn.create_security_group_rule(db_group['name'], 22, 22, 'TCP')
conn.create_security_group_rule(db_group['name'], 3306, 3306, 'TCP')

userdata = '''#!/usr/bin/env bash
curl -L -s https://git.openstack.org/cgit/openstack/faafo/plain/contrib/install.sh | bash -s -- \
    -i database -i messaging
'''

instance = conn.create_server(wait=True, auto_ip=False,
    name='app-database',
    image=image_id,
    flavor=flavor_id,
    key_name='demokey',
    security_groups=[db_group['name']],
    userdata=userdata)

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:

conn.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;'

Extras

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:

conn.detach_volume(instance, volume)
conn.delete_volume(volume['id'])

Arbeiten Sie mit dem OpenStack Datenbankdienst

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> `_.

Nächste Schritte

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:

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.