postgresql數據庫異步流復制hot standby環境搭建


生命不息,test不止。

最近組里面修改了幾個postgresql的bug,要進行回歸測試,除了前面提到的WAL的RT測試和Mirroring Controller的RT測試,還要測試下postgresql的hot standby功能。

要進行該項測試,就要首先搭建hot standby環境。

本文主要記錄下搭建hot standby環境的過程以及其中遇到的問題及解決方法。

首先介紹下系統環境:

操作系統:RHEL_6_x64
postgresql版本:9.5.4

首先至少要有兩台機器,其次這兩台機器都安裝了postgresql(postgresql的編譯安裝見本人的這篇博客)。當然了,postgres賬號也是要的。還有一些基礎的軟件包也是要安裝的,這里不贅述了。

好的言歸正傳,進入hot standby環境的搭建。

我的實例環境如下:

主服務器:IP(192.168.2.130) 數據目錄(/home/postgres/data)

從服務器:IP(192.168.2.128) 數據目錄(/file1/database/data)

1 建立主數據庫

mkdir -p /home/postgres/data                        #創建放置數據庫的文件夾
initdb –D /home/postgres/data                       #初始化數據庫

修改data文件夾下的postgresql.conf文件:


listen_addresses = '0.0.0.0'
port = 54321                                         #設置監聽端口,只要不沖突即可
wal_level = hot_standby
max_wal_senders = 30

修改data/pg_hba.conf

host    replication     postgres             192.168.2.0/24         trust

注意,我這樣是允許192.168.2.0/24這個網段的主機都可以連接到本台服務器。

如果你想指定某個特定用戶,用xxx.xxx.xxx.xxx/32即可。


2 啟動主數據庫

輸入以下命令啟動數據庫:

pg_ctl -D /file1/database/data -l logfile  start

輸入命令后應該會顯示以下消息:

我們測試下數據庫是否啟動成功:

psql -d postgres

如下圖所示

說明數據庫成功啟動!


3 數據備份

數據備份的話有兩種方法,一種是停庫備份,即先讓數據庫進入備份模式再將數據庫目錄復制過去,另外一種是使用pg_basebackup命令,不用進入備份模式。

3.1 基礎備份方式

進入psql命令行,執行:

postgres=# select pg_start_backup('databackup',true);

使用這個命令后,所有請求在寫日志之后不會再刷新到磁盤。直到執行pg_stop_backup()這個函數。

這個時候就把主數據庫上的data目錄拷貝到從數據庫上吧。
你可以直接拷貝過去,也可以使用scp命令:

scp -r /home/postgres/data postgres@192.168.2.128:/file1/database/


這里輸入192.168.2.128上的postgres用戶的密碼。

拷貝過去后,例如拷貝到/file1/database/data目錄,那么在從庫的data目錄下,修改postgresql.conf文件:

port = 54321       #改成你想要的端口,不一定要和主庫一樣
hot_standby = on   #

同時,在從庫的目錄下增加一個recovery.conf文件,這個文件的模板可以在從庫服務器的postgresql的安裝目錄下找到。修改recovery.conf文件:

standby_mode = on
primary_conninfo = 'host=192.168.2.130(就是主數據庫的IP) port=54321(主數據庫監聽端口) user=postgres(登錄用戶)'

括號里的東西只是提示,不要真的寫進文件哦~
最后,要刪除從庫目錄下的postmaster.pid文件:

rm -f postmaster.pid

然后切換回主數據庫,在psql命令行輸入:

postgres=# select pg_stop_backup();

退出備份模式。

是不是感覺很麻煩,所以我推薦下面這種方法。

3.2 使用pg_basebackup命令備份

pg_basebackup命令是postgresql 9.x之后才有的命令,具體命令的語法和各個參數的意義見用戶手冊

在從數據庫上的數據庫目錄(/file1/database/data)下使用pg_basebackup命令備份:

pg_basebackup -h 192.168.2.130 -U postgres -F p -P -x -R -D /file1/database/data -l backup20161021

拷貝完畢后,修改從庫的postgresql.conf文件:

port = 54321       #改成你想要的端口,不一定要和主庫一樣
hot_standby = on   #

因為在pg_basebackup命令中使用了-R參數,所以生成了recovery.conf文件,不需要我們再制作了。

這就OK了。


4 啟動從數據庫

在從庫上使用pg_ctl 命令:

pg_ctl -D /file1/data  -l logfile start

這樣環境就搭好了。

這里演示的是一台主數據庫,一台從數據庫的hot standby的環境搭建。你要搭建多個從服務器的話操作也是類似,這里不再贅述。

5 要注意的問題(坑)

5.1 環境變量

環境變量要設置好,例如:

PGPORT(數據庫的監聽端口)
PATH(可執行文件的路徑)
LD_LIBRARY_PATH(鏈接庫的路徑)
PGDATA(數據庫文件路徑)

不設置好的話,可能會報一些奇怪的錯誤。

2016.11.14補充:請記得數據庫文件夾的訪問權限必須是700,否則服務無法啟動!

5.2 參數設置

這里主要是指postgresql.conf文件和pg_hba.conf文件。這里面設置了postgresql里面大多數重要的參數。

一般在修改后要重啟數據庫或者reload下配置文件:

pg_ctl reload

5.3 操作順序

還是建議嚴格按照操作順序進行環境的搭建,尤其是在數據備份操作時尤其要小心,否則會導致很多“奇怪”的錯誤,尤其是WAL日志和archive的錯誤,這也是樓主走過的坑,希望大家不要再趟。還有最好使用腳本來進行操作,避免在大量重復的操作中出錯,這里也引用一篇相關文章好了:

PostgreSQL系統級冷備份和archive備份(shell文件)

6 展望

本次簡單的搭建了postgresql的異步流復制hot standby的環境,實際還有同步流復制,主備份切換等,這個留在后面的博客里面再寫吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM