PostgreSQL 9.0基于streaming replication的Primary/Standby集群安装典型配置文件

最近给PostgreSQL搞伤了,Debian 5默认PostgreSQL是8.4,本身是不支持Primary/Standby集群的。在经历尝试Slony的超级复杂配置和pgpool无法按照步骤成功的痛苦经历情况下,将PostgreSQL升级到9.0,但是根据网上一些手册还是配置不成功,经过摸索终于成功配置了,并将配置文件公布出来供参考。

安装指令如下,其中192.168.0.212作为Primary服务器,192.168.0.211作为Standby服务器

两台服务器共同执行部分:

  • 修改apt源

vim /etc/apt/sources.list

在最后加入:

deb http://backports.debian.org/debian-backports lenny-backports main

deb http://backports.debian.org/debian-backports lenny-backports-sloppy main

apt-update

  • 安装PostgreSQL数据库服务

wget http://ftp.us.debian.org/debian/pool/main/o/ossp-uuid/libossp-uuid15_1.5.1-1.1+b1_i386.deb

wget http://ftp.us.debian.org/debian/pool/main/o/ossp-uuid/libossp-uuid-dev_1.5.1-1.1+b1_i386.deb

dpkg -i libossp-uuid*.deb

apt-get install -t lenny-backports postgresql-common

apt-get install -t lenny-backports-sloppy postgresql-9.0 postgresql-client-9.0 postgresql-contrib-9.0 postgresql-server-dev-9.0

  • 修改访问控制

vim /etc/postgresql/9.0/main/pg_hba.conf

最后加一行

host all all 192.168.0.0/24 md5

  • 修改监听范围

vim /etc/postgresql/9.0/main/postgresql.conf

修改listen_addresses = ‘localhost’为listen_addresses = ‘*’,如果前面有#号则需要删除#号

  • 重新启动postgresql服务

/etc/init.d/postgresql restart

212 Primary服务器配置

  • 设置同步账号

su – postgres

psql

create user repl superuser log in password ‘replpwd’ ;

  • 修改访问控制

vim /etc/postgresql/9.0/main/pg_hba.conf

最后添加以下内容

host replication repl 192.168.0.211/32 md5

  • 修改postgresql服务配置文件

vim /etc/postgresql/9.0/main/postgresql.conf

主要配置修改如下:

wal_level = hot_standby

archive_mode = on

archive_command = ‘cp -i %p /var/lib/postgresql/9.0/archivedir/%f </dev/null’

archive_timeout = 600

max_wal_senders = 5

wal_keep_segments = 32

  • 建立归档目录

su – postgres

mkdir /var/lib/postgresql/9.0/archivedir/

  • 重启服务

/etc/init.d/postgresql stop

/etc/init.d/postgresql start

211Standby服务器配置

  • 修改postgresql服务配置文件

vim /etc/postgresql/9.0/main/postgresql.conf

主要配置修改如下:

wal_level = hot_standby

hot_standby = on

vim /etc/postgresql/9.0/main/recovery.conf

内容如下:

restore_command = ‘cp /var/lib/postgresql/9.0/archivedir/%f %p’ archive_cleanup_command = ‘pg_archivecleanup /var/lib/postgresql/9.0/archivedir %r’

standby_mode = ‘on’

primary_conninfo = ‘host=192.168.0.212 port=5432 user=repl password=replpwd’

trigger_file = ‘/var/lib/postgresql/9.0/trigger_activestb’

cp /etc/postgresql/9.0/main/recovery.conf /var/lib/postgresql/9.0/main/

  • 停止服务

/etc/init.d/postgresql stop

  • 删除原数据目录下数据文件

su – postgres

cd /var/lib/postgresql/9.0/

rm –R –f main

mkdir main

chmod –R 700 main

传送数据文件到StandBy并启动集群

  • 从212服务器中传送文件(在212服务器执行)

su – postgres

psql -c "SELECT pg_start_backup(‘label’,true);"

rsync -avz /var/lib/postgresql/9.0/main/* postgres@192.168.0.211:/var/lib/postgresql/9.0/main/

注意:这里rsync是没有办法执行的,需要先建立两个服务器之间关于postgres之间的ssh 密钥文件交换。

  • 211服务器删除pid文件(在211服务器执行)

rm /var/lib/postgressql/9.0/main/postgresql.pid

/etc/init.d/postgresql restart

  • 212服务器正式启动主从模式(在212服务器执行)

su – postgres

psql -c "SELECT * from pg_stop_backup();"

exit

/etc/init.d/postgresql restart

测试

在Primary服务器上建立一个数据库或者修改一个数据表,可以在StandBy数据库上看到同样的修改操作发生了。

配置参考文件

可直接使用的配置参考文件见:。注意前缀分别代表在那台服务器上的配置文件。