Mereplikasi data antara AlloyDB Omni dan database lainnya

Halaman ini memberikan langkah-langkah untuk mereplikasi data antara AlloyDB Omni dan database lainnya menggunakan ekstensi pglogical.

Untuk mengetahui informasi selengkapnya, lihat Tentang ekstensi pglogical dan terminologi dan komponen dasar pglogical.

Metode autentikasi yang didukung

Dua metode autentikasi utama yang digunakan dengan ekstensi pglogical adalah metode autentikasi sandi dan kepercayaan.

Metode autentikasi yang direkomendasikan adalah metode autentikasi kepercayaan. Untuk mengetahui informasi selengkapnya, lihat Metode autentikasi yang didukung.

Sebelum memulai

Anda dapat menginstal pglogical sebagai ekstensi dalam database tertentu.

Sebelum menerapkan ekstensi pglogical di AlloyDB Omni, pastikan Anda memenuhi persyaratan sistem berikut:

  • Akses ke cluster PostgreSQL non-AlloyDB Anda sebagai superuser.
  • Ekstensi pglogical diinstal di cluster PostgreSQL non-AlloyDB Anda. Untuk petunjuk penginstalan khusus rilis dan distribusi, lihat pglogical.
  • Server AlloyDB Omni diinstal dan dikonfigurasi. Untuk mengetahui petunjuk cara menginstal AlloyDB Omni, lihat Menginstal AlloyDB Omni.
  • Alamat IP untuk cluster PostgreSQL non-AlloyDB dan server host AlloyDB Omni.
  • Jaringan yang telah dibuat dan aman antara cluster PostgreSQL non-AlloyDB dan server host AlloyDB Omni. Konektivitas TCP di port PostgreSQL standar 5432 diperlukan.

Menyesuaikan parameter di penyedia non-AlloyDB

  1. Tetapkan parameter wal_level ke logical, dan tambahkan pglogical ke parameter shared_preload_libraries dalam file postgresql.conf. Ekstensi pglogical memerlukan serangkaian penyesuaian parameter minimal pada cluster penyedia non-AlloyDB.

    cp postgresql.conf postgresql.bak
    sed -r -i "s|(\#)?wal_level\s*=.*|wal_level=logical|" postgresql.conf
    sed -r -i "s|(\#)?(shared_preload_libraries\s*=\s*)'(.*)'.*$|\2'\3,pglogical'|" postgresql.conf
    sed -r -i "s|',|'|" postgresql.conf
  2. Pastikan parameter ditetapkan dengan benar:

    grep -iE 'wal_level|shared_preload_libraries' postgresql.conf
  3. Mulai ulang cluster non-AlloyDB agar perubahan parameter berlaku.

    Parameter lain mungkin sudah ditetapkan ke nilai yang memadai atau mungkin memerlukan penyesuaian, bergantung pada distribusi dan versi non-AlloyDB Anda.

    Periksa parameter berikut:

    • max_worker_processes: satu per database penyedia dan minimal satu per node pelanggan. Setidaknya 10 adalah standar untuk parameter ini.
    • max_replication_slots: satu per node di node penyedia.
    • max_wal_senders: satu per node di node penyedia.
    • track_commit_timestamp: ditetapkan ke on jika pembaruan terakhir atau pertama memenangkan resolusi konflik diperlukan.
    • listen_addresses: harus menyertakan alamat IP AlloyDB Omni atau menyebutkannya melalui blok CIDR yang mencakup.
  4. (Opsional) Jika penyedia non-AlloyDB Anda adalah Amazon RDS atau Aurora, ekstensi pglogical harus diaktifkan dan parameter yang diperlukan disesuaikan melalui penyesuaian cluster parameter group.

    1. Dalam grup parameter cluster yang ada atau baru, tetapkan parameter berikut:

      • rds.logical_replication ke 1
      • max_replication_slots ke 50
      • max_wal_senders ke 50
      • max_worker_processes ke 64
      • shared_preload_libraries ke pg_stat_statements, pglogical
    2. Mulai ulang cluster Amazon RDS atau Aurora agar penyesuaian grup parameter cluster diterapkan.

  5. Pastikan semua nilai parameter relevan:

    SELECT name, setting
    FROM pg_catalog.pg_settings
     WHERE name IN ('listen_addresses',
                    'wal_level',
                    'shared_preload_libraries',
                    'max_worker_processes',
                    'max_replication_slots',
                    'max_wal_senders',
                    'track_commit_timestamp')
     ORDER BY name;
    

Penyesuaian autentikasi berbasis host ke cluster penyedia non-AlloyDB Omni

pglogical membuat koneksi TCP lokal ke database penyedia. Oleh karena itu, Anda harus menambahkan alamat IP server host ke file DATA_DIR/pg_hba.conf AlloyDB Omni dengan DATA_DIR adalah jalur sistem file ke direktori data Anda—misalnya, /home/$USER/alloydb-data.

  1. Tambahkan entri autentikasi kepercayaan untuk server lokal, khusus untuk pengguna pglogical_replication baru, ke file DATA_DIR/pg_hba.conf.

    Selain itu, node pelanggan harus dapat mengautentikasi terhadap node penyedia. Tambahkan alamat IP setiap node pelanggan atau rentang IP blok CIDR yang sesuai ke file DATA_DIR/pg_hba.conf:

    echo -e "# pglogical entries:
    host all pglogical_replication samehost trust
    host all pglogical_replication SERVER_IP_ADDRESS/32 trust
    " | column -t | sudo tee -a DATA_DIR/pg_hba.conf

    Ganti SERVER_IP_ADDRESS dengan alamat IP instance AlloyDB Omni utama yang akan direplikasi.

  2. Pastikan entri sudah benar:

    tail -3 DATA_DIR/pg_hba.conf
  3. Mulai ulang cluster non-AlloyDB agar perubahan parameter berlaku.

Menyesuaikan parameter ke cluster pelanggan AlloyDB Omni

pglogical juga memerlukan serangkaian penyesuaian parameter minimum pada cluster pelanggan AlloyDB Omni. Anda harus menambahkan pglogical ke parameter shared_preload_libraries dalam file DATA_DIR/postgresql.conf. Jika ada database dalam cluster yang bertindak sebagai database penyedia, buat perubahan parameter yang diperlukan untuk database penyedia.

  1. Sesuaikan parameter:

    sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.conf
  2. Pastikan parameter ditetapkan dengan benar:

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. Mulai ulang AlloyDB Omni agar perubahan parameter diterapkan:

    Docker

     docker container restart CONTAINER_NAME

    Ganti CONTAINER_NAME dengan nama yang Anda tetapkan ke penampung AlloyDB Omni saat Anda memulainya.

    Podman

     podman container restart CONTAINER_NAME

    Ganti CONTAINER_NAME dengan nama yang Anda tetapkan ke penampung AlloyDB Omni saat Anda memulainya.

  4. Tetapkan nilai default AlloyDB Omni untuk parameter database penyedia lainnya:

    • max_worker_processes: Satu per database penyedia dan satu per node pelanggan.
    • track_commit_timestamp: Tetapkan ke on jika update terakhir/pertama menang dan penyelesaian konflik diperlukan.
  5. Pastikan semua nilai parameter relevan:

    Docker

    docker exec CONTAINER_NAME psql -h localhost -U postgres -c "
    SELECT name, setting
      FROM pg_catalog.pg_settings
     WHERE name IN ('listen_addresses',
                    'wal_level',
                    'shared_preload_libraries',
                    'max_worker_processes',
                    'max_replication_slots',
                    'max_wal_senders',
                    'track_commit_timestamp')
         ORDER BY name;
    "

    Podman

    podman exec CONTAINER_NAME psql -h localhost -U postgres -c "
    SELECT name, setting
      FROM pg_catalog.pg_settings
     WHERE name IN ('listen_addresses',
                    'wal_level',
                    'shared_preload_libraries',
                    'max_worker_processes',
                    'max_replication_slots',
                    'max_wal_senders',
                    'track_commit_timestamp')
         ORDER BY name;
    "

Penyesuaian autentikasi berbasis host ke cluster pelanggan AlloyDB Omni

pglogical membuat koneksi TCP lokal ke database pelanggan AlloyDB Omni. Oleh karena itu, Anda harus menambahkan alamat IP server host pelanggan ke file DATA_DIR/pg_hba.conf AlloyDB Omni.

  1. Tambahkan entri autentikasi kepercayaan untuk server lokal, khusus untuk pengguna pglogical_replication baru, ke file DATA_DIR/pg_hba.conf:

    echo -e "# pglogical entries:
    host all pglogical_replication samehost trust
    " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
  2. Pastikan entri sudah benar:

    tail -2 DATA_DIR/pg_hba.conf
  3. Mulai ulang AlloyDB Omni agar perubahan autentikasi diterapkan:

    docker container restart CONTAINER_NAME

Membuat pengguna pglogical di cluster penyedia dan pelanggan

Anda harus membuat pengguna baru di cluster penyedia dan pelanggan. pglogical mengharuskan pengguna memiliki atribut superuser dan replication.

  1. Di cluster penyedia AlloyDB Google Cloud , buat peran pengguna:

    CREATE USER pglogical_replication LOGIN PASSWORD 'secret';
    ALTER USER pglogical_replication WITH replication;
    ALTER USER pglogical_replication WITH superuser;
    
  2. (Opsional) Jika penyedia non-AlloyDB Anda adalah Amazon RDS atau Aurora, Anda harus memberikan peran berikut:

    GRANT rds_superuser TO replication_user;
    

Menambahkan pglogical dan node ke database penyedia non-AlloyDB

  1. Berikan hak istimewa yang diperlukan.

    Anda harus menginstal ekstensi pglogical di setiap database dan memberikan izin usage kepada pengguna database pglogical.

    Misalnya, jika database Anda adalah my_test_db, jalankan perintah berikut:

    CREATE EXTENSION IF NOT EXISTS pglogical;
    GRANT usage ON SCHEMA pglogical TO pglogical_replication;
    
  2. Buat node pglogical untuk database penyedia. node_name bersifat arbitrer dan string dsn harus berupa koneksi TCP yang valid kembali ke database yang sama.

    Misalnya, untuk database my_test_db, jalankan perintah berikut:

    SELECT pglogical.create_node(node_name := 'provider', dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
    

Membuat tabel dan menambahkannya ke kumpulan replikasi default

Buat tabel dan tambahkan ke kumpulan replikasi default di database penyedia non-AlloyDB.

  1. Buat tabel pengujian bernama test_table_1 di database penyedia:

    CREATE TABLE test_table_1 (col1 INT PRIMARY KEY);
    INSERT INTO test_table_1 VALUES (1),(2),(3);
    
  2. Tambahkan tabel pengujian secara manual ke set replikasi default. Anda dapat membuat set replikasi pglogical kustom, atau menggunakan set replikasi default. Beberapa set replika default seperti default, default_insert_only, dan ddl_sql dibuat saat Anda membuat ekstensi. Anda dapat menambahkan tabel dan urutan ke set replika satu per satu, atau sekaligus untuk skema yang ditentukan.

    -- Add the specified table to the default replication set:
    SELECT pglogical.replication_set_add_table(set_name := 'default', relation := 'test_table_1', synchronize_data := TRUE);
    
    -- Check which tables have been added to all replication sets:
    SELECT * FROM pglogical.replication_set_table;
    
  3. (Opsional) Tambahkan semua tabel dalam skema yang ditentukan, seperti public:

    -- Add all "public" schema tables to the default replication set:
    SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
    
    -- Check which tables have been added to all replication sets:
    SELECT * FROM pglogical.replication_set_table;
    
    -- Add all "public" schema sequences to the default replication:
    SELECT pglogical.replication_set_add_all_sequences('default', ARRAY['public']);
    
    -- Check which sequences have been added to all replication sets:
    SELECT * FROM pglogical.replication_set_seq;
    
  4. Hapus tabel dari kumpulan replikasi default. Jika ada tabel dalam skema yang tidak memiliki kunci utama atau identitas replika, hanya pernyataan INSERT yang dapat direplikasi. Jika telah menambahkan tabel tersebut ke set replikasi default secara otomatis melalui fungsi replication_set_add_all_tables, Anda harus menghapusnya secara manual dari set replikasi tersebut dan menambahkannya ke set default_insert_only.

    -- Remove the table from the **default** replication set:
    SELECT pglogical.replication_set_remove_table(set_name := 'default', relation := 'test_table_2');
    
    -- Manually add to the **default_insert_only** replication set:
    SELECT pglogical.replication_set_add_table(set_name := 'default_insert_only', relation := 'test_table_2');
    

    Secara opsional, jika Anda ingin menambahkan tabel yang baru dibuat ke replika yang ditetapkan secara otomatis, tambahkan pemicu pglogical_assign_repset seperti yang disarankan di sumber pglogical.

Menyalin database ke cluster pelanggan AlloyDB Omni

  1. Buat cadangan khusus skema database sumber menggunakan utilitas pg_dump.

  2. Jalankan perintah pg_dump dari server pelanggan AlloyDB Omni menggunakan alamat IP atau endpoint server non-AlloyDB Anda.

    pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sql
  3. Impor cadangan ke database pelanggan di server AlloyDB Omni pelanggan:

    Docker

    docker exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql

    Podman

    podman exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql

Tindakan ini akan membuat database dan skema, tanpa data baris apa pun. Data baris direplikasi oleh ekstensi pglogical. Salin atau buat ulang pengguna atau peran lain yang diperlukan secara manual.

Membuat node dan langganan di database pelanggan AlloyDB Omni

  1. Buat node di database pelanggan AlloyDB Omni. Tambahkan sandi ke dsn jika Anda memilih untuk menggunakan autentikasi sandi.

    Docker

    docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
    SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication');
    "

    Podman

    podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
    SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication');
    "
  2. Buat langganan di database pelanggan, yang mengarah kembali ke database penyedia di server penyedia AlloyDB Omni.

    Docker

    docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
    SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
    "

    Podman

    podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
    SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
    "
  3. Dalam beberapa detik atau menit, data awal akan direplikasi dari penyedia ke pelanggan:

    Docker

    docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
    SELECT * FROM test_table_1 ORDER BY 1;
    "

    Podman

    podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
    SELECT * FROM test_table_1 ORDER BY 1;
    "

    Baris tambahan yang ditambahkan ke database penyedia juga replikasikan secara real time dalam hitungan detik.

Pertimbangan deployment pglogical tambahan

Ekstensi pglogical memiliki banyak fitur lanjutan yang tidak tercakup dalam dokumen ini. Banyak fitur ini berlaku untuk penerapan Anda. Anda dapat mempertimbangkan fitur lanjutan berikut:

  • Penyelesaian konflik
  • Replikasi multimaster dan dua arah
  • Penyertaan urutan
  • Prosedur peralihan dan failover

Langkah selanjutnya