Dayanıklı hale getirin

Dayanıklı hale getirin

Bu kısım nesne deoplamayı tanıtır.

OpenStack Nesne Depolama (kod adı swift) petabaytlarca erişlebilir veriyi depolamak için standart sunucuların kümesini kullanarak yedekli, ölçeklenebilir veri deposu oluşturmanızı sağlayan açık kaynak bir yazılımdır. Büyük miktarlarda statik veriyi alabileceğiniz, kullanabileceğiniz ve güncelleyebileceğiniz uzun dönem depolama sistemidir. Bir dosya sistemi üzerinden eriştiğiniz daha geleneksel depolama sistemlerinin aksine Nesne Depolamaya API üzerinden erişirsiniz.

Nesne Depolama API’si nesneler ve kapsayıcılar etrafında düzenlenmiştir.

UNIX programlama modeline benzer şekilde, bir nesne, örneğin bir belge veya imaj, veri içeren bir “baytlar çantasıdır”. Kapsayıcıları kullanarak nesneleri gruplarsınız. Bir kapsayıcıya birçok nesne koyabilirsiniz, ve hesabınız birçok kapsayıcıya sahip olabilir.

Geleneksel olarak kaydettiğiniz bir şeyi nasıl dayanılı yaptığınızı düşünürseniz, nesnelerinizin çoklu kopyalarını farklı sistemlerde tutmanın iyi bir strateji olduğu sonucuna varabilirsiniz. Ancak, bu çoklu kopyaları takip etmek zordur, ve bunu bir uygulamada inşa etmek karmaşık bir mantık gerektirir.

OpenStack Nesne Depolama API çağrınıza ‘yazma başarılı’ döndürmeden önce her nesneyi otomatik olarak en az iki kere yedekler. Donanım arızası, bakım, ağ kesintisi veya başka bir şeylerin kırılması durumuna karşı sistemde tüm nesnelerin öntanımlı olarak her zaman üç kopyasını tutmak iyi bir stratejidir. Bu strateji uygulama oluşturmada çok kolaylık sağlar. Nesneleri direk nesne depolamaya atar ve güvenli tutmak için gerekli olan ek iş yükünü düşünmezsiniz.

Fraktalları depolamak için Nesne Depolamayı kullanın

Fraktal uygulaması şu an ürettiği imajları depolamak için yerel dosya sistemini kullanır. Birden fazla sebepten, bu yaklaşım ne ölçeklenebilirdir ne de dayanıklı.

Yerel dosya sistemi geçici depolama olduğundan, fraktal imajlar sunucu sonlandırıldığından beraber kaybolurlar. Blok Depolama kısmında tartışıldığı gibi blok tabanlı depolama bu problemi aşar, ama yerel dosya sistemleri gibi dolmasını engellemek için bir yöneticiye ve diskler arızalanırsa anında müdahaleye ihtiyaç duyarlar.

Nesne Depolama servisi normalde uygulama sahibi tarafından yönetilen birçok görevi yönetir. Nesne Depolama servisi fraktal uygulaması için kullanabileceğiniz ölçeklenebilir ve dayanıklı bir API sunar, nesnelerin nasıl depolandığı ya da yedeklendiği, depolama havuzunun nasıl büyütüleceği gibi düşük seviye ayrıntıları bilmeniz gerekliliğini ortadan kaldırır. Nesne Depolama sizin için yedeklemeyi halleder. Her nesnenin birden fazla kopyasını deoplar. İstediğiniz anda Nesne Depolama API’sini kullanarak bir nesne döndürebilirsiniz.

Önce, Nesne Depolama uç noktasına nasıl bağlanacağınızı öğrenin:

from __future__ import print_function
import hashlib
from shade import *

conn = openstack_cloud(cloud='myfavoriteopenstack')

Nesneleri depolamaya başlamak için, önce bir kapsayıcı yapmalıyız. fraktallar ismini verebilirsiniz:

container_name = 'fractals'
container = conn.create_container(container_name)
print(container)

Şuna benzer bir çıktı görmelisiniz:

Munch({u'content-length': u'0', u'x-container-object-count': u'0',
u'accept-ranges': u'bytes', u'x-container-bytes-used': u'0',
u'x-timestamp': u'1463950178.11674', u'x-trans-id':
u'txc6262b9c2bc1445b9dfe3-00574277ff', u'date': u'Mon, 23 May 2016
03:24:47 GMT', u'content-type': u'text/plain; charset=utf-8'})

Artık bu kapsayıcıyı hesabınızdaki kapsayıcıların listesinde görebiliyor olmalısınız:

print(conn.list_containers())

[Munch({u'count': 0, u'bytes': 0, u'name': u'fractals'}),
Munch({u'count': 0, u'bytes': 0, u'name': u'fractals_segments'})]

Sonraki mantıksal adım bir nesne yüklemektir. İnternette bir keçi resmi bulun, ismini goat.jpg yapın ve fraktallar kapsayıcınıza yükleyin:

file_path = 'goat.jpg'
object_name = 'an amazing goat'
container = conn.get_container(container_name)
object = conn.create_object(container=container_name, name=object_name, filename=file_path)

fraktallar kapsayıcınızdaki nesneleri listeleyerek yüklemenin başarılı olduğunu onaylayın. Ardından md5sum değerinin aynı olduğundan emin olmak için dosyayı indirin:

print(conn.list_objects(container_name))

[Munch({u'hash': u'd1408b5bf6510426db6e2bafc2f90854', u'last_modified':
u'2016-05-23T03:34:59.353480', u'bytes': 63654, u'name': u'an amazing
goat', u'content_type': u'application/octet-stream'})]
object = conn.get_object(container_name, object_name)
print(object)

print(hashlib.md5(open('goat.jpg', 'rb').read()).hexdigest())

d1408b5bf6510426db6e2bafc2f90854

Son olarak deneme nesnesini silerek temizlik yapın:

conn.delete_object(container_name, object_name)

Munch({u'content-length': u'0', u'x-container-object-count': u'0',
u'accept-ranges': u'bytes', u'x-container-bytes-used': u'0',
u'x-timestamp': u'1463950178.11674', u'x-trans-id':
u'tx46c83fa41030422493110-0057427af3', u'date': u'Mon, 23 May 2016
03:37:23 GMT', u'content-type': u'text/plain; charset=utf-8'})

Artık fraktallar kapsayıcısında kullanılabilir nesne yoktur.

print(conn.list_objects(container_name))

[]

Fraktalları veritabanından Nesne Depolama üzerine yedekleyin

Şu an veritabanında tutulan Fraktallar uygulama imajlarını Nesne Depolamaya yedekleyin.

İmajları fraktallar kapsayıcısına koyun:

container_name = 'fractals'
print(conn.get_container(container_name))

Ardından, mevcut tüm fraktalları veritabanından swift kapsayıcısına yedekleyin. Bunu yapmak için basit bir döngü yeterlidir:

Not

IP_API_1 anahtarını API sunucusunun IP adresiyle değiştirin.

import base64
import cStringIO
import json
import requests

endpoint = 'http://IP_API_1'
params = { 'results_per_page': '-1' }
response = requests.get('%s/v1/fractal' % endpoint, params=params)
data = json.loads(response.text)
for fractal in data['objects']:
    r = requests.get('%s/fractal/%s' % (endpoint, fractal['uuid']), stream=True)
    with open(fractal['uuid'], 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
    conn.create_object(container=container_name, name=fractal['uuid'])

for object in conn.list_objects(container_name):
    print(object)

Not

Örnek kod harika Requests kitaplığını kullanır. Önceki betiği çalıştırmaya çalışmadan önce sisteminize kurulu olduğundan emin olun.

Fraktallar uygulamasını Nesne Depolamayı kullanacak şekilde yapılandırın

Uyarı

Şu an üretilen imajları doğrudan OpenStack Nesne Depolamaya kaydedemezsiniz. Lütfen ilerde bu kısmı tekrar ziyaret edin.

Ek özellikler

Kapsayıcıları silin

Bir kapsayıcıyı silmek için önce kapsayıcıdan tüm nesneleri çıkarmalısınız. Aksi halde silme işlemi başarısız olur:

for object in conn.list_objects(container_name):
    conn.delete_object(container_name, object['name'])
conn.delete_container(container_name)

Uyarı

Silinen nesneleri geri yükleme imkansızdır. Dikkatli olun.

Metaveri nesneleri ekleyin

Aşağıdaki örnekte gösterildiği gibi metaveriyle birlikte bir nesne yükleme gibi karmaşık görevleri tamamlayabilirsiniz. Daha fazla bilgi için SDK’nız için belgelendirmeye göz atın.

Bu “bar” değerine sahip bir “foo” anahtarını metaveriye ekler.

Not

Swift metaveri anahtarlarının önüne bir “x-object-meta-” değeri gelir böylece get_object() ile nesneyi aldığınızda metaveri değerini alabilmeniz için anahtar “x-object-meta-foo” olur.

metadata = {'foo': 'bar'}
conn.create_object(container=container_name, name=fractal['uuid'],
    metadata=metadata
)

Büyük nesneler

Etkinlik için, çoğu Nesne Depolama kurulumları büyük nesnelere, örneğin >5GB küçük nesnelerden farklı davranırlar.

Shade’in create_object fonksiyonu nesnenizi yüklerken ve gerektiğinde tekrar birleştirirken kullanılmak üzere küçük parçalara bölen (öntanımlı değeri doğru olan) bir “use_slo” parametresine sahiptir.

Sonraki adımlar

Artık Nesne Depolamayla çalışırken kendinizden emin olmalısınız. Nesne Depolama SDK çağrılarıyla ilgili daha fazla bilgi için:

Veya şu öğretici adımlarından 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.