配置 wal2json

IBM Cloud® Databases for PostgreSQL 部署支援 wal2json 插件,在您的部署上啟用 邏輯解碼

附註:

  • 已停用: PostgreSQL 9.6 和 10 版本已棄用此外掛程式。
  • 支援: 僅適用於 PostgreSQL 11 及以上版本。
  1. 首先,您需要 配置wal_levelmax_replication_slotsmax_wal_senders 設定。 將 wal_level 改為 logicalmax_replication_slotsmax_wal_senders 都需要設定為大於 20 的值Databases for PostgreSQL

    curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/configuration
      -H 'Authorization: Bearer <>'
      -H 'Content-Type: application/json'
      -d '{"configuration": {
            "wal_level": "logical",
            "max_replication_slots": 21,
            "max_wal_senders": 21
            }
          }'
    
  2. repl 使用者 設定密碼。 任何使用者的密碼都可以使用Cloud Databases CLI 外掛程式 cdb deployment-user-password 指令或Cloud Databases API /deployments/{id}/users/{username} 端點來變更。 repl 使用者俱有 REPLICATION 權限,wal2json 插件在您為其設定密碼後使用它。

  3. 透過Cloud Databases API 在資料庫上建立複製槽。 向 /deployments/{id}/postgresql/logical_replication_slots 端點發送 POST 請求。

    curl -X POST https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/postgresql/logical_replication_slots   -H 'Authorization: Bearer <>'
      -H 'Content-Type: application/json'
      -d '{"logical_replication_slot": {
           "name": "<slot_name>",
           "database_name": "<database_name>",
           "plugin_type": "wal2json"
           }
         }'
    

    插件類型必須是 wal2json。 該資料庫必須是現有資料庫。 插槽名稱只能包含小寫字母、數字和底線符號。 您可以連線到任何資料庫,並執行下列指令,檢查複製插槽是否存在:

    SELECT * FROM pg_replication_slots WHERE slot_name = '<slot_name>';
    
  4. 若要測試外掛程式,請從指令列執行 pg_recvlogical。 安裝PostgreSQL後即可使用該指令。 使用您部署的主機和連接埠,以及您透過 API 建立的資料庫和插槽名稱。

    PGSSLMODE=require pg_recvlogical -d <DATABASE NAME> -U repl -h <HOST> -p <PORT>    --slot <SLOT NAME> --start -o pretty-print=1 -f -
    
  5. ibmclouddb 上建立一個表格並插入一些資料。 確保插入內容出現在正在執行的命令列中 pg_recvlogical

    表格建立不會出現。

wal2json 注意事項與提示

  • wal_level 設為 logical 會增加 WAL 檔案的大小,因為PostgreSQL需要更多資料來完成邏輯解碼。 如果您不使用 wal2json,請將 wal_level 保留為預設值。 較大的 WAL 檔案可能意味著需要更多的磁碟空間。 寫入吞吐量可能會降低,複製延遲會影響高可用性和唯讀副本,備份恢復時間也會延長。

  • 邏輯解碼對複製內容有一系列限制。 其中一些包括模式/DDL、序列、TRUNCATE 和大物件。

  • 當發生受控 HA 切換時,複製事件可能會多次傳遞。 下游應用程式必須能夠處理多次傳遞的事件。

  • 如果您建立邏輯複製槽,且使用者未連線並使用更改,則您的部署將面臨磁碟空間不足的風險。 複製槽告訴PostgreSQL保留所有包含消費者所需變更的交易日誌。 如果沒有任何內容消耗這些更改,PostgreSQL會繼續收集它們,直到磁碟空間不足。 您可以使用 IBM Cloud® Monitoring整合來 監控磁碟空間。 如果空間不足,您可以 擴展磁碟,以允許資料庫啟動。 然後,您可以開始使用變更或刪除插槽。

  • 您可以檢查特定複製槽正在使用多少磁碟空間以及該複製槽是否有活動使用者。 使用 admin 使用者執行以下命令之一:

    PostgreSQL 10.x及更高版本

    SELECT slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(),restart_lsn)) AS lag, active from pg_replication_slots WHERE slot_type='logical';
    

    PostgreSQL 9.x

    SELECT slot_name, pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(),restart_lsn)) AS lag, active FROM pg_replication_slots WHERE slot_type='logical';
    

如果您發現部署中的磁碟使用率高於預期,請透過檢查您的複製槽是否有使用者並且執行部署時磁碟空間是否不足來進行故障排除。