Block Storage

Block Storage

Secara default, data dalam instance OpenStack disimpan pada disk 'ephemeral'. Disk ini tetap dengan instance selama masa hidupnya. Bila Anda mengakhiri instance, penyimpanan dan semua data yang tersimpan di dalamnya hilang. Penyimpanan sesaat dialokasikan ke satu instance dan tidak dapat dipindahkan ke instance lain.

Bagian ini memperkenalkan penyimpanan blok, juga dikenal sebagai penyimpanan volume, yang menyediakan akses ke perangkat penyimpanan persisten. Anda berinteraksi dengan penyimpanan blok dengan menyematkan volume untuk menjalankan instance seperti Anda mungkin memasang drive USB ke server fisik. Anda dapat melepaskan volume dari satu instance dan memasangnya kembali ke instance lain dan datanya tetap utuh. Proyek OpenStack Block Storage (cinder) menerapkan penyimpanan blok.

Meskipun Anda mungkin telah mengkonfigurasi Object Storage untuk menyimpan image, aplikasi Fractal memerlukan database untuk melacak lokasi, dan parameter yang digunakan untuk membuat, image di Object Storage. Server database ini tidak bisa gagal.

Jika Anda adalah pengguna tingkat lanjut, pikirkan bagaimana Anda bisa menghapus database dari arsitektur dan menggantinya dengan metadata Object Storag, dan kemudian berkontribusi langkah-langkah ini ke Going crazy.

Jika tidak, lanjutkan membaca untuk belajar bagaimana bekerja dengan, dan memindahkan server database aplikasi Fractal untuk digunakan, blokir penyimpanan.

Dasar-dasar

Nantinya, Anda akan menggunakan volume Block Storage untuk menyediakan penyimpanan persisten ke server database untuk aplikasi Fractal. Tapi pertama, pelajari cara membuat dan mengikat perangkat Block Storage.

Hubungkan ke API endpoint:

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)

Untuk mencobanya, buatlah volume 1GB yang disebut 'test'.

volume = connection.create_volume(1, 'test')
print(volume)

<StorageVolume id=755ab026-b5f2-4f53-b34a-6d082fb36689 size=1 driver=OpenStack>

Untuk melihat apakah pembuatan volume berhasil, cantumkan semua volume:

volumes = connection.list_volumes()
print(volumes)


[<StorageVolume id=755ab026-b5f2-4f53-b34a-6d082fb36689 size=1 driver=OpenStack>]

Gunakan Block Storage untuk server database Fractal

Anda memerlukan server untuk database dedicated. Gunakan image, flavor, dan keypair yang Anda gunakan di Mulai untuk meluncurkan sebuah instance app-database.

Anda juga memerlukan grup keamanan untuk mengizinkan akses ke server database (untuk MySQL, port 3306) dari jaringan:

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])

Buat objek volume dengan menggunakan unique identifier (UUID) untuk volume. Kemudian, gunakan objek server dari cuplikan kode sebelumnya untuk menempelkan volume ke /dev/vdb:

volume = connection.ex_get_volume('755ab026-b5f2-4f53-b34a-6d082fb36689')
connection.attach_volume(instance, volume, '/dev/vdb')

Log in ke server untuk menjalankan langkah-langkah berikut.

Catatan

Ganti IP_DATABASE dengan alamat IP dari instance database dan USERNAME ke nama pengguna yang sesuai.

Sekarang siapkan perangkat blok kosong.

$ 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

Hentikan layanan database MySQL yang berjalan dan pindahkan file database dari /var/lib/mysql ke volume baru, yang sementara dipasang di /mnt/database.

# systemctl stop mariadb
# mv /var/lib/mysql/* /mnt/database

Sinkronkan sistem file dan mount perangkat blok yang berisi file database ke /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

Akhirnya, mulai menghentikan layanan database MySQL dan memvalidasi bahwa semuanya berjalan seperti yang diharapkan.

# systemctl start mariadb
# mysql -ufaafo -ppassword -h localhost faafo -e 'show tables;'

Ekstra

Anda dapat melepaskan volume dan memasangnya kembali di tempat lain, atau gunakan langkah-langkah berikut untuk menghapus volume.

Peringatan

Operasi berikut merusak dan mengakibatkan kehilangan data.

Untuk melepaskan dan menghapus volume:

connection.detach_volume(volume)
connection.destroy_volume(volume)

True

Catatan

detach_volume dan destroy_volume ambil objek volume, bukan nama.

Fitur lainnya, seperti membuat snapshot volume, berguna untuk backup:

snapshot_name = 'test_backup_1'
connection.create_volume_snapshot('test', name=snapshot_name)

Untuk informasi tentang panggilan ini dan panggilan lainnya, lihat libcloud documentation.

Bekerja dengan layanan OpenStack Database

Sebelumnya, Anda secara manual membuat database, yang berguna untuk database tunggal yang jarang Anda update. Namun, komponen OpenStack trove menyediakan Database sebagai Layanan (DBaaS).

Catatan

Layanan OpenStack Database ini tidak terinstal di banyak awan saat ini, namun jika awan Anda mendukungnya, ini bisa membuat hidup Anda jauh lebih mudah saat bekerja dengan database.

SDK pada umumnya tidak mendukung layanan ini, namun Anda bisa menggunakan 'trove' command-line client untuk bekerja dengannya.

Untuk menginstal 'trove' command-line client, lihat Install the OpenStack command-line clients.

Untuk mengatur variabel lingkungan untuk awan Anda dalam file openrc.sh`, lihat Set environment variables using the OpenStack RC file.

Pastikan Anda memiliki file openrc.sh, sumber, dan memvalidasi bahwa klien Anda bekerja:

$ 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

Untuk informasi tentang fitur yang didukung dan cara bekerja dengan instalasi layanan database yang ada, lihat Database as a Service in OpenStack.

Langkah selanjutnya

Anda sekarang harus cukup yakin bekerja dengan volume Block Storage. Untuk informasi tentang panggilan lainnya, lihat dokumentasi volume untuk SDK Anda. Atau, cobalah salah satu langkah tutorial berikut:

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.