Blok Depolama

Blok Depolama

Öntanımlı olarak, OpenStack sunucularındaki veri ‘geçici’ disklerde tutulur. Bu diskler sunucunun yaşam döngüsü boyunca sunucuyla kalır. Sunucuyu sonlandırdığınızda, bu depolama ve üzerindeki veriler kaybolur. Geçici depolama tek bir sunucu için ayrılır ve başka sunuculara taşınamaz.

Bu kısım kalıcı depolama aygıtlarına erişim sağlayan, birim depolama olarak da bilinen blok depolamayı tanıtır. Blok depolamayla çalışan sunuculara birimler ekleyerek tıpkı fiziksel bir sunucuya USB aygıt takıyor gibi etkileşirsiniz. Bir sunucudan birimleri ayırabilir ve başka bir sunucuya veriyi koruyacak şekilde tekrar ekleyebilirsiniz. OpenStack Blok Depolama (cinder) projesi blok depolamayı uygular.

İmajları depolamak için Nesne Depolama yapılandırmış olsanız da, Fraktal uygulaması Nesne Depolamada imaj oluşturmak için kullanılan parametreleri ve konumlarını takip etmek için bir veritabanına ihtiyaç duyar. Bu veritabanı sunucusu başarısız olmamalıdır.

Gelişmiş bir kullanıcı isenize, veritabanını mimariden ayırarak Nesne Depolama metaverisi ile nasıl değiştirebileceğinizi düşünün ve bu adımları Çılgınlaşmak belgesine yazın.

Aksi halde, Fraktal uygulama veritabanı sunucusunu blok depolama kullanacak şekilde nasıl taşıyacağınızı ve nasıl çalışacağınızı öğrenmek için okumaya devam edin.

Temeller

İlerde Fraktal uygulama için veritabanı sunucusu için kalıcı depolama sağlamak için Blok Deoplama birimi kullanacaksınız. Ama önce bir Blok Depolama aygıtı oluşturmayı ve eklemeyi öğrenin.

API uç noktasına bağlanın:

import shade

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

Denemek için, ‘test’ isimli 1GB bir birim yapın.

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

Not

size parametresi gigabayt türündendir.

Birim oluşturmanın başarılı olup olmadığını görmek için tüm birimleri listeleyin:

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

Fraktal veritabanı sunucusu için Blok Depolama kullanın

Adanmış veritabanı için bir sunucuya ihtiyacınız var. Başlangıç belgesinde kullandığınız imajı, niteliği ve anahtar çiftini kullanarak bir app-database sunucusu başlatın.

Ağdan veritabanı sunucusuna erişim izni için (MySQL için, bağlantı noktası 3306) bir de güvenlik grubuna ihtiyacınız var:

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://opendev.org/openstack/faafo/raw/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)

Birimin benzersiz tanımlayıcısını (UUID) kullanarak bir birim nesnesi oluşturun. Ardından, önceki kod parçasındaki sunucu nesnesini kullanarak birimi /dev/vdb konumuna ekleyin:

conn.attach_volume(instance, volume, '/dev/vdb')

Aşağıdaki adımları çalıştırmak için sunucuya giriş yapın.

Not

IP_DATABASE anahtarını veritabanı sunucusunun IP adresiyle ve USERNAME değerini uygun kullanıcı adıyla değiştirin.

Şimdi boş blok aygıtı hazırlayın.

$ 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

Çalışan MySQL veritabanı servisini durdurun ve veritabanı dosyalarını /var/lib/mysql konumundan geçici olarak /mnt/database konumuna bağlanmış olan yeni birime taşıyın.

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

Dosya sistemlerini eşzamanlayın ve veritabanı dosyalarını içeren blok aygıtı /var/lib/mysql konumuna bağlayın.

# sync
# umount /mnt/database
# rm -rf /mnt/database
# echo "/dev/vdb /var/lib/mysql ext4 defaults  1 2" >> /etc/fstab
# mount /var/lib/mysql

Son olarak, durdurulan MySQL veritabanı servisini başlatın ve herşeyin beklenen şekilde çalıştığını doğrulayın.

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

Ekler

Birimi ayırabilir ve başka bir yere ekleyebilirsiniz, veya birimi silmek için şu adımları kullanabilirsiniz.

Uyarı

Aşağıdaki işlemler yıkıcıdır ve veri kaybına yol açarlar.

Bir birimi ayırmak ve silmek için:

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

OpenStack Veritabanı servisi ile çalışın

Daha önce, veritabanını elle oluşturdunuz, bu nadiren güncellenen tek veritabanları için kullanışlıdır. Ancak OpenStack trove bileşeni Servis olarak Veritabanı (DBaaS) sağlar.

Not

Bu OpenStack Kontrol panosu servisi şu an pek fazla bulutta kurulu değil, ama bulutunuz destekliyorsa, veritabanlarıyla çalışırken hayatınızı epey kolaylaştıracaktır.

SDK’lar henüz servisi genel olarak desteklemez, ama ‘trove’ komut satırı istemcisini kullanarak çalışabilirsiniz.

‘trove’ komut satırı istemcisini kurmak için, OpenStack komut satırı istemcilerinin kurulumuna göz atın.

Bulutunuz için bir openrc.sh dosyasında çevre değişkenleri ayarlamak için, OpenStack RC dosyası kullanarak çevre değişkeni ayarlamak kısmına göz atın.

Bir openrc.sh dosyanız olduğundan emin olun, onu kaynak edin ve trove istemcinizin çalıştığını onaylayın:

$ 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

Desteklenen özellikler ve mevcut bir veritabanı servisi kurulumuyla nasıl çalışacağınız hakkında bilgi için, OpenStack’de Servis olarak Veritabanı kısmına bakınız.

Sonraki adımlar

Artık Blok Depolama birimleriyle yeterli özgüvenle çalışabiliyor olmalısınız. Diğer çağrılarla ilgili bilgi için, SDK’nız için birim belgelendirmesine göz atın. Veya şu öğretici adımlardan birini deneyin:

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.