Verileri Lakebase'e çoğaltma

Bu rehber, harici bir Postgres veritabanından Lakebase'e mantıksal çoğaltma kullanarak veriyi nasıl çoğaltacağınızı gösterir. Lakebase abonelik alan taraf olarak hareket eder: kaynak veritabanınıza bağlanır, mevcut verileri kopyalar ve siz geçiş yapana kadar devam eden değişiklikleri uygular. Bunu, Amazon Aurora PostgreSQL veya Amazon RDS for PostgreSQL gibi başka bir Postgres sağlayıcısından veya kullanıcının yönettiği bir Postgres sunucusundan Lakebase'e bir veritabanı taşımak için kullanın.

Önkoşullar

  • Lakebase'in ulaşabileceği halka açık uç noktası olan bir kaynak Postgres veritabanı.

  • Kaynak veritabanında süper kullanıcı erişimi veya yönetilen bir Postgres hizmetinde yönetici hesabı. REPLICATION ayarlamak, wal_level özniteliğiyle bir rol oluşturmak ve bir yayın oluşturmak için bu erişim düzeyi gerekir.

  • Hedef veritabanı için bir Lakebase projesi.

  • Aboneliği oluşturmak için bir Lakebase Postgres rolü: databricks_superuser rolünün bir üyesi olan, örneğin proje sahibinin rolü, veya hedef veritabanında hem pg_create_subscription önceden tanımlı rolünün hem de CREATE ayrıcalığının verildiği bir rol. pg_create_subscription rolü tek başına yeterli değil. CREATE veritabanında olmadan, CREATE SUBSCRIPTIONpermission denied for database ile başarısız olur. databricks_superuser öğesini başka bir role vermek için Postgres rolleri oluşturma veya Bir rolü güncelleme bölümlerine bakabilirsiniz.

    GRANT pg_create_subscription TO <role_name>;
    GRANT CREATE ON DATABASE <database_name> TO <role_name>;
    

Lakebase'de mantıksal çoğaltma desteklenmektedir. Bunu etkinleştirmek için proje başına bir adım yok. Abone için Lakebase’de değişiklik gerekmez wal_level. Sadece kaynak yayıncı gerekli wal_level = logical.

Kaynak veritabanını hazırla

Kaynak Postgres veritabanınızda write-ahead log’u (WAL) logical olarak ayarlayın ve replikasyon için yeterli kapasite olduğunu doğrulayın. Aşağıdaki örnek, kullanıcı tarafından yönetilen Postgres içindir. Yönetilen Postgres sağlayıcınız farklı ayarlar kullanabilir:

ALTER SYSTEM SET wal_level = logical;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;

wal_level değişikliğinin yürürlüğe girmesi için kaynak veritabanını yeniden başlatın. Yönetilen bir hizmette, wal_level değerini logical olarak ayarlamak için sağlayıcının parametre grubunu veya bayraklarını kullanın. Örneğin, Amazon Aurora PostgreSQL'de, DB kümesi parametre grubunda rds.logical_replication değerini 1 olarak ayarlayın ve kümeyi yeniden başlatın. Amazon RDS for PostgreSQL'de, veritabanı parametre grubunda aynı parametreyi ayarlayın ve örneği yeniden başlatın.

Replikasyon için bir rol oluşturun ve çoğalttığınız tablolara okuma erişimi verin:

CREATE ROLE replication_user WITH REPLICATION LOGIN PASSWORD '<password>';
GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;

Bu CREATE ROLE ifade, kullanıcının yönettiği bir Postgres sunucusunda yazıldığı gibi çalışır. Bazı yönetilen Postgres sağlayıcıları bu REPLICATION özniteliğe doğrudan izin vermez ve bunun yerine sağlayıcıya özgü bir rol aracılığıyla çoğaltma erişimi sağlar. Kaynağınız yönetilen bir hizmette çalışıyorsa, sağlayıcının dokümantasyonunu takip ederek role çoğaltma erişimi verin, ardından sonraki adımlarda replication_user yerine bu rolü kullanın. Örneğin, Amazon Aurora PostgreSQL ve Amazon RDS for PostgreSQL'de, rolü WITH REPLICATION olmadan oluşturun ve sonra GRANT rds_replication TO replication_user çalıştırın.

Çoğaltmak istediğiniz tablolar için bir yayımlama oluşturun. Her tablonun bir PRIMARY KEY veya ayarlanmış bir replika kimliği olması gerekir. Postgres dokümantasyonunda Replika kimliği sayfasına bakınız.

CREATE PUBLICATION my_publication FOR TABLE orders, customers;

Lakebase'in kaynağa ulaşmasına izin verin

Abone olarak, Lakebase kaynak veritabanınıza dışarı arama yapar. Bu çıkış bağlantısı, hesabınızın ağ politikası tarafından yönetilir; bu politika, sunucusuz iş yüklerinin ulaşabileceği internet hedeflerini kontrol eder. Bir Lakebase proje ayarı veya veritabanı içi bir rol tarafından kontrol edilmez.

Değişiklik yapmanız gerekip gerekmediği, hesabınızın bir ağ politikası uygulayıp uygulamadığına bağlıdır:

  • Aktif ağ politikası yok: Lakebase, ulaşılabilir bir halka açık uç noktası olan herhangi bir yayıncıya ulaşabilir. Değişiklik gerekmez.
  • Etkin ağ ilkesi: kaynak veritabanı ana bilgisayarını hesap ağ ilkesinde izin verilen internet hedeflerine ekleyin. Bkz. Ağ ilkelerini yönetme. Eğer ana bilgisayar izinli değilse, abonelik oluşturduğunuzda reddedilir. Bkz . Sorun giderme.

Özel Bağlantı abone bağlantısı için desteklenmemektedir. Kaynak veritabanı, herkese açık uç noktası üzerinden erişilebilir olmalıdır.

Hedef tabloları oluşturun

Mantıksal çoğaltma veriyi kopyalar, şema değil. Çoğaltmaya başlamadan önce hedef Lakebase veritabanında kaynakla aynı adlara ve sütunlara sahip tablolar oluşturun. Bunları manuel olarak oluşturabilir veya şemayı kaynaktan dışa aktarıp Lakebase'e yükleyebilirsiniz. Yalnızca şemayı dökümle ifadesine bakın.

Hedef tabloları boş oluşturun. İlk tablo kopyası, hedef tablo zaten satır içeriyorsa tekrarlanan anahtarlarda veya kısıtlama ihlallerinde başarısız olur.

Aboneliği oluştur

Abonelik oluşturabilen bir rol olarak hedef Lakebase veritabanına bağlanın (bkz. Ön Koşullar), ardından kaynak yayıncıya bağlanan bir abonelik oluşturun:

CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<source-host> port=5432 dbname=<source-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;

Aboneliğin oluşturulması, kaynak yayıncıda bir replikasyon slotu başlatır, mevcut satırları kopyalar ve ardından devam eden değişiklikleri aktarır.

Warning

replikasyon slotu, kaynak veritabanının write-ahead log'u (WAL) tutmasını sağlar, ta ki Lakebase değişiklikleri aldığını doğrulayana kadar. Abonelik değişiklikleri tüketmeyi durdurursa, örneğin devre dışı bırakıldığında, bağlantısı kesildiğinde veya hata verdiğinde, WAL kaynakta sınırsız birikir. Bir üretim kaynağında, bu kaynağın depolama alanını doldurabilir ve bir kesintiye yol açabilir.

Çoğaltma çalışırken, slotun kaynakta ne kadar WAL tuttuğunu izleyin:

SELECT slot_name, active,
       pg_catalog.pg_size_pretty(pg_catalog.pg_wal_lsn_diff(pg_catalog.pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_catalog.pg_replication_slots;

Kendi kendini yöneten bir kaynakta riski sınırlamak için, bir slotun ne kadar WAL tutabileceğini sınırlayacak şekilde max_slot_wal_keep_size ayarlayın. Bir slot sınırı aşarsa, Postgres onu geçersiz kılar ve abonelik yeniden oluşturulmalıdır. Göçü bitirir bitirmez aboneliğinizi iptal edin. Bkz. Replikasyon slotları ve depolama.

Note

Lakebase abone olma işlemi başlatıldığında, kaynak veritabanınıza bağlanır ve replikasyon rolünün kimlik bilgilerini ona gönderir. sslmode=verify-full ile sslrootcert=system bağlantıyı şifreler ve kaynağın kimliğini doğrular; bu da iletilen kimlik bilgilerini ortadaki adam saldırısına karşı korur. Kaynağınız kamuya açık bir sertifika otoritesini kullandığında çalışır. Daha zayıf sslmode=require şifreler, ancak kaynağı doğrulamaz. Özel sertifika otoritesi kullanan bir kaynağın doğrulanması desteklenmemektedir.

Çoğaltmayı doğrulayın

Hedef Lakebase veritabanında, mevcut satırların geldiğini doğrulayın:

SELECT COUNT(*) FROM orders;

Kaynak üzerinde bir satır ekleyin veya güncelleyin, sonra hedefi tekrar sorgulayın. Değişiklik birkaç saniye içinde Lakebase'de ortaya çıkar.

İzle ve geçiş yap

İlk kopyayı ve devam eden farkı takip edin:

SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;

İlk kopyanın tamamlandığını doğrulamak için, abone üzerinde Monitor replication bölümünde tablo başına senkronizasyon durumu sorgusunu çalıştırın ve her tablo Ready (fully live) gösterene kadar bekleyin.

Hedef yetiştiğinde, kaynakta yazma işlemlerini durdurun, hedefin tam güncel olduğunu doğrulayın ve uygulamanızı Lakebase bağlantı detaylarına geçirin.

Mantıksal çoğaltma, dizi değerlerini veya kimlik sayaclarını kopyalamaz. Lakebase'te yazmaya devam etmeden önce, her hedef diziyi çoğaltılan verilerle eşleşecek şekilde sıfırlayın, yoksa SERIAL veya kimlik sütunlarına yapılan yeni eklemeler yinelenen birincil anahtarlar üretebilir:

SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('orders', 'id'), (SELECT MAX(id) FROM orders));

Uygulamanız Lakebase üzerinde çalıştıktan sonra, kaynaktan çoğaltmayı durdurmak için aboneliği bırakın. Kaynak ulaşılabilirken, aboneliği kaldırmak da üzerindeki çoğaltma yuvasını kaldırır. Bkz. Aboneliği veya yayını kaldırma.

İzleme ve temizlik için, Mantıksal çoğaltmayı yönetme ve izleme konusuna bakın.

Sonraki Adımlar