全部產品
Search
文件中心

Realtime Compute for Apache Flink:配置Postgres

更新時間:Jul 13, 2024

在使用Postgres的CDC源表Connector前,上遊的Postgres儲存需要滿足一些要求。本文將從阿里雲RDS PostgreSQL、Amazon RDS for PostgreSQL和自建PostgreSQL三種環境詳細為您介紹相關要求及操作。

背景資訊

在正式使用Postgres CDC之前,請先進行相應的配置。在本文中我們將分別介紹如何配置阿里雲RDS PostgreSQL、Amazon RDS for PostgreSQL和自建PostgreSQL。考慮到Postgres CDC是基於Postgres提供的邏輯訂閱機制來進行資料同步,為方便理解您可以參見邏輯解密基本概念邏輯訂閱原理與最佳實務來擷取相關的背景知識。

阿里雲RDS PostgreSQL

  • 阿里雲RDS PostgreSQL和VVP之間需要網路連通

  • 阿里雲RDS PostgreSQL伺服器配置要求

    • 版本限制

      目前僅支援同步10、11、12、13、14、15和16版本的PostgreSQL的資料。您可以通過執行select version()命令來查看PostgreSQL的版本。

    • 需要開啟邏輯解碼

      • 請設定wal_level = logical,詳情請參見設定執行個體參數。如果設定成功後,可以通過邏輯解碼文檔中的樣本進行測試和使用。

      • 請確保同步表的replica identity的層級為FULL

        您可以通過以下SQL代碼查看並修改相應參數。

        --查看replicaidentity。
        SELECT CASE relreplident
          WHEN'd'THEN'default'
        WHEN'n'THEN'nothing'
        WHEN'f'THEN'full'
        WHEN'i'THEN'index'
        ENDASreplica_identity
        FROMpg_class
        WHEREoid='mytablename'::regclass;
        
        --修改replicaidentity。
        ALTERTABLEmytablenameREPLICAIDENTITYFULL;
  • 資料同步外掛程式

    從阿里雲RDS PostgreSQL 10開始,PostgreSQL預設已經安裝了邏輯解碼(wal2json)和pgoutput外掛程式。其中,wal2json外掛程式要求RDS PostgreSQL執行個體的版本為11、12或13。而pgoutput外掛程式要求使用的PostgreSQL的版本不小於10。

    說明

    如果您使用pgoutput外掛程式來同步相關資料,則請確保您同步資料使用的帳號為高許可權帳號,詳情請參見建立帳號

Amazon RDS for PostgreSQL

  • Amazon RDS for PostgreSQL和VVP之間需要網路連通

    您需要允許VVP通過公網訪問Amazon RDS for PostgreSQL,詳情請參見Realtime ComputeFlink版如何訪問公網?認可訪問的IP段

  • Amazon RDS for PostgreSQL伺服器配置要求

    • 版本限制

      目前僅支援同步10、11、12、13、14、15和16版本的PostgreSQL的資料。您可以通過執行select version()命令來查看PostgreSQL的版本。

    • 需要開啟邏輯解碼

      • 請設定rds.logical_replication的值為1。

      • 請確保wal_level的值為logical。預設情況下,如果rds.logical_replicaiton的值被設定為1,則wal_level就自動化佈建為了logical。

      • 請確保需要同步的表的replica identity的層級為FULL。

        您可以通過以下SQL代碼查看並修改相應參數。

        --查看replica identity。
        SELECTCASErelreplident
         WHEN'd'THEN'default'
         WHEN'n'THEN'nothing'
         WHEN'f'THEN'full'
         WHEN'i'THEN'index'
         ENDASreplica_identity
        FROMpg_class
        WHEREoid='mytablename'::regclass;
        
        --修改replica identity。
        ALTERTABLEmytablenameREPLICAIDENTITYFULL;
      • 帳號角色要求

        預設情況下,只有AWS上的主賬戶在Amazon RDS for PostgreSQL上具有rds_replication角色,該角色保證了使用者可以管理邏輯槽(logical slots),並通過邏輯槽流讀資料。如果您要啟用主賬戶以外的使用者賬戶啟動邏輯複製,則必須授予賬戶rds_replication角色。例如,將rds_replication授予<my_user>。您必須具有超級使用者存取權限才能向使用者授予rds_replication角色。如果您要啟用主賬戶以外的賬戶建立初始快照集,則必須對要捕獲的表上的賬戶授予SELECT許可權。

    • 資料同步外掛程式

      請使用pgoutput作為同步外掛程式。

自建PostgreSQL

  • 自建PostgreSQL和VVP之間需要網路連通

    • 如果您的自建PostgreSQL部署在阿里雲上,且和VVP均處於同地區的同一VPC網路中,則PostgreSQL與VVP的網路是連通的。

    • 如果您的自建PostgreSQL沒有部署在阿里雲上,則需要有公網地址,使得VVP能夠訪問該地址。因此您需要通過VPN網關將自建PostgreSQL和VVP的網路打通,詳情請參見Realtime ComputeFlink版如何訪問公網?。同時,您還需要修改pg_hba.conf檔案,允許VVP訪問PostgreSQL,詳情請參見更新pg_hba.conf檔案

  • PostgreSQL伺服器配置要求

    • 版本限制

      目前僅支援同步9.6、10、11、12、13、14、15和16版本的PostgreSQL的資料。您可以通過執行select version()命令來查看PostgreSQL的版本。

    • 開啟邏輯解碼

      • 請確保wal_level的值為logical,修改postgresql.conf並重啟資料庫。

      • 請確保需要同步的表的replica identity的層級為FULL。

        您可以通過以下SQL代碼查看並修改相應參數。

        -- 查看replica identity。
        SELECT CASE relreplident
           WHEN 'd' THEN 'default'
           WHEN 'n' THEN 'nothing'
           WHEN 'f' THEN 'full'
           WHEN 'i' THEN 'index'
           END AS replica_identity
        FROM pg_class
        WHERE oid = 'mytablename'::regclass;
        
        -- 修改replica identity。
        ALTER TABLE mytablename REPLICA IDENTITY FULL;
      • 建立具有同步許可權的帳號

        資料同步帳號需要擁有REPLICATION和LOGIN許可權,以及需要同步表的SELECT許可權。

        CREATE ROLE <replication_user> REPLICATION LOGIN;
        
        GRANT SELECT ON <table_name> TO <name>;
    • 資料同步外掛程式

      PostgreSQL 10及以上的版本,預設已經安裝了同步外掛程式pgoutput。而對於其它版本或需要安裝其它同步外掛程式的,可以參見安裝邏輯同步外掛程式

      如果您使用pgoutput作為同步工具,則請確保該帳號是需要同步表的Owner。您可以參照如下步驟,確保同步帳號是需要同步表的Owner。

      -- 1.建立一個同步群組。
      CREATE ROLE <replication_group>;
      
      -- 2.將原來表的owner加入到同步群組中。
      GRANT REPLICATION_GROUP TO <original_owner>;
      
      -- 3.將同步帳號加入到同步群組中。
      GRANT REPLICATION_GROUP TO <replication_user>;
      
      -- 4.將相關的許可權轉給同步群組。
      ALTER TABLE <table_name> OWNER TO REPLICATION_GROUP;
      說明

      此時同步帳號只是單表的所有者,因此請在WITH參數內設定debezium.publication.autocreate.mode值為filtered。如果您覺得為每張表設定相關許可權過於繁瑣,則可以直接賦予同步帳號pg_monitor許可權。

      GRANT pg_monitor TO <replication_user>;