公司使用的数据库时postgresql,一直运行都很流畅,但是最近java新做的管理平台,由于登录用户较多,并发性比较大。另外新系统可能优化也存在问题,所以pg经常崩溃,所以我就开始研究如何事项pg的高性能,高可用的HA的数据库集群解决方案。主要思路是利用postgresql自带的流复制功能,来实现了双机热备,利用pgpool实现数据库的负载均衡、失败接管、在线回复、消除单点故障,从而做到无缝隙无人工参与的主备循环N次切换的高可用。后来经过详细阅读他人的博客和帮助手册。最后逐一实现。下边是思维导图。对于配置过程中参数的含义即配置参数请参考帮助手册和我的代码注释。
参考博客:
宿宝臣在路上(HA): http://dz.sdut.edu.cn/blog/subaochen/?p=451
Guo_guo(实施手册):http://blog.csdn.net/sszgg2006/article/details/38684325
Constantin的博客(PG安装与配置):http://www.cnblogs.com/zhoulf/p/4040768.html
pgpool的中文手册:http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-zh_cn.html#start
关于PG的安装,我在此简单说明一下,因为我之前并未从事过运维,所以在研究的过程中,学习了很多关于redhat的知识,比如:
① /ect/profile 、/home/user/.bash_profile 、/home/user/.bashrc中设置环境环境变量,并使之生效。
》使用source 文件名,在本终端中使得该文件生效。/ect/profile是系统级别的,、/home/user/.bash_profile 、/home/user/.bashrc是用户级别的。系统级的对于所有用户都起作用,用户级的只对对应的用户起作用。
》source .bashrc可以立刻生效,即使是新打开的终端也生效。
》但source .bash_prifile只能在当前终端生效,新打开的终端不生效,只有当重新启动的时候,才生效。
》对于export +环境变量,这样的环境变量才能变成全局的。
》关于详细的描述,参考:http://blog.csdn.net/chenchong08/article/details/7833242
下边附上我设置的.bashrc
# .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions export PGHOME=/usr/local/pgsql export POOLHOME=/usr/local/pgpool export PGDATA=/usr/local/pgsql/data export PATH=$PATH:$HOME/bin:$PGHOME/bin:$POOLHOME/bin:/sbin export LANG=GBK export PS1='$HOSTNAME#$LOGNAME:$PWD> ' set -o vi ulimit -c 10000000 alias lf="ls -CF" alias ll="ls -trl" alias l="ls -l" alias dbc='psql -d postgres -U postgres' alias pgstart='pg_ctl -D $PGDATA start' alias pgstop='pg_ctl kill INT `head -1 $PGDATA/postmaster.pid`'
② redhat系列类型与ubuntu系列类型的linux软件包管理的异同。
》接下来的实验PG的安装采取源码安装,安装的过程,参考这篇博文:Constantin的博客(PG安装与配置):http://www.cnblogs.com/zhoulf/p/4040768.html
》安装过程会出现或多或少的问题。记住--help永远是最可靠的朋友,如 ./configure --help 就明白了。我安装过程会报readline和另外一个找不到,不过可以查看帮助使用--without,就去检查系统是否存在,当然也可以自行安装,然后指明文件的路径即可,readline是系统的工具,主要是记录记录历史和tab命令补全用的。