Takip et

DigitalOcean Spaces Bucket’ı ClickHouse’ta Katmanlı Depolama Olarak Kullanma

DigitalOcean Spaces Bucket’ı ClickHouse’ta Katmanlı Depolama Olarak Kullanma ClickHouse ve Katmanlı Depolama İhtiyacı Modern veri analizi ve iş zekası uygulamaları, giderek artan hacimlerde veriyi hızlı bir şekilde işleme ve sorgulama ihtiyacını beraberinde getirmektedir.

DigitalOcean Spaces Bucket’ı ClickHouse’ta Katmanlı Depolama Olarak Kullanma

ClickHouse ve Katmanlı Depolama İhtiyacı

Modern veri analizi ve iş zekası uygulamaları, giderek artan hacimlerde veriyi hızlı bir şekilde işleme ve sorgulama ihtiyacını beraberinde getirmektedir. Bu alanda öne çıkan açık kaynaklı bir OLAP (Online Analytical Processing) veritabanı olan ClickHouse, sütun tabanlı mimarisi ve olağanüstü sorgu performansıyla bilinir. Ancak, petabaytlarca veriye ulaşıldığında, bu verilerin tamamını yüksek performanslı, pahalı yerel depolama birimlerinde (NVMe SSD’ler gibi) tutmak hem maliyetli hem de yönetim açısından zorlayıcı hale gelebilir. Veri hacmi büyüdükçe, depolama maliyetleri hızla artar ve donanım sınırlamaları ortaya çıkar.

Verilerin tamamının aynı erişim sıklığına sahip olmaması, katmanlı depolama stratejilerini gündeme getirir. Genellikle, en güncel ve sık erişilen veriler “sıcak” (hot) veriler olarak adlandırılırken, daha az sıklıkla erişilen ancak yine de hızlı erişim gerektiren veriler “ılıman” (warm) ve çok nadiren erişilen veya arşivlenen veriler ise “soğuk” (cold) veriler olarak sınıflandırılır. Bu farklı erişim desenleri, farklı depolama çözümlerini gerektirir. Sıcak veriler için pahalı ve hızlı yerel diskler tercih edilirken, soğuk veriler için daha uygun maliyetli, ölçeklenebilir ve dayanıklı nesne depolama çözümleri idealdir.

Katmanlı depolama, bu farklı veri erişim desenlerini yönetmek için bir stratejidir. Amacı, maliyetleri optimize ederken performansı korumaktır. ClickHouse, bu ihtiyaca yanıt olarak, verileri farklı depolama katmanları arasında otomatik veya manuel olarak taşıma yeteneği sunar. Bu, özellikle büyük veri kümeleriyle çalışan kuruluşlar için hem maliyet tasarrufu hem de operasyonel verimlilik açısından kritik bir avantaj sağlar. Bu makalede, bu katmanlı depolama yeteneğini DigitalOcean Spaces ile nasıl entegre edebileceğimizi ayrıntılı bir şekilde inceleyeceğiz.

DigitalOcean Spaces’e Giriş: Esnek ve Uygun Maliyetli Nesne Depolama

DigitalOcean Spaces, Amazon S3 uyumlu, uygun maliyetli ve ölçeklenebilir bir nesne depolama hizmetidir. Geliştiricilerin ve işletmelerin büyük miktarda veriyi güvenli bir şekilde depolamasını, erişmesini ve yönetmesini sağlar. Web siteleri, mobil uygulamalar, yedeklemeler, medya dosyaları ve analitik veriler gibi çeşitli kullanım durumları için idealdir.

Spaces’in başlıca avantajları şunlardır:

* S3 Uyumluluğu: DigitalOcean Spaces, Amazon S3 API’si ile uyumludur. Bu, S3 ile çalışmak üzere tasarlanmış mevcut araçların, kütüphanelerin ve uygulamaların kolayca Spaces ile entegre edilebileceği anlamına gelir. ClickHouse’un S3 entegrasyonu da bu uyumluluktan faydalanır.
* Maliyet Etkinliği: Genellikle diğer bulut sağlayıcılarına göre daha rekabetçi fiyatlandırma sunar. Sabit bir depolama ücreti ve öngörülebilir bant genişliği maliyetleri ile bütçe planlamasını kolaylaştırır.
* Ölçeklenebilirlik: İhtiyaç duyulan depolama alanı kadar ödeme yapılır ve veri hacmi arttıkça otomatik olarak ölçeklenir. Depolama alanı konusunda endişelenmeye gerek kalmaz.
* Basitlik ve Kullanım Kolaylığı: DigitalOcean’ın genel felsefesine uygun olarak, Spaces de sade bir arayüze ve kolay bir yapılandırma sürecine sahiptir.
* Yüksek Erişilebilirlik ve Dayanıklılık: Veriler, birden fazla sunucu ve cihazda yedekli olarak depolanır, bu da yüksek dayanıklılık ve erişilebilirlik sağlar.
* CDN Entegrasyonu: Varsayılan olarak DigitalOcean’ın CDN’i ile entegre çalışabilir, bu da küresel dağıtık erişimde performansı artırır.

ClickHouse ile entegrasyonu düşündüğümüzde, Spaces’in S3 uyumluluğu kilit bir özelliktir. ClickHouse’un S3Disk motoru sayesinde, Spaces bucket’ları sanki yerel bir diskmiş gibi davranabilir ve ClickHouse verilerinin bir kısmını veya tamamını burada depolayabiliriz. Bu entegrasyon, ClickHouse’un yüksek performansını korurken, depolama maliyetlerini düşürmek ve veri hacmi yönetimini basitleştirmek için güçlü bir çözüm sunar.

ClickHouse’ta Harici Depolama Mekanizmaları

ClickHouse, veri depolamasını yönetmek için esnek bir yapı sunar. Bu yapı, Disk ve StoragePolicy kavramları etrafında şekillenir.

* Diskler: ClickHouse’ta Disk, verilerin fiziksel olarak depolandığı bir birimi temsil eder. Bu birimler yerel dosya sistemindeki dizinler olabileceği gibi, S3 uyumlu nesne depolama servisleri gibi harici depolama çözümleri de olabilir.
* Yerel Diskler: local tipindeki diskler, ClickHouse sunucusunun dosya sistemindeki belirli bir yolu işaret eder. Genellikle yüksek performanslı SSD’ler veya NVMe sürücüler üzerinde yapılandırılırlar ve sıcak veriler için kullanılırlar.
* S3Disk: ClickHouse’un 21.10 sürümü ve sonrasında tanıtılan s3 disk tipi, Amazon S3 veya S3 uyumlu diğer nesne depolama servisleri (DigitalOcean Spaces gibi) ile entegrasyonu sağlar. Bu disk tipi, ClickHouse’un veri parçalarını (data parts) doğrudan harici depolama birimine yazmasına ve oradan okumasına olanak tanır. Bu, özellikle ılıman ve soğuk veriler için maliyet etkin ve ölçeklenebilir bir çözüm sunar.

* Depolama Politikaları (Storage Policies): Bir StoragePolicy, bir veya daha fazla diskin bir araya gelerek oluşturduğu bir depolama katmanları hiyerarşisidir. Bu politikalar, verilerin hangi disklere ne zaman taşınacağını tanımlayan kurallar içerir. Bir depolama politikası, farklı “volume” (hacim) tanımlayabilir ve her volume bir veya daha fazla disk içerebilir.
* Volume’lar: Bir depolama politikası içinde, volume‘lar mantıksal depolama gruplarıdır. Genellikle, bir “hot” volume ve bir “cold” volume gibi isimlendirilirler. Veriler öncelikle ilk volume’a yazılır ve belirli koşullar karşılandığında bir sonraki volume’a taşınır.
* Veri Taşıma Kuralları: Depolama politikaları, verilerin diskler arasında nasıl hareket edeceğini belirleyen kurallar içerir. Örneğin, bir move_factor parametresi, bir volume’daki boş alan belirli bir eşiğin altına düştüğünde, en eski veya en büyük veri parçalarının bir sonraki volume’a taşınmasını tetikleyebilir. Bu, yerel diskteki sıcak verilerin otomatik olarak S3 diskine aktarılmasını sağlar.

Bu mekanizmaların entegrasyona neden ihtiyaç duyulduğunu daha iyi anlamak için, ClickHouse’un veri parçalarını (data parts) nasıl yönettiğini hatırlamak önemlidir. ClickHouse, verileri küçük, sıralı ve sıkıştırılmış “parçalara” (parts) böler. Bu parçalar birleştirilir (merge) ve arka planda optimize edilir. Katmanlı depolama ile, bu parçalar yerel diskten DigitalOcean Spaces’e taşınabilir. Sorgular çalıştırıldığında, ClickHouse hangi parçanın nerede olduğunu bilir ve gerektiğinde harici depolamadan veri çekebilir. Bu, yerel depolama alanını serbest bırakırken, tüm verinin erişilebilir kalmasını sağlar.

Ön Koşullar ve Hazırlıklar

DigitalOcean Spaces’i ClickHouse ile katmanlı depolama olarak kullanmaya başlamadan önce bazı ön koşulları yerine getirmemiz gerekmektedir.

DigitalOcean Hesabı ve Spaces Oluşturma

1. DigitalOcean Hesabı: Eğer bir DigitalOcean hesabınız yoksa, öncelikle bir hesap oluşturmanız gerekmektedir.
2. Spaces Oluşturma:
* DigitalOcean kontrol panelinize giriş yapın.
* Sol menüden “Spaces” bölümüne gidin ve “Create a Space” butonuna tıklayın.
* Bir bölge (datacenter region) seçin. ClickHouse sunucunuzun coğrafi konumuna yakın bir bölge seçmek, gecikmeyi (latency) minimize ederek performansı artıracaktır. Örneğin, ClickHouse sunucunuz Frankfurt’taysa, Spaces bucket’ınızı da Frankfurt’ta oluşturmak iyi bir fikirdir.
* Bucket için benzersiz bir isim belirleyin. Bu isim, endpoint URL’nizin bir parçası olacaktır (örn: my-clickhouse-data).
* “Create Space” butonuna tıklayarak bucket’ı oluşturun.
3. API Anahtarları Oluşturma:
* Spaces bucket’ınızı oluşturduktan sonra, ClickHouse’un bu bucket’a erişebilmesi için API anahtarlarına ihtiyacınız olacaktır.
* DigitalOcean kontrol panelinde sol menüden “API” bölümüne gidin.
* “Spaces keys” sekmesine geçin.
* “Generate New Key” butonuna tıklayın.
* Anahtar için bir isim verin (örn: clickhouse-s3-access).
* Oluşturulan Access Key ID ve Secret Access Key değerlerini güvenli bir yere kaydedin. Secret Access Key sadece bir kez gösterilecektir, bu yüzden kaybetmemeye özen gösterin. Bu anahtarlar, ClickHouse sunucunuzun Spaces bucket’ınıza kimlik doğrulaması yapmasını sağlayacaktır.
4. Endpoint URL’si: DigitalOcean Spaces için endpoint URL’si, seçtiğiniz bölgeye ve bucket isminize bağlıdır. Genel formatı region.digitaloceanspaces.com şeklindedir. Örneğin, nyc3 bölgesinde my-clickhouse-data isimli bir bucket için endpoint nyc3.digitaloceanspaces.com olacaktır. Bu bilgiyi ClickHouse yapılandırmasında kullanacağız.

ClickHouse Sunucusu Hazırlığı

1. ClickHouse Sürümü: DigitalOcean Spaces ile S3 entegrasyonu için ClickHouse’un 21.10 veya daha yeni bir sürümünü kullanmanız önerilir. Daha eski sürümler bu özelliği desteklemeyebilir veya farklı bir yapılandırma gerektirebilir.
2. Ağ Erişimi: ClickHouse sunucunuzun DigitalOcean Spaces endpoint’ine (örneğin nyc3.digitaloceanspaces.com) ağ erişimi olduğundan emin olun. Güvenlik duvarı kurallarınızın bu çıkış trafiğine izin verdiğini kontrol edin. Genellikle HTTPS (port 443) üzerinden iletişim kurulur.
3. İzinler: ClickHouse sunucusunun çalıştırıldığı kullanıcının (genellikle clickhouse kullanıcısı) yapılandırma dosyalarını okuma ve log dosyalarına yazma izinlerine sahip olduğundan emin olun.
4. Disk Alanı: Sıcak veriler için yerel diskinizde yeterli alan olduğundan emin olun. Katmanlı depolama kullanıyor olsanız bile, yeni gelen veriler ilk olarak yerel diske yazılacaktır.

Bu hazırlık adımlarını tamamladıktan sonra, ClickHouse sunucunuzu DigitalOcean Spaces ile entegre etmeye başlayabiliriz.

ClickHouse Yapılandırması

ClickHouse’u DigitalOcean Spaces ile entegre etmek için, config.xml veya users.xml gibi sunucu yapılandırma dosyalarında değişiklik yapmamız gerekmektedir. Genellikle /etc/clickhouse-server/config.d/ veya /etc/clickhouse-server/ dizininde bulunan dosyalara eklemeler yapılır.

Disk Tanımlama

Öncelikle, DigitalOcean Spaces bucket’ınızı ClickHouse için bir s3 disk olarak tanımlamamız gerekiyor. Bu tanım, config.xml dosyasının etiketi içinde bölümüne eklenir.

<yandex>
    <storage_configuration>
        <disks>
            <s3_disk>
                <type>s3</type>
                <endpoint>nyc3.digitaloceanspaces.com</endpoint> <!-- Bölgenize göre değiştirin -->
                <access_key_id>YOUR_SPACES_ACCESS_KEY_ID</access_key_id>
                <secret_access_key>YOUR_SPACES_SECRET_ACCESS_KEY</secret_access_key>
                <bucket>my-clickhouse-data</bucket> <!-- Spaces bucket adınız -->
                
                <!-- İsteğe bağlı ayarlar -->
                <region>nyc3</region> <!-- Endpoint'te bölge belirtiliyorsa gerekmez, ancak açıkça belirtmek iyi olabilir -->
                <use_environment_credentials>false</use_environment_credentials>
                <use_insecure_channel>false</use_insecure_channel> <!-- HTTPS kullanın -->
                <max_connections>100</max_connections> <!-- Eşzamanlı bağlantı sayısı -->
                <connect_timeout_ms>10000</connect_timeout_ms>
                <request_timeout_ms>30000</request_timeout_ms>
                <max_redirects>10</max_redirects>
                <metadata_path>/var/lib/clickhouse/disks/s3_disk_metadata/</metadata_path> <!-- Metadata için yerel yol -->
            </s3_disk>
        </disks>
    </storage_configuration>
</yandex>

Parametre Açıklamaları:

* s3: Bu diskin bir S3 uyumlu nesne depolama olduğunu belirtir.
* : DigitalOcean Spaces’in bölgesel endpoint URL’si. Örneğin nyc3.digitaloceanspaces.com. Bucket adını buraya dahil etmeyin.
* : DigitalOcean API anahtarlarından aldığınız Access Key ID.
* : DigitalOcean API anahtarlarından aldığınız Secret Access Key. Bu anahtarları doğrudan yapılandırma dosyasına yazmak yerine, ortam değişkenleri veya gizli yönetim araçları kullanmak daha güvenli bir yaklaşımdır. Ancak örnek için burada gösterilmiştir.
* : DigitalOcean Spaces bucket’ınızın adı.
* : (İsteğe bağlı) Eğer endpoint URL’si bölgeyi içermiyorsa veya açıkça belirtmek isterseniz. DigitalOcean Spaces için genellikle endpoint yeterlidir.
* : true olarak ayarlanırsa, kimlik bilgilerini ortam değişkenlerinden (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) okur. Güvenlik için önerilen yöntemlerden biridir.
* : true olarak ayarlanırsa HTTP kullanılır, false (varsayılan) ise HTTPS kullanılır. Güvenlik nedeniyle false olarak bırakılmalıdır.
* : S3’e yapılabilecek eşzamanlı maksimum bağlantı sayısı. Performansı etkileyebilir, ağ kapasitenize göre ayarlayın.
* , : Bağlantı ve istek zaman aşımı süreleri.
* : ClickHouse’un S3 üzerindeki veri parçaları hakkında metadata’yı depolayacağı yerel dizin. Bu, ClickHouse’un S3’teki parçaları hızlı bir şekilde bulmasına yardımcı olur.

Depolama Politikası Tanımlama

S3 diskini tanımladıktan sonra, bu diski yerel diskimizle birlikte kullanacak bir depolama politikası oluşturmamız gerekiyor. Bu politika, verilerin ne zaman ve nasıl taşınacağını belirleyecek.

<yandex>
    <storage_configuration>
        <disks>
            <!-- s3_disk tanımı yukarıda olduğu gibi buraya da eklenecek -->
        </disks>
        <policies>
            <my_tiered_policy>
                <volumes>
                    <hot_volume>
                        <disk>default</disk> <!-- Varsayılan yerel disk -->
                        <max_data_part_size_in_bytes>10737418240</max_data_part_size_in_bytes> <!-- 10 GB -->
                    </hot_volume>
                    <cold_volume>
                        <disk>s3_disk</disk> <!-- Tanımladığımız S3 diski -->
                    </cold_volume>
                </volumes>
                <move_factor>0.1</move_factor> <!-- Yerel diskin %10'u boş kaldığında taşıma başlar -->
            </my_tiered_policy>
        </policies>
    </storage_configuration>
</yandex>

Parametre Açıklamaları:

* : Oluşturduğumuz depolama politikasının adı. Tablo oluştururken bu adı kullanacağız.
* : Politika içindeki depolama hacimlerini tanımlar.
* : Sıcak veriler için hacim.
* default: Bu hacmin default adlı yerel diski kullanacağını belirtir. ClickHouse’un varsayılan yerel diski genellikle /var/lib/clickhouse/ yoludur.
* : Bu hacimde tutulacak maksimum veri parçası boyutu. Daha büyük parçalar doğrudan bir sonraki hacme (cold_volume) yazılabilir veya taşınabilir. Bu, küçük parçaların hızlı yerel diskte kalmasını sağlamak için kullanışlıdır.
* : Soğuk veriler için hacim.
* s3_disk: Bu hacmin yukarıda tanımladığımız s3_disk‘i kullanacağını belirtir.
* : Bu parametre, bir volume’daki boş alanın yüzdesini belirtir. Eğer bir volume’daki boş alan, move_factor tarafından belirtilen oranın altına düşerse, ClickHouse otomatik olarak en eski veya en büyük veri parçalarını bir sonraki volume’a taşımaya başlar. Örneğin, 0.1 değeri, yerel diskin %10’u boş kaldığında taşıma işleminin başlayacağı anlamına gelir.

Yapılandırma dosyalarını kaydettikten sonra, ClickHouse sunucusunu yeniden başlatmanız gerekmektedir:
sudo systemctl restart clickhouse-server

Yapılandırmanın doğru yüklendiğini kontrol etmek için ClickHouse istemcisinden aşağıdaki sorguyu çalıştırabilirsiniz:
SELECT * FROM system.disks;
SELECT * FROM system.storage_policies;

Bu sorgular, tanımladığınız s3_disk‘i ve my_tiered_policy‘yi listelemelidir.

ClickHouse Veritabanı ve Tablo Oluşturma

Yapılandırma tamamlandıktan ve ClickHouse yeniden başlatıldıktan sonra, bu depolama politikasını kullanacak bir tablo oluşturabiliriz. Tablo oluştururken SETTINGS storage_policy = 'my_tiered_policy'; ifadesini kullanmamız yeterlidir.

Örnek bir tablo oluşturma sorgusu:

CREATE DATABASE IF NOT EXISTS my_database;

CREATE TABLE my_database.my_tiered_table
(
    event_time DateTime,
    user_id UInt64,
    event_type String,
    event_data String
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_time)
ORDER BY (event_time, user_id)
SETTINGS
    storage_policy = 'my_tiered_policy',
    index_granularity = 8192;

Bu tabloya veri eklediğinizde, yeni gelen veriler ilk olarak my_tiered_policy‘nin ilk volume’u olan hot_volume‘daki default (yerel) diske yazılacaktır. Yerel diskteki boş alan move_factor eşiğinin altına düştüğünde veya max_data_part_size_in_bytes değeri aşılırsa, ClickHouse otomatik olarak veri parçalarını cold_volume‘daki s3_disk‘e (DigitalOcean Spaces) taşımaya başlayacaktır.

Veri ekleme örneği:

INSERT INTO my_database.my_tiered_table (event_time, user_id, event_type, event_data) VALUES
('2023-01-01 10:00:00', 101, 'login', '{"ip": "192.168.1.1"}'),
('2023-01-01 10:05:00', 102, 'logout', '{"duration": "300s"}'),
('2023-02-15 11:30:00', 103, 'purchase', '{"item": "book", "price": 25.00}'),
('2023-03-20 12:45:00', 104, 'view_product', '{"product_id": "P123"}');

Bu veriler, ilgili partisyonlara (örneğin 202301, 202302, 202303) ayrılarak yerel diske yazılacaktır. Zamanla, yerel disk dolmaya başladığında veya manuel olarak tetiklendiğinde, eski partisyonlara ait veri parçaları DigitalOcean Spaces’e taşınacaktır.

Veri Taşıma ve Yönetimi

ClickHouse, katmanlı depolama politikaları sayesinde verilerin diskler arasında otomatik olarak taşınmasını sağlar. Ancak, bu süreci izlemek ve gerektiğinde manuel olarak müdahale etmek de mümkündür.

Otomatik Veri Taşıma Mekanizması

Yukarıda tanımladığımız parametresi, otomatik veri taşımanın temelini oluşturur. ClickHouse, arka planda periyodik olarak her bir diskin doluluk oranını kontrol eder. Eğer bir volume’daki diskin boş alanı, move_factor tarafından belirlenen eşiğin altına düşerse, ClickHouse bu volume’daki en eski veya en büyük veri parçalarını (tablo partisyonlarına göre) bir sonraki volume’a taşımaya başlar.

Örneğin, hot_volume‘daki default diskiniz %90 oranında dolduğunda ve move_factor 0.1 ise, ClickHouse bu diskten cold_volume‘daki s3_disk‘e veri taşımaya başlar. Bu işlem, yerel diskte yeterli boş alan açılana kadar devam eder. Bu sayede, en güncel ve sık erişilen veriler yerel diskte kalırken, eski veriler daha uygun maliyetli DigitalOcean Spaces’e taşınmış olur.

Manuel Veri Taşıma

Otomatik taşıma dışında, belirli partisyonları veya veri parçalarını manuel olarak da taşıyabilirsiniz. Bu, özellikle acil durumlar, belirli bir partisyonun hemen soğuk depolamaya alınması gerektiği durumlar veya test senaryoları için kullanışlıdır.

* Partisyon Taşıma: Belirli bir partisyonu tamamen bir diske taşımak için:

ALTER TABLE my_database.my_tiered_table MOVE PARTITION '202301' TO DISK 's3_disk';

Bu komut, my_tiered_table tablosundaki 202301 partisyonuna ait tüm veri parçalarını s3_disk‘e (DigitalOcean Spaces) taşıyacaktır.

* Veri Parçası Taşıma: Daha granüler kontrol için belirli bir veri parçasını taşıyabilirsiniz (ancak genellikle partisyon bazında taşıma tercih edilir):

ALTER TABLE my_database.my_tiered_table MOVE PART 'all_2_2_0' TO DISK 's3_disk';

Veri parçalarının isimlerini system.parts tablosundan bulabilirsiniz.

Veri Yaşam Döngüsü Yönetimi Stratejileri

Katmanlı depolama, veri yaşam döngüsü yönetiminin önemli bir parçasıdır. Stratejinizi belirlerken aşağıdaki faktörleri göz önünde bulundurun:

* Erişim Sıklığı: Hangi verilerin ne sıklıkla sorgulandığını analiz edin. En sık erişilen verileri sıcak diskte tutun.
* Veri Değeri: Zamanla verinin değeri ve iş gereksinimleri değişebilir. Eski veriler genellikle daha az kritik hale gelir.
* Maliyet Kısıtlamaları: Yerel disk alanının maliyeti ile DigitalOcean Spaces’in depolama ve transfer maliyetlerini karşılaştırın.
* Gecikme Toleransı: Soğuk depolamadaki verilere erişimde ne kadar gecikmeye tolerans gösterebileceğinizi belirleyin.

system.parts Tablosu ile Veri Konumunu İzleme

Veri parçalarının hangi diskte bulunduğunu ve depolama politikalarının nasıl çalıştığını izlemek için system.parts tablosunu kullanabilirsiniz:

SELECT
    partition,
    name,
    bytes_on_disk,
    disk_name,
    path
FROM system.parts
WHERE database = 'my_database' AND table = 'my_tiered_table'
ORDER BY partition, name;

Bu sorgu, my_tiered_table tablosundaki her bir veri parçasının hangi partisyona ait olduğunu, adını, boyutunu, bulunduğu diskin adını (default veya s3_disk) ve disk üzerindeki yolunu gösterecektir. Bu sayede, verilerinizin beklediğiniz gibi diskler arasında taşınıp taşınmadığını kolayca kontrol edebilirsiniz.

Performans ve Maliyet Optimizasyonu

DigitalOcean Spaces’i ClickHouse’ta katmanlı depolama olarak kullanırken hem performansı en üst düzeyde tutmak hem de maliyetleri optimize etmek kritik öneme sahiptir.

Performans Faktörleri

1. Ağ Gecikmesi (Latency): ClickHouse sunucunuz ile DigitalOcean Spaces bucket’ınız arasındaki ağ gecikmesi, S3 diskinden veri okunurken sorgu performansını doğrudan etkiler.
* Optimizasyon: ClickHouse sunucunuzu ve Spaces bucket’ınızı aynı DigitalOcean bölgesinde (datacenter region) barındırarak gecikmeyi minimuma indirin.
2. S3Disk Ayarları: max_connections, connect_timeout_ms, request_timeout_ms gibi S3Disk ayarları, eşzamanlı istek sayısını ve zaman aşımı davranışını belirler.
* Optimizasyon: Yüksek sorgu yükü altında, max_connections değerini artırmak, paralel veri çekme yeteneğini geliştirerek performansı artırabilir. Ancak, çok yüksek bir değer, S3 hizmetinde kısıtlamalara (throttling) yol açabilir. Sunucunuzun ağ kapasitesine ve S3 hizmetinin limitlerine göre deneme yanılma ile optimum değeri bulun.
3. Veri Boyutu ve Sorgu Desenleri: Küçük, sık erişilen veri parçaları yerel diskte kalırken, büyük ve nadiren erişilen verilerin S3’e taşınması genel performansı artırır.
* Optimizasyon: storage_policy içindeki max_data_part_size_in_bytes ayarını kullanarak küçük parçaların sıcak diskte kalmasını sağlayın. Sorgu desenlerinizi analiz ederek, hangi verilerin “sıcak” olduğunu doğru bir şekilde belirleyin.
4. Partisyonlama Stratejisi: ClickHouse’ta partisyonlama, veri yönetimi ve sorgu performansı için temeldir. İyi tasarlanmış bir partisyonlama stratejisi, sadece ilgili partisyonların sorgulanmasını sağlayarak S3’ten gereksiz veri çekimini önler.
* Optimizasyon: Genellikle zamana dayalı partisyonlama (toYYYYMM(date_column)) tercih edilir. Sorgularınızda WHERE koşullarında partisyon anahtarını kullanarak S3’ten okunacak veri miktarını minimize edin.

Maliyet Faktörleri

DigitalOcean Spaces kullanırken dikkate almanız gereken ana maliyet kalemleri şunlardır:

1. Depolama Maliyeti: Spaces’te depoladığınız veri miktarına göre ödeme yaparsınız (GB başına aylık).
* Optimizasyon: Gerekli olmayan verileri periyodik olarak silerek veya daha uygun maliyetli arşivleme çözümlerine taşıyarak depolama maliyetlerini düşürebilirsiniz. ClickHouse’un TTL (Time-To-Live) özellikleri, eski verileri otomatik olarak silmek için kullanılabilir.
2. Veri Transferi (Bant Genişliği) Maliyeti: Spaces’ten çıkan (egress) veri transferi ücretlidir. ClickHouse’un S3’ten veri okuması bu maliyete dahildir.
* Optimizasyon: Sorgularınızı optimize ederek S3’ten çekilen veri miktarını minimize edin. Sadece gerekli sütunları seçin ve WHERE koşullarını etkili bir şekilde kullanın. Sorguların yerel diskteki sıcak verilere yönlendirilmesini teşvik edin.
3. API İstek Maliyetleri: S3’e yapılan API istekleri (PUT, GET, LIST vb.) belirli bir eşiğin üzerinde ücretlendirilebilir. ClickHouse, veri parçalarını yazarken ve okurken bu istekleri yapar.
* Optimizasyon: Genellikle bu maliyet, depolama ve transfer maliyetlerine göre daha düşüktür. Ancak, çok sayıda küçük veri parçası oluşturmaktan kaçınmak, PUT/GET istek sayısını azaltabilir. ClickHouse’un merge işlemleri bu konuda yardımcı olur.
4. Sıcak Disk Boyutu Optimizasyonu: Yerel disk alanının maliyeti genellikle S3 depolama maliyetinden daha yüksektir.
* Optimizasyon: move_factor ve max_data_part_size_in_bytes gibi ayarları dikkatlice yapılandırarak, yerel diskinizin boyutunu ihtiyacınız olan en güncel verilere yetecek kadar tutun ve geri kalanını Spaces’e taşıyın. Bu, donanım maliyetlerinizi önemli ölçüde azaltabilir.

Bu faktörleri göz önünde bulundurarak, ClickHouse ve DigitalOcean Spaces entegrasyonunuzu hem performanslı hem de maliyet etkin bir şekilde yönetebilirsiniz.

Güvenlik Hususları

DigitalOcean Spaces’i ClickHouse ile kullanırken güvenlik, asla göz ardı edilmemesi gereken kritik bir konudur. Hassas verilerinizi korumak ve yetkisiz erişimi engellemek için aşağıdaki hususlara dikkat etmek önemlidir.

1. API Anahtarlarının Güvenliği: DigitalOcean Spaces’e erişim için kullandığınız Access Key ID ve Secret Access Key, bucket’ınıza tam erişim sağlayabilir. Bu anahtarların güvenliği hayati önem taşır.
* Ortam Değişkenleri: Anahtarları doğrudan config.xml içine yazmak yerine, ClickHouse sunucusunun çalıştığı ortamda ortam değişkenleri olarak ayarlayın (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY). Ardından s3_disk yapılandırmasında true ayarını kullanın. Bu, anahtarların dosya sisteminde okunabilir bir metin olarak bulunmasını engeller.
* Gizli Yönetim Araçları: HashiCorp Vault, AWS Secrets Manager veya Kubernetes Secrets gibi gizli yönetim araçları kullanarak anahtarları merkezi ve güvenli bir şekilde yönetin. ClickHouse, bu tür araçlarla entegrasyon için çeşitli mekanizmalar sunabilir veya özel çözümler geliştirilebilir.
* İzinleri Kısıtla: Mümkünse, Spaces API anahtarlarınıza yalnızca ClickHouse’un ihtiyaç duyduğu minimum izinleri (örneğin, belirli bir bucket’a s3:GetObject, s3:PutObject, s3:DeleteObject, s3:ListBucket izinleri) verin. DigitalOcean’da Spaces anahtarları genellikle tüm Spaces’lere erişim sağlar, bu nedenle anahtarın çalınması durumunda potansiyel zararı sınırlamak için diğer Spaces’lerde hassas veri bulundurmaktan kaçının.
2. Erişim İzinleri (Least Privilege Principle): ClickHouse sunucusunun çalıştığı kullanıcının (genellikle clickhouse kullanıcısı) sistem üzerindeki ayrıcalıklarını en aza indirin. Sadece ClickHouse’un çalışması için gerekli olan dosyalara ve dizinlere erişim izni verin.
3. Veri Şifreleme:
* Aktarımda Şifreleme (Encryption in Transit): DigitalOcean Spaces ile ClickHouse arasındaki tüm iletişimde HTTPS (SSL/TLS) kullanıldığından emin olun. s3_disk yapılandırmasında false (varsayılan değer) olarak bırakıldığında HTTPS kullanılır. Bu, verilerin ağ üzerinden aktarılırken şifrelenmesini sağlar.
* Beklemede Şifreleme (Encryption at Rest): DigitalOcean Spaces, depolanan veriler için otomatik olarak sunucu tarafı şifreleme (Server-Side Encryption) sağlar. Bu, verilerinizin Spaces’te depolanırken şifreli olduğu anlamına gelir. Ek bir yapılandırma gerektirmez, ancak bu özelliğin aktif olduğundan emin olmak için DigitalOcean dokümantasyonunu kontrol etmek faydalı olabilir.
4. Ağ Güvenliği:
* Güvenlik Duvarı (Firewall): ClickHouse sunucunuzun güvenlik duvarını yapılandırarak, sadece gerekli portlara (örneğin, ClickHouse istemci portları ve S3 endpoint’ine giden HTTPS trafiği) izin verin. Gelen ve giden trafiği kısıtlayın.
* Özel Ağ (Private Networking): Eğer ClickHouse sunucunuz ve DigitalOcean Spaces aynı bölgede ise, mümkünse özel ağ üzerinden iletişimi tercih edin. Bu, verilerin genel internet üzerinden geçmesini engelleyerek hem güvenliği artırır hem de performans ve maliyet avantajları sağlayabilir (DigitalOcean Droplet’leri ve Spaces arasında özel ağ kullanımı için DigitalOcean’ın bölgesel kısıtlamalarını kontrol edin).
5. Denetim ve İzleme: ClickHouse ve DigitalOcean Spaces erişim loglarını düzenli olarak izleyin. Anormal erişim desenleri veya hata mesajları, güvenlik sorunlarının erken belirtileri olabilir.

Bu güvenlik önlemlerini uygulayarak, DigitalOcean Spaces’i ClickHouse’ta katmanlı depolama olarak kullanırken veri güvenliğinizi önemli ölçüde artırabilirsiniz.

Yaygın Sorunlar ve Giderme

DigitalOcean Spaces’i ClickHouse ile entegre ederken karşılaşabileceğiniz bazı yaygın sorunlar ve bunların çözüm yolları:

1. Bağlantı Hataları (Cannot connect to S3/Spaces)
* Sorun: ClickHouse, DigitalOcean Spaces endpoint’ine bağlanamıyor.
* Olası Nedenler:
* Yanlış endpoint URL’si.
* Güvenlik duvarı (firewall) kuralları S3 trafiğini engelliyor.
* Ağ bağlantısı sorunları (DNS çözümlenemiyor, rota yok).
* Yanlış bucket adı.
* Çözüm:
* config.xml dosyasındaki endpoint ve bucket adının doğru olduğundan emin olun.
* ClickHouse sunucusundan ping nyc3.digitaloceanspaces.com (veya kendi endpoint’iniz) ve curl -v https://nyc3.digitaloceanspaces.com komutlarını çalıştırarak ağ bağlantısını test edin.
* Sunucunuzun güvenlik duvarı kurallarını (iptables, ufw, güvenlik grupları) kontrol ederek 443 (HTTPS) portundan çıkan trafiğe izin verildiğinden emin olun.
* ClickHouse loglarını (/var/log/clickhouse-server/clickhouse-server.log) kontrol edin. Bağlantı hataları genellikle burada ayrıntılı olarak belirtilir.

2. İzin Hataları (Access Denied / Authentication Failed)
* Sorun: ClickHouse, Spaces bucket’ına erişmek için yetkilendirme hatası alıyor.
* Olası Nedenler:
* Yanlış access_key_id veya secret_access_key.
* DigitalOcean Spaces API anahtarının süresi dolmuş veya iptal edilmiş.
* Bucket’a erişim izinleri yetersiz.
* Çözüm:
* config.xml dosyasındaki API anahtarlarının doğru ve güncel olduğundan emin olun. Kopyala/yapıştır hatalarına dikkat edin.
* API anahtarlarını DigitalOcean kontrol panelinden tekrar kontrol edin veya yeni bir anahtar oluşturarak deneyin.
* Eğer anahtarları ortam değişkenlerinden okuyorsanız, bu değişkenlerin doğru ayarlandığından ve ClickHouse sürecinin bunları okuyabildiğinden emin olun.
* DigitalOcean Spaces anahtarları genellikle tüm Spaces’lere tam erişim sağlar. Bu durum nadiren bir izin sorunu yaratır, ancak yine de anahtarların geçerli olduğundan emin olun.

3. Veri Taşıma Sorunları (Data parts not moving to S3)
* Sorun: Veri parçaları beklediğiniz gibi yerel diskten DigitalOcean Spaces’e taşınmıyor.
* Olası Nedenler:
* storage_policy yanlış yapılandırılmış.
* move_factor eşiği henüz karşılanmamış (yerel disk yeterince dolu değil).
* S3 diskinde yerel metadata yolu (metadata_path) için izin sorunları.
* ClickHouse sunucusu yeniden başlatılmamış.
* Çözüm:
* config.xml dosyasındaki storage_policy ve move_factor ayarlarını dikkatlice gözden geçirin. Volume’lar ve disk isimleri doğru mu?
SELECT FROM system.disks; ve SELECT * FROM system.storage_policies; komutlarını çalıştırarak yapılandırmanın ClickHouse tarafından doğru algılandığını doğrulayın.
* Yerel diskinizin doluluk oranını kontrol edin. move_factor eşiğine ulaşılmadan taşıma başlamaz. Test için küçük bir move_factor (örn. 0.9) ayarlayabilir veya manuel taşıma yapabilirsiniz.
* metadata_path olarak belirtilen dizinin ClickHouse kullanıcısı tarafından yazılabilir olduğundan emin olun.
* Yapılandırma değişikliklerinden sonra ClickHouse sunucusunu yeniden başlattığınızdan emin olun.
* system.parts tablosunu sorgulayarak parçaların disk_name sütununu kontrol edin.

4. Performans Düşüşleri (Slow queries on cold data)
* Sorun: S3’e taşınan verilere yapılan sorgular çok yavaş.
* Olası Nedenler:
* Yüksek ağ gecikmesi.
* max_connections değeri çok düşük.
* Sorguların çok fazla gereksiz veri çekmesi.
* S3 hizmetinde kısıtlama (throttling).
* Çözüm:
* ClickHouse sunucusu ile Spaces bucket’ının aynı bölgede olduğundan emin olun.
* max_connections değerini artırarak daha fazla paralel S3 isteğine izin verin.
* Sorgularınızı optimize edin: sadece gerekli sütunları seçin, partisyon anahtarını WHERE koşullarında kullanın.
* ClickHouse loglarında S3 ile ilgili hata veya uyarı mesajlarını kontrol edin.

5. Disk Alanı Tükenmesi (Local disk full)
* Sorun: Yerel disk alanı tükeniyor ve otomatik taşıma başlamıyor.
* Olası Nedenler:
* move_factor çok yüksek ayarlanmış (örn. 0.9, yani disk %90 dolana kadar taşıma başlamaz).
* Çok büyük tek bir veri parçası veya partisyon yerel diskte takılı kalmış.
* S3 bağlantı sorunları nedeniyle taşıma başarısız oluyor.
* Çözüm:
* move_factor değerini daha düşük bir eşiğe ayarlayın (örn. 0.1 veya 0.2).
* Manuel olarak eski partisyonları S3’e taşıyın.
* ClickHouse loglarını kontrol ederek taşıma işlemlerinin neden başarısız olduğunu anlamaya çalışın.

Bu sorun giderme adımları, entegrasyon sürecinde karşılaşabileceğiniz çoğu sorunu çözmenize yardımcı olacaktır. Her zaman ClickHouse loglarını dikkatlice incelemek, sorunun kök nedenini bulmak için en iyi başlangıç noktasıdır.

Gelişmiş Kullanım Senaryoları

DigitalOcean Spaces’i ClickHouse’ta katmanlı depolama olarak kullanmak, basit “sıcak-soğuk” ayrımının ötesinde daha karmaşık ve güçlü senaryolara olanak tanır.

1. Çoklu S3/Spaces Diskleri:
* Senaryo: Farklı veri türleri veya farklı erişim gereksinimleri olan veriler için birden fazla DigitalOcean Spaces bucket’ı kullanmak isteyebilirsiniz. Örneğin, bir bucket’ı yüksek erişimli soğuk veriler için, diğerini ise daha az erişimli arşiv verileri için ayırabilirsiniz.
* Uygulama: config.xml dosyasında birden fazla tanımı yapabilirsiniz. Her birine benzersiz bir isim (örn. s3_disk_cold, s3_disk_archive) ve ilgili Spaces bucket bilgilerini atayın.
* Avantaj: Daha granüler maliyet kontrolü, farklı güvenlik politikaları uygulama yeteneği ve farklı veri yaşam döngüsü kuralları tanımlama esnekliği sağlar.

2. Farklı Politikalarla Farklı Tablolar:
* Senaryo: Tüm tablolarınızın aynı katmanlı depolama politikasına uyması gerekmeyebilir. Bazı tabloların verileri her zaman sıcak kalmalı, bazıları ise daha hızlı soğuk depolamaya geçmelidir.
* Uygulama: Birden fazla storage_policy tanımlayabilirsiniz. Her bir politika, farklı move_factor değerleri, farklı disk kombinasyonları veya farklı max_data_part_size_in_bytes ayarları içerebilir. Tabloları oluştururken ilgili storage_policy‘yi belirtin.
* Avantaj: Her tablo için özel depolama stratejileri uygulayarak kaynakları daha verimli kullanabilir ve her veri setinin performans gereksinimlerini karşılayabilirsiniz.

3. Arşivleme Stratejileri:
* Senaryo: Çok eski verilerinizi DigitalOcean Spaces’te süresiz olarak saklamak isteyebilirsiniz, ancak bu verilere erişim nadiren gerçekleşir ve performans kritik değildir.
* Uygulama:
* Bir cold_archive_volume tanımlayarak sadece S3 diskini kullanmasını sağlayın.
* ClickHouse’un TTL (Time-To-Live) özelliğini kullanarak eski partisyonları otomatik olarak bu arşiv politikasına taşıyabilirsiniz. Örneğin, ALTER TABLE ... MODIFY TTL event_time + INTERVAL 3 YEAR TO VOLUME 'cold_archive_volume'; komutu ile 3 yıldan eski verileri arşiv volume’una taşıyabilirsiniz.
* Alternatif olarak, DigitalOcean Spaces’in kendi yaşam döngüsü kurallarını kullanarak belirli bir süre sonra objeleri otomatik olarak silebilirsiniz (ancak bu, ClickHouse tarafından yönetilmez ve veri kaybına yol açabilir).
* Avantaj: Uzun vadeli veri saklama maliyetlerini düşürürken, yasal veya analiz gereksinimleri için verilerin erişilebilir kalmasını sağlar.

4. Uzak Yedekleme ve Kurtarma:
* Senaryo: ClickHouse verilerinizin DigitalOcean Spaces’te depolanması, doğal olarak uzak bir yedekleme mekanizması sağlar. Bir felaket durumunda, yeni bir ClickHouse kurulumu ile Spaces’teki verilere tekrar erişebilirsiniz.
* Uygulama: Yeni bir ClickHouse sunucusu kurun, aynı s3_disk ve storage_policy yapılandırmasını uygulayın. Ardından ATTACH TABLE komutunu kullanarak Spaces’teki veri parçalarını ClickHouse’a geri ekleyebilirsiniz.
* Avantaj: Felaket kurtarma (Disaster Recovery) yeteneklerini artırır ve veri kaybı riskini azaltır.

Bu gelişmiş senaryolar, DigitalOcean Spaces ve ClickHouse’un esnekliğini gösterir ve büyük veri ortamlarında depolama yönetimini optimize etmek için güçlü araçlar sunar.

Sonuç

Bu makalede, ClickHouse’un katmanlı depolama yeteneklerini DigitalOcean Spaces nesne depolama hizmetiyle nasıl entegre edebileceğimizi ayrıntılı bir şekilde inceledik. Modern veri analizi ihtiyaçları, sürekli büyüyen veri hacimleri ve artan depolama maliyetleri karşısında, katmanlı depolama stratejileri hayati bir öneme sahiptir. ClickHouse’un yüksek performanslı yerel disklerle uygun maliyetli, ölçeklenebilir ve S3 uyumlu DigitalOcean Spaces’i bir araya getirme yeteneği, bu zorlukların üstesinden gelmek için güçlü bir çözüm sunmaktadır.

Dijital Dönüşüm çağında, işletmelerin veri altyapılarını akıllıca yönetmeleri gerekmektedir. DigitalOcean Spaces’in sunduğu maliyet etkinliği, S3 uyumluluğu ve kullanım kolaylığı, ClickHouse’un veri yoğun iş yükleri için ideal bir harici depolama katmanı olmasını sağlamaktadır. Doğru yapılandırma ile, sık erişilen “sıcak” verilerin hızlı yerel disklerde kalmasını sağlarken, daha az sıklıkla erişilen “ılıman” ve “soğuk” verileri otomatik olarak Spaces’e taşıyabiliriz. Bu sayede, hem sorgu performansından ödün vermeden depolama maliyetlerini optimize edebilir hem de sınırsız ölçeklenebilirlik potansiyeline sahip olabiliriz.

Yapılandırma adımları, API anahtarlarının oluşturulmasından ClickHouse s3_disk ve storage_policy tanımlamalarına kadar uzanmaktadır. Veri taşıma mekanizmalarını anlamak, system.parts tablosu ile veri konumunu izlemek ve manuel taşıma seçeneklerini kullanmak, bu entegrasyonun başarılı bir şekilde yönetilmesi için kritik öneme sahiptir. Ayrıca, performans ve maliyet optimizasyonu ipuçları, güvenlik hususları ve yaygın sorun giderme yöntemleri, bu sistemi üretim ortamında güvenle çalıştırmak için gerekli bilgileri sağlamıştır.

Gelecekte, veri hacimleri artmaya devam ettikçe ve veri erişim desenleri çeşitlendikçe, katmanlı depolama çözümlerinin önemi daha da artacaktır. ClickHouse ve DigitalOcean Spaces kombinasyonu, bu evrilen ihtiyaçlara yanıt verebilecek esnek, ölçeklenebilir ve maliyet etkin bir altyapı sunarak, işletmelerin verilerinden maksimum değeri elde etmelerini sağlayacaktır. Bu entegrasyonu benimseyen kuruluşlar, büyük veri analizi yeteneklerini bir sonraki seviyeye taşıyarak rekabet avantajı elde edebilirler.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version