postgresql9.5主從複製部署文檔


1 備份原理

postgresql在數據目錄下的pg_xlog子目錄中維護了一個WAL日誌文件,該文件用於記錄數據庫文件的每次改變,這種日誌文件機制提供了一種數據庫熱備份的方案,即:在把數據庫使用文件系統的方式備份出來的同時也把相應的WAL日誌進行備份,即便備份出來的數據塊不一致,也能夠重放WAL日誌把備份的內容推到一致狀態。這也就是基於時間點的備份(Point-in-Time Recovery),簡稱PITRsql

WAL日誌傳送到另外一臺服務器有兩種方式數據庫

1.WAL日誌歸檔(base-filevim

2.流複製(streaming replication服務器

第一種是寫完一個WAL日誌後,才把WAL日誌文件拷貝到standby數據庫中,就是經過cp命令實現遠程備份,這樣一般備份會落後主庫一個WAL日誌文件。而第二種流複製是postgresql9.x以後才提供的新的傳遞WAL日誌的方法,它的好處是隻要master庫一產生日誌,就會立刻傳遞到standby庫,同第一種相比有更低同步延遲,因此咱們確定會選擇流複製的方式。併發

在實際操做以前還有一點須要說明的是standby的搭建中最關鍵的一步,在standby中生成master的基礎上備份。postgresql9.1以後提供了一個很方便的工具,pg_basebackup,關於它的詳細介紹和參數能夠在官網中查看。ide

2 基本環境

系統版本工具

主機名post

IP地址測試

postgresql版本ui

角色

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 Standbymax_wal_senders則須要設置爲一個大於0的數,它表示主庫最多能夠有多少個併發的standby數據庫,而最後一個wal_keep_segments也應當設置爲一個儘可能大的值,以防止主庫生成WAL日誌太快,日誌尚未來得及傳送到standby就被覆蓋,可是須要考慮磁盤空間容許,一個WAL日誌文件的大小是16M

1.png

如上圖,一個WAL日誌文件是16M,若是wal_keep_segments設置爲64,也就是說將爲standby庫保留64WAL日誌文件,那麼就會佔用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(原樣輸出)或者ttar格式輸出)。

-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

查看流複製的進程

2.png

5 測試

5.1 從庫寫入測試

3.png

5.2 建立庫表測試

在主庫上建立一個庫wangning

4.png

登陸從庫查看是否有wangning

5.png

在主庫的wangning庫中建一個test表並插入數據

6.png

進入從庫的wangning庫查看是否有test表和插入的數據

7.png

5.3 刪除庫測試

8.png

9.png

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

相關文章
相關標籤/搜索