(一)方案
尽管做数据库 postgresql 集群的方式有很多种,数据库9.0以上原生的 standby,呼声很高的 guzz,老牌的 Slony-I,但看过了小日本仔的一篇 pdf 后,觉得用 Streaming replication + Hot Standby + pgpool-II 似乎比较适合我的口味。
(1)我一向赞成数据库集群应该由数据库厂商提供
(2)数据库集群对应用是透明的,可以视作一个数据库
(3)这个方案是有优点的:
优势: Write performance is good (10-20% overhead) Automatic failover of slaves Connection pooling and load balancing: boost performance DDL replication Large object replication
劣势: Asynchronous replication However replication delay is relatively low
(4)截个图片
(5)深入了解 pgpool2
. 用户手册 http://pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-zh_cn.html
. 入门教程 http://pgpool.projects.postgresql.org/pgpool-II/doc/tutorial-zh_cn.html
. 中文试用 http://blog.csdn.net/xtlog/article/details/4219353
. Parallel_Mode 并发模式,传说中的 scale out 分表
=====================================================================
(二)从零开始安装
(1)虚拟机安装 CentOS5.6,下载 http://www.thoughtpolice.co.uk/vmware/#centos 注意不要下 mini 版,mini 版几乎不能用。
(2)创建目录:
。/opt/postgres/data/5432/data - 主库
。/opt/postgres/data/5434/data - 从库
(3)下载 postgresql 9.1
#wget http://oscg-downloads.s3.amazonaws.com/packages/postgres-9.1.0-1.i386.openscg.rpm
#rpm -ivh postgres-9.1.0-1.i386.openscg.rpm
#/etc/init.d/postgres-9.1-openscg start
删除自动安装的文件
#rm /etc/init.d/postgres-9.1-openscg
(4)重新初始化数据库安装
(4)修改防火墙
#iptables -I INPUT -p tcp --dport 5432 -j ACCEPT #iptables -I INPUT -p tcp --dport 5434 -j ACCEPT #iptables -I INPUT -p tcp --dport 5436 -j ACCEPT #/etc/rc.d/init.d/iptables save #/etc/init.d/iptables restart
(5)修改配置文件,支持远程访问
#vim /opt/postgres/9.1/data/pg_hba.conf
修改成 host all all 0.0.0.0/0 md5
(6)修改配置文件成主服务器
修改 postgresql.conf:
### listen_addresses = '*' port = 5432 wal_level = hot_standby max_wal_senders = 1 wal_keep_segments = 32 log_destination = 'stderr' logging_collector = on log_min_error_statement = error
su postgres
/opt/postgres/9.1/bin/initdb -D /opt/postgres/data/5434/data cd /opt/postgres/data/5434/data vi postgres.conf listen_addresses = '*' port = 54321 hot_standby = on vi recovery.conf standby_mode = 'on' primary_conninfo = 'host=127.0.0.1 port=5432 user=repl password=123456'