postgres流複製,主從環境配置

主機規劃

  • 主庫ip: 192.168.1.100
  • 備庫ip: 192.168.1.101

192.168.1.100 主庫的配置

  • 修改pg_hba.conf,增加replica用戶,進行同步。

    host replication replica 192.168.1.101/32 md5
  • 主庫增加用戶,賦予登錄和備份的權限

    CREATE ROLE replica login replication encrypted password 'replica'
  • 修改主庫postgresql.conf

    wal_level = hot_standby  # wal級別
    max_wal_senders = 32 # 最多可以有幾個流複製連接
    wal_keep_segments = 256 # 流複製保留的最多的xlog數目
    wal_sender_timeout = 60s # 設置流複製主機發送數據的超時時間
    max_connections = 100 # 從庫的max_connections必須要大於主庫
  • 重啓主庫

    pg_ctl stop  -D /mnt/postgresql/data
    pg_ctl start -D /mnt/postgresql/data
  • 備庫測試連接主庫 (postgres@2017)

    psql -h 192.168.1.100 -p 5432 -U postgres

192.168.1.101從庫的配置

  • 創建備機數據庫備份目錄

    mkdir -p /mnt/postgresql_standby/data
  • 備機做基礎備份

    pg_basebackup -F p --progress -D $PGDATA -X stream -h 192.168.1.100 -p 5432 -U replica -W
  • 修改recovery.conf (文件可以從pg的安裝目錄的share文件夾中獲取)

    cp /usr/pgsql-9.5/share/recovery.conf.sample /mnt/postgresql_standby/data/recovery.conf
  • 修改recovery.conf

    standby_mode = on  # 這個說明這臺機器爲從庫
    primary_conninfo = 'host=192.168.1.100 port=5432 user=replica password=replica'  # 這個說明這臺機器對應主庫的信息
    recovery_target_timeline = 'latest' # 這個說明這個流複製同步到最新的數據
  • 修改從庫postgresql.conf的配置

    max_connections = 1700 # 一般查多於寫的應用從庫的最大連接數要比較大
    hot_standby = on  # 說明這臺機器不僅僅是用於數據歸檔,也用於數據查詢
    max_standby_streaming_delay = 30s # 數據流備份的最大延遲時間
    wal_receiver_status_interval = 1s  # 多久向主報告一次從的狀態,當然從每次數據複製都會向主報告狀態,這裏只是設置最長的間隔時間
    hot_standby_feedback = on # 如果有錯誤的數據複製,是否向主進行反饋
  • 配置完後重啓從服務器

    pg_ctl stop -D $PGDATA
    pg_ctl start -D $PGDATA

驗證是否部署成功

  • 在主節點上執行:

    select client_addr,sync_state from pg_stat_replication;
    
  • 還可以分別在主、從節點上查看

    ps aux | grep postgres
  • 查看備庫落後主庫多少字節的WAL日誌:

    postgres=# select pg_xlog_location_diff(pg_current_xlog_location(),replay_location)from pg_stat_replication;

    ————–2017-11-25 補充—————-

    • 可能會遇到”FATAL: requested WAL segment00800002A0 has already been removed”
      解決方法
      1. 增大wal_keep_segments
      2. 歸檔,出現這樣情況,從歸檔中拷貝過來(不適用)
      3. 啓用replication slot (pg9.4以後纔有)
    • 在postgresql.conf中添加

          max_replication_slots = 2000
    • 在拷貝到備庫之前,主庫要創建一個slot:

      postgres=# SELECT * FROM pg_create_physical_replication_slot('node_a_slot');
        slot_name  | xlog_position
      -------------+---------------
       node_a_slot |
      
      postgres=# SELECT * FROM pg_replication_slots;
        slot_name  | slot_type | datoid | database | active | xmin | restart_lsn
      -------------+-----------+--------+----------+--------+------+-------------
       node_a_slot | physical  |        |          | f      |      |
      (1 row)
    • 在備庫的recovery.conf文件中添加一行:

      standby_mode = 'on'
      primary_conninfo = 'host=192.168.4.225 port=19000 user=wslu password=xxxx'
      primary_slot_name = 'node_a_slot'

參考:
http://blog.csdn.net/prettyshuang/article/details/51777645

發佈了116 篇原創文章 · 獲贊 47 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章