Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
PostgreSQL için Azure Veritabanı hizmetindeki elastik kümeler, PostgreSQL'in yatay parçalanması için postgreSQL'e açık kaynak Citus uzantısının yönetilen bir teklifidir.
Citus yalnızca bir uzantı olsa da, birden çok PostgreSQL örneğini bağlar. PostgreSQL için Azure Veritabanı esnek sunucu örneği Citus ile dağıtıldığında, birden çok PostgreSQL örneğinin yönetimini ve yapılandırmasını tek bir kaynak olarak işler. Ayrıca düğümleri otomatik olarak ayarlar ve Citus uzantısı tarafından bilinir hale getirir.
Hizmet üzerindeki elastik kümeler iki parçalama modeli sunar: satır tabanlı parçalama ve şema tabanlı parçalama. Daha fazla bilgi edinmek istiyorsanız parçalama modelleri hakkındaki açık kaynak belgelerine bakın.
Mimari
Elastik küme, PostgreSQL için Azure Veritabanı esnek sunucu örneklerinin bir veya daha fazla düğümünden oluşur. Bu örnekler otomatik olarak bilinir ve bir Citus kümesi oluşturmak için birbirine bağlanır. Düğümlerin aynı işlem ve depolama katmanında olması gerekir ve tekdüzen ölçeklendirilerek daha yüksek veya daha düşük katmanlara ölçeklendirilebilir.
Elastik kümeler, "paylaşılan hiçbir şey" mimarisinde birbirleriyle eşgüdüm sağlamak için esnek sunucuların (düğümler olarak adlandırılır) örneklerini kullanır. Mimari ayrıca kümeye daha fazla düğüm ekleyerek veritabanının ölçeklendirilmesini sağlar.
5432 numaralı bağlantı noktasını kullanarak kümenize bağlandığınızda, belirlenen koordinatör düğümüne bağlanırsınız. Elastik kümeler, bağlantı noktası 7432 kullanarak bağlandığınızda, beşli grup karma yöntemiyle kümedeki bağlantı yükünü dengelenmenize olanak sağlar. 7432'yi kullanarak şu anda koordinatör olarak belirlenen düğüme inebilirsiniz. Tabloları dağıtma gibi küme genelindeki bazı işlemler için 5432 numaralı bağlantı noktası üzerinden bağlanmanız gerekebilir. Uygulama şeması yükseltmeleri ve benzer değişiklikler gerçekleştirmeyi planlarken her zaman bağlantı noktası 5432'ye bağlanmanızı kesinlikle öneririz. Elastik kümelerde PgBouncer'ı etkinleştirirseniz, her düğümdeki PgBouncer örnekleri arasındaki bağlantıların yükünü dengelemek için 8432 numaralı bağlantı noktasını kullanabilirsiniz (veya belirlenen koordinatör için 6432 numaralı bağlantı noktasını kullanabilirsiniz).
PostgreSQL için Cosmos DB'nin aksine düğüm adresleri dışarıdan kullanıma sunulmaz. gibi pg_dist_nodeCitus meta veri tablolarına bakarsanız, örnektekiyle 10.7.0.254 aynı IP adresine ancak farklı bağlantı noktası numaralarına sahip tüm düğümleri fark edebilirsiniz.
select nodeid, nodename, nodeport from pg_dist_node;
nodeid | nodename | nodeport
--------+------------+----------
1 | 10.7.0.254 | 7000
2 | 10.7.0.254 | 7001
(2 rows)
Azure'ın altyapısında, bu düğümler aynı makinede farklı bağlantı noktaları gibi görünse de farklı sanal makinelerde yaşar.
Citus hakkında daha fazla bilgi edinmek için resmi açık kaynak proje belgelerine göz atın.
Varsayılan olarak, Citus ile oluşturulan tablolar ve şemalar küme arasında otomatik olarak dağıtılamaz. Bir parçalama modeline karar vermeniz ve şemaları dağıtmaya veya tablo verilerinizi satır tabanlı parçalama ile dağıtmaya karar vermeniz gerekir.
Dağıtılmış tablolardaki her sorgu için sorgulanan düğüm onu tek bir düğüme yönlendirir veya birkaç düğüm arasında paralelleştirir. Karar, gerekli verilerin tek bir düğümde mi yoksa birden çok düğümde mi yer aldığına bağlıdır. Şema tabanlı parçalama ile koordinatör sorguları doğrudan şemayı barındıran düğüme yönlendirir. Hem şema tabanlı parçalama hem de satır tabanlı parçalamada düğüm, meta veri tablolarına danışarak ne yapacağına karar verir. Bu tablolar düğümlerin konumunu ve sistem durumunu ve düğümler arasında veri dağılımını izler.
Veriler parçalama modellerinden biri kullanılarak dağıtıldıktan sonra, DML (Veri Değiştirme Dili) işlemlerini (SELECT, UPDATE, INSERT, DELETE) gerçekleştirmek için düğümlerden herhangi birine bağlanabilirsiniz. Tüm düğümler, sorgu için gereken verileri bulmak için gereken meta verileri içerir ve sorguyu yanıtlamak için bu verileri alabilir.
DDL (Veri Tanım Dili) işlemleri ve küme genelindeki işlemler şu anda koordinatör rolünü barındıran düğümle sınırlıdır. 7432 numaralı bağlantı noktasını kullanmak yerine 5432 numaralı bağlantı noktasına bağlanarak DDL ve küme genelinde işlemler gerçekleştirdiğinizden emin olun.
Yeni düğümler ekleyerek ve üzerindeki verileri yeniden dengeleme yoluyla elastik kümenin ölçeğini genişletebilirsiniz. Yeniden dengeleme çevrimiçi bir işlemdir ve çalışan iş yüklerini engellemez.
Parçalar
Önceki bölümde dağıtılmış tabloların çalışan düğümlerinde parça olarak nasıl depolandığı açıklanmıştır. Bu bölümde, bu parçalar hakkında daha fazla teknik ayrıntı ele alınmaktadır.
Meta pg_dist_shard veri tablosu, sistemdeki her dağıtılmış tablonun her parçası için bir satır içerir. Satır, bir karma alanda (shardid, shardminvalue) bir tamsayı aralığına sahip bir parça tanımlayıcısıyla (shardmaxvalue) eşleşir.
SELECT * from pg_dist_shard;
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
---------------+---------+--------------+---------------+---------------
github_events | 102026 | t | 268435456 | 402653183
github_events | 102027 | t | 402653184 | 536870911
github_events | 102028 | t | 536870912 | 671088639
github_events | 102029 | t | 671088640 | 805306367
(4 rows)
Düğüm hangi parçanın satırını barındırdığını belirlemek istiyorsa, satırdaki github_eventsdağıtım sütununun değerini karma olarak oluşturur. Ardından düğüm, karma değerin hangi parça aralığında bulunduğunu denetler. Aralıklar, karma işlevinin görüntüsünün kendi kopuk birleşimleri olması için tanımlanır.
Parça yerleşimleri
Parça 102027 söz konusu satırla ilişkili olduğunu varsayalım. Satır, çalışanlardan birinde adlı github_events_102027 bir tabloda okunur veya yazılır. Meta veri tablolarında depolanan bilgilerle uzantı, bu çalışanın ne olduğunu belirler. Parçanın çalışanla eşlemesi parça yerleşimi olarak bilinir.
Düğüm, sorguları gibi github_events_102027 belirli tablolara başvuran parçalara yeniden yazar ve bu parçaları uygun çalışanlarda çalıştırır. Aşağıda, tanımlayıcı 102027 olan parça tutan düğümü bulmak için arka planda çalıştırılacak bir sorgu örneği verilmiştır.
SELECT
shardid,
node.nodename,
node.nodeport
FROM pg_dist_placement placement
JOIN pg_dist_node node
ON placement.groupid = node.groupid
AND node.noderole = 'primary'::noderole
WHERE shardid = 102027;
┌─────────┬───────────┬──────────┐
│ shardid │ nodename │ nodeport │
├─────────┼───────────┼──────────┤
│ 102027 │ localhost │ 5433 │
└─────────┴───────────┴──────────┘