Postgre
sql 利用Pgpool-II的集群搭建方案
1. 下载安装
在官网 http://pgfoundry.org/projects/pgpool 下载 pgpool-II 2.2.2.tar.gz ,执行以下命令安装:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]#tar xvf pgpool-II 2.2.2.tar.gz [*]
[*]#cd pgpool-II 2.2.2
[*]
[*]#./ con
figure; make; make install;
#tar xvf pgpool-II 2.2.2.tar.gz #cd pgpool-II 2.2.2 #./ con
figure; make; make install;
2. P
arallel_Mode 配置
数据库的 Patition 可以利用 Pgpool-II 的 P
arallel_Mode 来实现,
在这种方式下,必须设置另外
一个叫做 “Sy
stem Database” 的
数据库(我们称之为 Sy
stemDB )。 Sy
stemDB 保存决定数据如何在各节点中保存的
用户定义规则,另
一个用途是合并使用
数据库链( dblink )从
数据库节点返回的结果。
本文中的配置, Pgpool 和 Sy
stemDB 都放在服务器 192.168.1.239 ,占用端口分别为: 9999 和 5444 。
配置文件的
默认路径是: /usr/local/etc ,首先需要配置 pgpool.conf
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]#cd /usr/local/etc ; cp pgpool.conf.sample pgpool.conf;
#cd /usr/local/etc ; cp pgpool.conf.sample pgpool.conf;
下面是具体的配置过程:
设置并发
查询
将 pgpool.conf
文件中的 p
arallel_mode 参数设置为 true 开启
数据库复制
功能:
p
arallel_mode = true
这样并不能
自动开始并发
查询, pgpool-II 还需要 Sy
stemDB 以及分布规则来知道如何在各节点中分布数据。
另外, Sy
stemDB 使用
数据库链连接 pgpool-II ,因此,需要设置 listen_addresses 参数好让 pgpool-II 接受这些连接请求:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]listen_addresses = '*'
listen_addresses = '*'
注意:并发
查询和复制是不能共存的,使用并发
查询功能时, replication_mode 必须设置为 false 。此外,并发
查询和复制采用不同的格式储存数据,这样前边我们创建的 “bench_replication”
数据库无法被重用( reuse )。
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]replication_mode = false
[*]
[*]load_balance_mode = false
replication_mode = false load_balance_mode = false
p
arallel_mod 设置为 true 、 listen_addresses 设置为 '*' 、 replication_mode 和 load_balance_mode 设置为 false 。
配置 Sy
stemDB
Sy
stemDB 仅仅是
一个安装有
数据库链的
数据库,数据表 “
dist_def” 被用来保存数据分布规则。可以在单独的电脑中放置 Sy
stemDB ,也可以与
数据库节点之一共存。
在服务器 192.168.1.121 上的 5444 端口上创建 Sy
stemDB ,下边是 Sy
stemDB 的参数设置列表:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]sy
stem_db_hostname = '192.168.1.121'
[*]
[*]sy
stem_db_port = 5444
[*]
[*]sy
stem_db_
dbname = 'pgpool'
[*]
[*]sy
stem_db_schema = 'pgpool_catalog'
[*]
[*]sy
stem_db_user = 'pgpool'
[*]
[*]sy
stem_db_password = ''
sy
stem_db_hostname = '192.168.1.121' sy
stem_db_port = 5444 sy
stem_db_
dbname = 'pgpool' sy
stem_db_schema = 'pgpool_catalog' sy
stem_db_user = 'pgpool' sy
stem_db_password = ''
事实上,这是 pgpool.conf 中的缺省设置。
然后创建叫做 “pgpool” 的
用户,再创建所有者为 “pgpool” 的
数据库 “pgpool” :
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]#
createuser -p 5444 pgpool [*]
[*]#createdb -p 5444 -O pgpool pgpool
#
createuser -p 5444 pgpool #createdb -p 5444 -O pgpool pgpool
安装数据链
接下来,必须将
数据库链安装到 “pgpool”
数据库,它是包含在 Postgre
sql 源
代码 contrib 目录下的工具之一。
在“pgpool”
数据库中定义
数据库链
函数。Postgre
sql 安装在/opt/PostgresPlus/8.3AS ,dblink.
sql (
函数定义
文件)会被放置在/opt/PostgresPlus/8.3AS/dbserver/share/contrib 中,运行如下命令创建
函数:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]# edb-p
sql -f /opt/PostgresPlus/8.3AS/dbserver/share/contribdblink.
sql -p 5444 pgpool
# edb-p
sql -f /opt/PostgresPlus/8.3AS/dbserver/share/contribdblink.
sql -p 5444 pgpool
定义
dist_def 数据表
接下来,定义
数据库表“
dist_def” 存放数据分布规则。安装pgpool-II 时,sy
stem_db.
sql 文件放置在/opt/PostgresPlus/8.3AS/dbserver/share /sy
stem_db.
sql (这里我们使用缺省
安装路径),它
包括了一些
包括“
dist_def” 在内的特殊用途数据表,执行下边的命令创 建
dist_def 数据表:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]# edb-p
sql -f /opt/PostgresPlus/8.3AS/dbserver/share/sy
stem_db.
sql -p 5444 -U pgpool pgpool
# edb-p
sql -f /opt/PostgresPlus/8.3AS/dbserver/share/sy
stem_db.
sql -p 5444 -U pgpool pgpool
定义数据分布节点
例子中的三个分布节点,分别为:192.168.1.239:5444 , 192.168.1.201:5444, 192.168.1.201:5443
在pgpool.conf 中定义这三个节点:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]backend_hostname0 = '192.168.1.239'
[*]
[*]backend_port0 = 5444
[*]
[*]backend_weight0 = 1
[*]
[*]backend_
data_directory0 = '/usr/postgre
sql/data'
[*]
[*]backend_hostname1 = '192.168.1.201'
[*]
[*]backend_port1 = 5444
[*]
[*]backend_weight1 = 1
[*]
[*]backend_
data_directory1 = '/usr/postgre
sql/data'
[*]
[*]backend_hostname2 = '192.168.1.201'
[*]
[*]backend_port2 = 5443
[*]
[*]backend_weight2 = 1
[*]
[*]backend_
data_directory2 = '/usr/postgre
sql/data2'
backend_hostname0 = '192.168.1.239' backend_port0 = 5444 backend_weight0 = 1 backend_
data_directory0 = '/usr/postgre
sql/data' backend_hostname1 = '192.168.1.201' backend_port1 = 5444 backend_weight1 = 1 backend_
data_directory1 = '/usr/postgre
sql/data' backend_hostname2 = '192.168.1.201' backend_port2 = 5443 backend_weight2 = 1 backend_
data_directory2 = '/usr/postgre
sql/data2'
检验并发
查询
重新启动pgpool-II 载入pgpool.conf 的变化,然后我们来检验一下并发
查询是否在正常运行。
首先,命名为“bench_p
arallel” 的分布
数据库,通过pgpool-II 创建到每
一个节点上:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]$ createdb -p 9999 bench_p
arallel
$ createdb -p 9999 bench_p
arallel
接下来,
生成测试数据:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]$ pgbench -i -s 3 -p 9999 bench_p
arallel
$ pgbench -i -s 3 -p 9999 bench_p
arallel
这时可以用
数据库工具分别查看各节点的数据来确认结果。也可以在 Pgpool 的服务端口进入
sql 操作来查看数据:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]#ebd-p
sql –p 9999 bench_p
arallel [*]
[*]#select * from accounts;
#ebd-p
sql –p 9999 bench_p
arallel #select * from accounts;
此时三个节点的数据可以通过
一个共同的接口跟应用进行关联,该接口就是pgpool ,
默认端口为9999 。
启动/
关闭pgpool-II启动pgpool-II,在终端之上使用如下命令:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]$ pgpool
$ pgpool这个命令会把日志
输出在终端上,因此推荐使用如下选项:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]$ pgpool -n -d > /tmp/pgpool.log 2>&1 &
$ pgpool -n -d > /tmp/pgpool.log 2>&1 &使用-n选项,pgpool-II作为非deamon进程运行,不会与终端脱离,这个选项需要将日志信息
重定向至某个
文件中。选项-d指令
生成debug信息。
停止pgpool-II,使用如下命令:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]$ pgpool stop
$ pgpool stop如果有客户端正在连接,pgpool-II会等待他们断开,然后才停止。如果需要强制终止,使用下边的命令:
Java
代码 http://mengqingyu.javaeye.com/images/icon_
copy.gif
[*]$ pgpool -m fast stop
$ pgpool -m fast stop
本文来自CSDN
博客,转载请标明出处:http://blog.csdn.net/xtlog/archive/2009/05/27/4219353.aspx
http://blog.csdn.net/joliny/archive/2008/01/25/2065426.aspx
renxiao2003 发表于 2011-01-31 22:00:37
本文翻译自源
代码包中的“pgpool-II Tutorial”文档
"pgpool-II " 是pgpool 的下一代产品。
Postgre
sql 专用的所谓「连接池(pool)」服务器, Postgre
sql 客?端 和 Postgre
sql Server 之间做?者的媒介.根据利用 pgpool 做的事务, 能降低对 Postgre
sql server的连接overhead,能使之提高系?
负载量.
Postgre
sql 的客?端连接到 pgpool 的话, 当第一回 Postgre
sql 的连接被 pgpool 建立.
对有客?端?束或者 Postre
sql 的连接不切断的情况下, 下次同样的用?, 资料库对 pgpool 的连接的?候这个 Postgre
sql 的连接会被再利用.
再者, 因?pgpool有「Hot-Backup」的机制, 能按住到最小限度系?的 down time.
另外 pgpool「replication」也可行的.根据使用replication的事, 物理地? 2 台Server 时时的地取得故障的接应 当软件故障发生也能继续提供服务.
(如果第一服务器down下?, pgpool 自?地?提交给次要伺服器。)
pgpool 的 replication 因?根? 2 台伺服器?送同?的查?的事?行, 所?同期 replication 的就是一?.
再者,?在,replication以只2台,3台以上的replication不能.
pgpool 有著分配?索??(SELECT)?2台伺服器的?荷分散?能.
根???能大幅度提高?索
性能.
下面我们来安装pgpool-ii
安装pgpool-II
安装pgpool-II是件非常容易的事情,在解压缩的源
代码tar包目录中运行如下命令:
$ ./con
figure
$ make
$ make install
con
figure命令收集系统信息并将它们用在编译过程中,可以传递命令行参数给con
figure脚本来控制它的行为,比如安装目录,缺省情况下将安装到/usr/local之下。
make命令编译源
代码,make install安装编译后的可执行
文件,在要安装的目录中必须具有写权限。
本指南将使用缺省安装目录/usr/local。
注意:pgpool-II需要Postgre
sql 7.4或者更高版本的libpq库(第三版本协议),如果con
figure脚本
显示类似下边的
错误信息,可能是没有安装libpq库或者它
不支持第三版协议:
con
figure: error: libpq is not installed or libpq is old
(这里与前边讲最低
支持6.4的说法冲突,看起来这个更可信。)
如果确信是
支持第三版协议的libpq库,但是仍然收到这样的
错误信息,可能是因为con
figure脚本没有正确识别它。
con
figure脚本在/usr/local/pg
sql下
搜索libpq库,如果Postgre
sql安装在其他目录,使用--with-pg
sql或者是--with-pg
sql-includedir和--with-pg
sql-libdir命令行参数来指定它。
配置文件
pgpool-II的配置参数保存在pgpool.conf
文件中,每一行采用"p
arameter = value"格式。安装pgpool-II时,
自动创建pgpool.conf.sample
文件,推荐将它拷贝并且
重命名为pgpool.conf再编辑:
$ cp /usr/local/etc/pgpool.conf.sample /usr/local/etc/pgpool.conf
pgpool-II仅使用9999端口接受本地连接,如果需要接受其他主机的连接请求,将listen_addresses设置为“*”:
listen_addresses = 'localhost'
port = 9999
本指南将使用缺省参数。
配置PCP命令
pgpool-II有
一个出于管理目的可以通过网络
查询数据库节点信息、
关闭pgpool-II等
功能的接口(interface)。使用PCP命令首先必须通过
用户验证,它不同于Postgre
sql的
用户验证,需要在pcp.conf中定义
用户名和
密码。
文件中的
用户名/
密码成对出现在每一行,用冒号隔开,
密码是md5格式:
postgres:e8a48653851e28c69d0506508fb27fc5
安装pgpool-II时,
自动建立pcp.conf.sample
文件,推荐拷贝并且
重命名以后再编辑:
$ cp /usr/local/etc/pcp.conf.sample /usr/local/etc/pcp.conf
使用pg_md5命令可以将
密码加密为md5格式,它是作为pgpool-II可执行部分安装的,pg_md5使用
一个文本作为参数,然后
显示出这个文本的md5加密文本。
例如: 将“postgres”作为参数传递给pg_md5,pg_md5将把md5加密过文本打印到标准
输出:
$ /usr/bin/pg_md5 postgres
e8a48653851e28c69d0506508fb27fc5
PCP命令通过网络执行,因此必须在pcp.conf
文件中使用pcp_port设置监听端口。
本指南将使用pcp_port的缺省值:
pcp_port = 9898
设置
数据库节点
现在,我们要设置pgpool-II的后端
数据库,它们可以跟pgpool-II在同一台主机上,也可以在独立的机器上。如果放在同一主机之上,每个
数据库服务器必须使用不同的端口。如果放在其他独立的机器上,必须设置它允许接受来自pgpool-II的连接请求。
本指南中,我们将在pgpool-II的同
一个服务器上放置三个
数据库,分别使用5432、5433、5434端口。在pgpool-II的
配置文件pgpool.conf中作如下设置:
backend_hostname0 = 'localhost'
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = 'localhost'
backend_port1 = 5433
backend_weight1 = 1
backend_hostname2 = 'localhost'
backend_port2 = 5434
backend_weight2 = 1
backend_hostname、backend_port、backend_weight分别设置节点的主机名、端口号、
负载平衡比率,每
一个参数名字符串的最后必须描述
一个从0开始(1、2、3???)的节点ID。
backend_weight参数全部设置为1,意味着SELECT
查询将平均分配到三个
数据库中。
启动/
关闭pgpool-II
启动pgpool-II,在终端之上使用如下命令:
$ pgpool
这个命令会把日志
输出在终端上,因此推荐使用如下选项:
$ pgpool -n -d > /tmp/pgpool.log 2>&1 &
使用-n选项,pgpool-II作为非deamon进程运行,不会与终端脱离,这个选项需要将日志信息
重定向至某个
文件中。选项-d指令
生成debug信息。
停止pgpool-II,使用如下命令:
$ pgpool stop
如果有客户端正在连接,pgpool-II会等待他们断开,然后才停止。如果需要强制终止,使用下边的命令:
$ pgpool -m fast stop
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。