作者 主題: [請問]PostgreSQL 9 Hot Standby ?  (閱讀 3805 次)

0 會員 與 1 訪客 正在閱讀本文。

kuang001

  • 懷疑的國中生
  • **
  • 文章數: 48
    • 檢視個人資料
[請問]PostgreSQL 9 Hot Standby ?
« 於: 2012-09-06 22:01 »
請教網友:

我目前嘗試著將兩台 CentOS 32Bit 機器上
PostgreSQL 做成線上 Hot Standby;
在備援機 (97.24.2.29) 啟動時沒錯誤訊息,
但試著登入會出現: FATAL:  the database system is starting up


[root@vm-pgsql32 ~]# /etc/rc.d/init.d/postgresql-9.1 start
Starting postgresql-9.1 service:                           [  OK  ]
[root@vm-pgsql32 ~]# su - postgres
-bash-3.2$ psql -Upostgres
psql: FATAL:  the database system is starting up

[root@vm-pgsql32 ~]# ps -ef | grep post
postgres 27651     1  0 21:37 ?        00:00:00 /usr/pgsql-9.1/bin/postmaster -p 5432 -D /home1/pgsql
postgres 27653 27651  0 21:37 ?        00:00:00 postgres: logger process
postgres 27654 27651  0 21:37 ?        00:00:00 postgres: startup process   waiting for 0000000100000001000000B0

它一直等待接收 0000000100000001000000B0 檔.

[root@vm-pgsql32 ~]# cd /home1/pgsql   <-- PostgresSQL DATA 目錄.
[root@vm-pgsql32 pgsql]# cat backup_label
START WAL LOCATION: 1/B0000020 (file 0000000100000001000000B0)
CHECKPOINT LOCATION: 1/B0000050
BACKUP METHOD: pg_start_backup
START TIME: 2012-09-05 06:15:22 CST
LABEL: label


在 IN PRIMARY (10.10.20.242) 上

[root@tej-ucb home1]# cd pg_data_logs/
[root@tej-ucb pg_data_logs]# cd archivedir/
[root@tej-ucb archivedir]# ll
total 98428
-rw------- 1 postgres postgres      272 Sep  5 14:37 0000000100000001000000B0.00000020.backup
-rw------- 1 postgres postgres 16777216 Sep  6 02:43 0000000100000001000000B1
-rw------- 1 postgres postgres 16777216 Sep  6 02:54 0000000100000001000000B2
-rw------- 1 postgres postgres 16777216 Sep  6 17:33 0000000100000001000000B3
-rw------- 1 postgres postgres 16777216 Sep  6 23:55 0000000100000001000000B4
-rw------- 1 postgres postgres 16777216 Sep  6 23:56 0000000100000001000000B5
-rw------- 1 postgres postgres 16777216 Sep  6 23:57 0000000100000001000000B6

都有產生,不知 standby 主機如何接收這些 wal 檔.

ps:
以下是我的相關設定:

-->IN PRIMARY (10.10.20.242)
# vi /home1/pgsql/postgresql.conf

####Add by paolo for replications
wal_level = hot_standby
archive_mode = on
archive_command = 'cp -i %p /home1/pg_data_logs/archivedir/%f </dev/null'
archive_timeout = 86400
max_wal_senders = 5
wal_keep_segments = 32

# vi pg_hba.conf
host    all             all             97.24.2.0/24            trust

[root@tej-ucb pgsql]# ll /home1
drwxr-xr-x  3 postgres postgres  4096 Sep  2 20:27 pg_data_logs
drwx------ 15 postgres postgres  4096 Sep  7 05:47 pgsql


--IN STANDBY (97.24.2.29)
# vi /home1/pgsql/postgresql.conf

#Add by paolo for replications
wal_level = hot_standby
hot_standby = on

# vi /home1/pgsql/recovery.conf
#Add by paolo for replications
restore_command = 'cp /home1/pg_data_logs/archivedir/%f %p'
archive_cleanup_command = 'pg_archivecleanup /home1/pg_data_logs/archivedir %r'
standby_mode = 'on'
primary_conninfo = 'host=10.10.20.242 port=5432 user=postgres'
trigger_file = '/home1/pg_trigger/trigger_activestb'

[root@vm-pgsql32 pgsql]# ll /home1
drwxr-xr-x  3 postgres postgres 4096 Sep  7 15:33 pg_data_logs
drwx------ 14 postgres postgres 4096 Sep  7 21:37 pgsql
drwxr-xr-x  2 postgres postgres 4096 Sep  7 19:19 pg_trigger


第一次工作方式:

>>>>>>>>>>>>>>傳送數據文件到 StandBy 並啟動集群<<<<<<<<<<<<<<<<<
# /etc/rc.d/init.d/postgresql-9.1 stop (備機 97.24.2.29)
# cd /home1/pgsql/ 
# rm -rf * 

--IN PRIMARY 
su - postgres 
psql -c "SELECT pg_start_backup('label',true);" 
cd /home1/pgsql/ 
scp -r * postgres@97.24.2.29:/home1/pgsql/ 


--IN STANDBY 
su - postgres 
cd /home1/pgsql 
rm postmaster.pid 
cp -p -f ../pgsql-backup/*.conf .
cd pg_xlog 
mv * /home1/pg_data_logs/archivedir/ 

回 root 執行重啟
exit (su - root) 
/etc/init.d/postgresql-9.1 start


敬請有經驗網友能幫我解惑,錯在那裡!

謝謝.

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5368
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: [請問]PostgreSQL 9 Hot Standby ?
« 回覆 #1 於: 2012-09-06 22:29 »
你列出來的那些 archive 檔案並沒有需要的那一個啊?
我在 8.2 時做過, 並沒有所謂 standby 接收這些檔案的動作.
基本上就是 primary 產生出 archive log 檔案, 然後去執行 archive_command 所設定的指令. (這個就是要負責把 archive log 送到 standby 所需要的目錄下, 看你是要用 ftp, nfs.... 任何一種可以傳檔案的方式都可以)
standby 只負責一直監看某個目錄, 有 log 就去 apply.

kuang001

  • 懷疑的國中生
  • **
  • 文章數: 48
    • 檢視個人資料
Re: [請問]PostgreSQL 9 Hot Standby ?
« 回覆 #2 於: 2012-09-07 08:30 »
謝謝 Tommy 回覆:

>你列出來的那些 archive 檔案並沒有需要的那一個啊?

請問?由那裡得知我等待所需下一個檔案名稱.我試著將
Primery 所產生 /home1/pg_data_logs/archivedir 所有檔案,手動複製 一份至
STANDBY 上 /home1/pg_data_logs/archivedir  它也沒工作.

若一直在 ps -ef 顯示
postgres 27654 27651  0 21:37 ?        00:00:00 postgres: startup process   waiting for 0000000100000001000000B0

在 STANDBY 主機上,就無法登入 DB 是嗎?
因網路上說 recovery.conf 要變成 recovery.done
才表示做完!

網路上文件,都說 Primary 有更動資料就會同步 Standby
也可在 Standby 上查到,可是我連 Standby 都沒法連上去
查資料.

謝謝.不好意思!我是新手有諸多不懂,請包涵.



twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5368
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: [請問]PostgreSQL 9 Hot Standby ?
« 回覆 #3 於: 2012-09-07 10:22 »
1. standby 在等 0000000100000001000000B0 這個檔案. 但是你的目錄裡頭沒有.
2. 我不清楚 9.x 版本是否已經允許在 standby 查詢資料, 這個在 8.x 的時候是不允許的.

我不確定 postgresql 是否已經能夠讓 standby 同時在 recovery 又能查資料. 不過以一般常見的 SQL 資料庫來說, 這兩者是無法同時存在的.
一般所謂可以在 standby server 查資料, 是必須把 recovery 中斷, 以特殊的方式去 mount 資料庫, 那時才能去做 read-only 的 query.
等到查詢作業不做的時候, 再把它切回 standby 的 recovery 模式.

同時 standby recovery 又能查詢, 以我幾年前的知識來說, 那是做不到的. (至於目前有沒有什麼資料庫能這麼做了, 我不清楚, 請自己去查資料)

kuang001

  • 懷疑的國中生
  • **
  • 文章數: 48
    • 檢視個人資料
Re: [請問]PostgreSQL 9 Hot Standby ?
« 回覆 #4 於: 2012-09-07 15:10 »
>1. standby 在等 0000000100000001000000B0 這個檔案. 但是你的目錄裡頭沒有.

請教? --> PRIMARY SERVER 上的 postgresql.conf,是否改為

archive_command = 'scp -i %p postgres@97.24.2.29:/home1/pg_data_logs/archivedir/%f </dev/null'

####Add by paolo for replications 
wal_level = hot_standby
archive_mode = on
archive_command = 'scp -i %p postgres@97.24.2.29:/home1/pg_data_logs/archivedir/%f </dev/null'
archive_timeout = 86400
max_wal_senders = 5
wal_keep_segments = 32

那 STANDBY SERVER: 內  recovery.conf  內
restore_command  archive_cleanup_command 寫法因要如何寫?
是否也須 trigger_file  才會工作.因若我
$ toch  /home1/pg_trigger/trigger_activestb
則 postgres 就自動停止工作.

#Add by paolo for replications 
restore_command = 'cp /home1/pg_data_logs/archivedir/%f %p'   
archive_cleanup_command = 'pg_archivecleanup /home1/pg_data_logs/archivedir %r'
standby_mode = 'on'
primary_conninfo = 'host=97.24.2.243 port=5432 user=postgres'
trigger_file = '/home1/pg_trigger/trigger_activestb'


>2. 我不清楚 9.x 版本是否已經允許在 standby 查詢資料, 這個在 8.x 的時候是不允許的.

是否在 standby 模式,無法登入 postgresql 是正常的.

我要如何確認 STANDBY SERVER 資料有同步工作.

謝謝,不斷教導.

kuang001

  • 懷疑的國中生
  • **
  • 文章數: 48
    • 檢視個人資料
Re: [請問]PostgreSQL 9 Hot Standby ?
« 回覆 #5 於: 2012-09-11 08:39 »
請教?
現在我的 postgres 做成 slave 設定完成後,出現啟動失敗.
[root@vm-pgsql32 ~]# /etc/rc.d/init.d/postgresql-9.1 start
Starting postgresql-9.1 service:                           [FAILED]

log 也沒有記錄.
[root@vm-pgsql32 pgsql]# ll pgstartup.log
-rw------- 1 postgres postgres 0 Sep 11 12:01 pgstartup.log

請問?在 postgresql.conf 內要開啟何種設定?才能告知我那裡有錯?
謝謝.