FreeBSD PostgreSQL 9 Hot Standby 实践
注:PostgreSQL 9 Hot Standby的关键点有2个,工作模式和操作顺序,除了概念的理解。
一、安装PostgreSQL 9
portmaster -d databases/postgresql90-server
修改/etc/login.conf
postgres:\
:lang=en_US.UTF-8:\
:setenv=LC_COLLATE=C:\
:tc=default:
执行cap_mkdb /etc/login.conf
二、初始化主数据库
su pgsql
/usr/local/bin/initdb -D /usr/local/pgsql/data –locale=C -E UTF8 初始化
修改postgresql.conf:
wal_level = hot_standby
max_wal_senders = 1
wal_keep_segments = 32
log_destination = ‘stderr’
logging_collector = on
log级别根据需要设置,建议debug1下一级别即可(log,info)
修改pg_hba.conf:
host replication pgsql 127.0.0.1/32 trust
三、启动主数据库
/usr/local/bin/postmaster -D /usr/local/pgsql/data
看看日志,已经起来:
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
四、基础备份:
流程:在主数据库服务器执行 pg_start_backup(),复制data目录,再执行
pg_stop_backup()。
$ psql -d postgres
postgres=# select pg_start_backup(”);
这个时候,所有请求在写日志之后不会再刷新到磁盘。除非pg_stop_backup()这个函数
被执行。
接下来,把data目录直接复制data2,这个目录将通过scp、rsync等工具同步到节点服
务器,data2就是基础备份的内容。
cd /usr/loca/pgsql
cp -R data/ data2
五、创建节点数据库(Standby)
cd data2
修改postgres.conf
port = 54321
hot_standby = on
增加recovery.conf
standby_mode = ‘on’
primary_conninfo = ‘host=127.0.0.1 port=5432 user=pgsql’
rm postmaster.pid
六、停止主数据库基础备份
postgres=# select pg_stop_backup();
现在数据会写入磁盘,当节点服务器启动后,他会自动连接到主服务器,拉取主服务器
自基础备份后的事务日志。然后,对事务日志进行重演,从而达到恢复数据的效果。
七、启动节点数据库
/usr/local/bin/postmaster -D /usr/local/pgsql/data2
看看日志:
DEBUG: initializing for hot standby
LOG: streaming replication successfully connected to primary
DEBUG: end of backup reached
LOG: consistent recovery state reached at 0/3000000
LOG: database system is ready to accept read only connections
八、测试。