基於流複製的PostgreSQL9.1 Hot Standby數據庫搭建

 PostgreSQL 9 Hot Standby簡介

PostgreSQL數據庫提供了類似Oracle的standby數據庫的功能。PostgreSQL9.0 standby數據庫在應用WAL日誌的同時,也可以提供只讀服務,這是PostgreSQL9.0中最激動人心的功能,這個功能在oracle數據庫中也只是最新版本11g中才有的新功能。這個功能在oracle中叫active dataguard,在PostgreSQL中稱爲hot standby。
在利用日誌恢復數據的同時可以用只讀的方式打開數據庫,用戶可以在備用數據庫上進行查詢、報表等操作,也可用做讀寫分離。在PostgreSQL9.0之前,也可以搭建standby數據庫,但standby數據庫只能處於恢復狀態中,不能打開,也不支持只讀打開。而這種情況在9.0之後徹底改變了。
PostgreSQL 9.0中日誌傳送的方法有兩種:
1. 基於文件(base-file)的傳送方式,這種方式是PostgreSQL9.0之前就提供的方法。也就是服務器寫完一個WAL日誌文件後,才把WAL日誌文件拷貝到standby數據庫上去應用。
2. 流複製(streaming replication)的方法,這是PostgreSQL9.0才提供的新方法。這個方法就是事務提交後,就會把生成的日誌異步的傳送到standby數據庫上應用,這比基本文件的日誌傳送方法有更低的數據延遲。

以下部分介紹方法2的搭建。
平臺信息
Master Server:172.16.203.179
數據庫版本:PostgreSQL9.1.2
端口:5432
數據庫的數據目錄: /var/lib/pgsql/9.1/data

Standby Server:172.16.203.178
數據庫版本:PostgreSQL9.1.2
端口:5433
數據庫的數據目錄: /var/lib/pgsql/9.1/data/

配置
主數據庫上的配置
1. 在主數據庫(179上)的postgresql.conf文件中設置如下配置項:
wal_level = hot_standby
max_wal_senders = 2
wal_keep_segments = 32

2. 在主數據庫(179上)的pg_hba.conf文件中添加如下配置項:
host replication postgres 172.16.203.178/32 md5

3. 重啓主數據庫,讓配置生效:
service postgresql-9.1 restart

4. 對主數據庫做一個基礎備份:
使用select pg_start_backup();命令把數據庫切換到備份狀態,
#su – postgres
$/usr/pgsql-9.1/bin/psql -d postgres
postgres=#select pg_start_backup(‘/var/lib/pgsql/9.1/data’);

5. 拷貝主數據庫(179上)的數據目錄到從數據庫(178上)的數據目錄中

6. 拷貝完成後,結束主數據庫的備份狀態:
postgres=#select pg_stop_backup();

從數據庫上的配置:

7. 在從數據庫的配置文件postgresql.conf中,設置如下配置項:
port=5433
hot_standby = on
並註釋掉wal_level max_wal_senders和wal_keep_segments的設置

8. 拷貝並配置recovery.conf
#cp /usr/pgsql-9.1/share/recovery.conf.sample /var/lib/pgsql-9.1/data/recovery.conf
配置如下內容:
standby_mode = on
primary_conninfo = ‘host=172.16.203.179 port=5432 user=postgres password=postgres’
trigger_file = ‘/var/lib/pgsql-9.1/trigger_activestandby’

9. 刪除從主數據庫中過來的postmaster.pid文件,然後啓動從數據庫:
#rm /var/lib/pgsql-9.1/data/postmaster.pid
#service postgresql-9.1 start

至此standby數據庫搭建完成,可以實現主從數據庫的熱備,從數據庫做只讀數據庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章