PostgreSQL 中的複製

  • 配置主伺服器

    • 要求:

      • 複製使用者進行復制活動
      • 用於儲存 WAL 檔案的目錄
    • 建立複製使用者

      createuser -U postgres replication -P -c 5 --replication

        + option -P will prompt you for new password
        + option -c is for maximum connections. 5 connections are enough for replication
        + -replication will grant replication privileges to the user
      
    • 在資料目錄中建立存檔目錄

      mkdir $PGDATA/archive

    • 編輯 pg_hba.conf 檔案

      這是主機基本身份驗證檔案,包含客戶端自動身份驗證的設定。新增以下條目:

            #hosttype    database_name     user_name       hostname/IP      method
             host        replication       replication     <slave-IP>/32    md5
      
    • 編輯 postgresql.conf 檔案

      這是 PostgreSQL 的配置檔案。

      wal_level = hot_standby

      此引數決定從屬伺服器的行為。

         `hot_standby` logs what is required to accept read only queries on slave server.
      
         `streaming` logs what is required to just apply the WAL's on slave.
      
         `archive` which logs what is required for archiving.
      

      archive_mode=on

      此引數允許使用 archive_command 引數將 WAL 段傳送到存檔位置。

      archive_command = 'test ! -f /path/to/archivedir/%f && cp %p /path/to/archivedir/%f'

      基本上,archive_command 的作用是將 WAL 段複製到存檔目錄。

      wal_senders = 5 這是 WAL 傳送方程序的最大數量。

      現在重啟主伺服器。

  • 將 primay 伺服器備份到從屬伺服器

    在伺服器上進行更改之前,請停止主伺服器。

要點:在完成所有配置和備份步驟之前,請勿再次啟動該服務。你必須將備用伺服器置於準備好作為備份伺服器的狀態。這意味著必須安裝所有配置設定,並且必須已同步資料庫。否則,流複製將無法啟動

  • 現在執行 pg_basebackup 實用程式

    pg_basebackup 實用程式將資料從主伺服器資料目錄複製到從資料目錄。

    $ pg_basebackup -h <primary IP> -D /var/lib/postgresql/<version>/main -U replication -v -P --xlog-method=stream

    -D: This is tells pg_basebackup where to the initial backup

    -h: Specifies the system where to look for the primary server

    -xlog-method=stream: This will force the pg_basebackup to open another connection and stream enough xlog while backup is running.
                         It also ensures that fresh backup can be started without failing back to using an archive.
  • 配置備用伺服器

    要配置備用伺服器,你將編輯 postgresql.conf 並建立名為 recovery.conf 的新配置檔案。

    hot_standby = on

    這指定是否允許你在恢復時執行查詢

    • 建立 recovery.conf 檔案

      standby_mode = on

      將連線字串設定為主伺服器。替換為主伺服器的外部 IP 地址。替換為名為 replication 的使用者的密碼

      `primary_conninfo =‘host = port = 5432 user = replication password =’

      (可選)設定觸發器檔案位置:

      trigger_file = '/tmp/postgresql.trigger.5432'

      你指定的 trigger_file 路徑是你希望系統故障轉移到備用伺服器時可以新增檔案的位置。檔案的存在觸發故障轉移。或者,你可以使用 pg_ctl promote 命令來觸發故障轉移。

  • 啟動備用伺服器

    你現在已經準備就緒,並準備啟動備用伺服器

歸因

本文主要源於並歸因於如何設定 PostgreSQL 以實現高可用性和熱備份複製,並對格式和示例進行了微小更改,並刪除了一些文字。該來源是在知識共享公共許可證 3.0下發布的,該許可證在此處進行了維護。