天天看點

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

1 備份原理

postgresql在資料目錄下的pg_xlog子目錄中維護了一個WAL日志檔案,該檔案用于記錄資料庫檔案的每次改變,這種日志檔案機制提供了一種資料庫熱備份的方案,即:在把資料庫使用檔案系統的方式備份出來的同時也把相應的WAL日志進行備份,即使備份出來的資料塊不一緻,也可以重放WAL日志把備份的内容推到一緻狀态。這也就是基于時間點的備份(Point-in-Time Recovery),簡稱PITR。

把WAL日志傳送到另一台伺服器有兩種方式

1.WAL日志歸檔(base-file)

2.流複制(streaming replication)

第一種是寫完一個WAL日志後,才把WAL日志檔案拷貝到standby資料庫中,就是通過cp指令實作遠端備份,這樣通常備份會落後主庫一個WAL日志檔案。而第二種流複制是postgresql9.x之後才提供的新的傳遞WAL日志的方法,它的好處是隻要master庫一産生日志,就會馬上傳遞到standby庫,同第一種相比有更低同步延遲,是以我們肯定會選擇流複制的方式。

在實際操作之前還有一點需要說明的是standby的搭建中最關鍵的一步,在standby中生成master的基礎上備份。postgresql9.1之後提供了一個很友善的工具,pg_basebackup,關于它的詳細介紹和參數可以在官網中檢視。

2 基本環境

系統版本 主機名 IP位址 postgresql版本 角色
10.0.0.14 postgresql-master 10.0.0.14 9.5.14 主庫
10.0.0.15 postgresql-slave 10.0.0.15 9.5.14 從庫

說明:兩台伺服器都已經提前用yum方式安裝好了postgresql 9.5,本文檔配置的是主從複制,主庫可以讀寫,從庫隻能讀取不能寫入資料。

3 主庫配置

3.1 修改配置檔案

cat >>/var/lib/pgsql/9.5/data/postgresql.conf <<EOF

wal_level = hot_standby     #(預設是minimal)

max_wal_senders=2           #(預設是0)

wal_keep_segments=64        #(預設是0)

EOF

說明

wal_level表示啟動搭建Hot Standby,max_wal_senders則需要設定為一個大于0的數,它表示主庫最多可以有多少個并發的standby資料庫,而最後一個wal_keep_segments也應當設定為一個盡量大的值,以防止主庫生成WAL日志太快,日志還沒有來得及傳送到standby就被覆寫,但是需要考慮磁盤空間允許,一個WAL日志檔案的大小是16M

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

如上圖,一個WAL日志檔案是16M,如果wal_keep_segments設定為64,也就是說将為standby庫保留64個WAL日志檔案,那麼就會占用16*64=1GB的磁盤空間,是以需要綜合考慮,在磁盤空間允許的情況下設定大一些,就會減少standby重新搭建的風險。接下來還需要在主庫建立一個超級使用者來專門負責讓standby連接配接去拖WAL日志

3.2 建立同步使用者

建立同步使用者

postgres=# create user rep1 superuser password '123456';

修改配置檔案

vim /var/lib/pgsql/9.5/data/pg_hba.conf

86 # Allow replication connections from localhost, by a user with the

87 # replication privilege.

88 #local   replication     postgres                                peer

89 #host    replication     postgres        127.0.0.1/32            ident

90 host    replication      rep1            10.0.0.0/24             md5

91 #host    replication     postgres        ::1/128                 ident

允許從庫伺服器連接配接主庫去拖WAL日志資料

3.3 重新開機postgresql服務

systemctl restart postgresql-9.5

4 從庫配置

4.1 清空從庫的資料目錄

先關閉從庫

systemctl stop postgresql-9.5

清空從庫資料目錄

rm -rf /var/lib/pgsql/9.5/data/*

4.2 從主庫備份資料

pg_basebackup -h 10.0.0.14 -U rep1 -F p -x -P -R -D /var/lib/pgsql/9.5/data/ -1 rep_backup

備份過程實際上就是從主庫的data目錄裡實體拷貝資料的過程。

參數說明

-F 指定了輸出的格式,支援p(原樣輸出)或者t(tar格式輸出)。

-x 表示備份開始後,啟動另一個流複制連接配接從主庫接收WAL日志。

-p 表示允許在備份的過程中實時的列印備份的進度。

-R 表示會在備份結束後自動生成recovery.conf檔案,這樣就避免了手動建立。

-D 指定把備份寫到哪個目錄,注意:在做基礎備份之前從庫的資料目錄需要手動清空。

-1 表示指定一個備份的辨別。

chown -R postgres.postgres /var/lib/pgsql/9.5/data/

修改配置檔案

vim /var/lib/pgsql/9.5/data/postgresql.conf

243 # - Standby Servers -

244

245 # These settings are ignored on a master server.

246

247 #hot_standby = off          # "on" allows queries during recovery

248 hot_standby = on    #添加此行

249                     # (change requires restart)

250 #max_standby_archive_delay = 30s    # max delay before canceling queries

251                     # when reading WAL from archive;

252                     # -1 allows indefinite delay

253 #max_standby_streaming_delay = 30s  # max delay before canceling queries

4.3 啟動從庫

systemctl start postgresql-9.5

檢視流複制的程序

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

5 測試

5.1 從庫寫入測試

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

5.2 建立庫表測試

在主庫上建立一個庫wangning

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

登入從庫檢視是否有wangning庫

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

在主庫的wangning庫中建一個test表并插入資料

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

進入從庫的wangning庫檢視是否有test表和插入的資料

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

5.3 删除庫測試

postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試
postgresql9.5主從複制部署文檔1 備份原理2 基本環境3 主庫配置4 從庫配置5 測試

經過測試可看出,主從複制已配置成功。

轉載于:https://blog.51cto.com/wn2100/2238996