设为首页 收藏本站
查看: 1143|回复: 0

[经验分享] PostgreSQL 利用Pgpool-II的集群搭建方案

[复制链接]

尚未签到

发表于 2016-11-20 12:21:52 | 显示全部楼层 |阅读模式
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xtlog/archive/2009/05/27/4219353.aspx
http://blog.csdn.net/joliny/archive/2008/01/25/2065426.aspx
  1.       下载安装

在官网 http://pgfoundry.org/projects/pgpool 下载 pgpool-II 2.2.2.tar.gz ,执行以下命令安装:


Java代码 DSC0000.gif





  • #tar xvf pgpool-II 2.2.2.tar.gz    
  •   

  • #cd pgpool-II 2.2.2    
  •   
  • #./ configure; make; make install;   



#tar xvf pgpool-II 2.2.2.tar.gz
#cd pgpool-II 2.2.2
#./ configure; make; make install;
  

2.       Parallel_Mode 配置

数据库的 Patition 可以利用 Pgpool-II 的 Parallel_Mode 来实现,在这种方式下,必须设置另外一个叫做 “System Database” 的数据库(我们称之为 SystemDB )。 SystemDB 保存决定数据如何在各节点中保存的用户定义规则,另一个用途是合并使用数据库链( dblink )从数据库节点返回的结果。

本文中的配置, Pgpool 和 SystemDB 都放在服务器 192.168.1.239 ,占用端口分别为: 9999 和 5444 。

配置文件的默认路径是: /usr/local/etc ,首先需要配置 pgpool.conf


Java代码





  • #cd /usr/local/etc ; cp pgpool.conf.sample pgpool.conf;   



#cd /usr/local/etc ; cp pgpool.conf.sample pgpool.conf;
  

下面是具体的配置过程:

设置并发查询
将 pgpool.conf 文件中的 parallel_mode 参数设置为 true 开启数据库复制功能:
parallel_mode = true
这样并不能自动开始并发查询, pgpool-II 还需要 SystemDB 以及分布规则来知道如何在各节点中分布数据。

另外, SystemDB 使用数据库链连接 pgpool-II ,因此,需要设置 listen_addresses 参数好让 pgpool-II 接受这些连接请求:


Java代码





  • listen_addresses = '*'   



listen_addresses = '*'
  

注意:并发查询和复制是不能共存的,使用并发查询功能时, replication_mode 必须设置为 false 。此外,并发查询和复制采用不同的格式储存数据,这样前边我们创建的 “bench_replication” 数据库无法被重用( reuse )。


Java代码





  • replication_mode = false    
  •   

  • load_balance_mode = false   



replication_mode = false
load_balance_mode = false
  

parallel_mod 设置为 true 、 listen_addresses 设置为 '*' 、 replication_mode 和 load_balance_mode 设置为 false 。

配置 SystemDB

SystemDB 仅仅是一个安装有数据库链的数据库,数据表 “dist_def” 被用来保存数据分布规则。可以在单独的电脑中放置 SystemDB ,也可以与数据库节点之一共存。

在服务器 192.168.1.121 上的 5444 端口上创建 SystemDB ,下边是 SystemDB 的参数设置列表:


Java代码





  • system_db_hostname = '192.168.1.121'    
  •   

  • system_db_port = 5444    
  •   

  • system_db_dbname = 'pgpool'    
  •   

  • system_db_schema = 'pgpool_catalog'    
  •   

  • system_db_user = 'pgpool'    
  •   

  • system_db_password = ''   



system_db_hostname = '192.168.1.121'
system_db_port = 5444
system_db_dbname = 'pgpool'
system_db_schema = 'pgpool_catalog'
system_db_user = 'pgpool'
system_db_password = ''
  

事实上,这是 pgpool.conf 中的缺省设置。

然后创建叫做 “pgpool” 的用户,再创建所有者为 “pgpool” 的数据库 “pgpool” :


Java代码





  • #createuser -p 5444 pgpool    
  •   

  • #createdb -p 5444 -O pgpool pgpool   



#createuser -p 5444 pgpool
#createdb -p 5444 -O pgpool pgpool
  

安装数据链

接下来,必须将数据库链安装到 “pgpool” 数据库,它是包含在 PostgreSQL 源代码 contrib 目录下的工具之一。

在“pgpool” 数据库中定义数据库链函数。PostgreSQL 安装在/opt/PostgresPlus/8.3AS ,dblink.sql (函数定义文件)会被放置在/opt/PostgresPlus/8.3AS/dbserver/share/contrib 中,运行如下命令创建函数:


Java代码





  • # edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/contribdblink.sql -p 5444 pgpool   



# edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/contribdblink.sql -p 5444 pgpool
  

定义 dist_def 数据表

接下来,定义数据库表“dist_def” 存放数据分布规则。安装pgpool-II 时,system_db.sql 文件放置在/opt/PostgresPlus/8.3AS/dbserver/share /system_db.sql (这里我们使用缺省安装路径),它包括了一些包括“dist_def” 在内的特殊用途数据表,执行下边的命令创 建dist_def 数据表:


Java代码





  • # edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/system_db.sql -p 5444 -U pgpool pgpool   



# edb-psql -f /opt/PostgresPlus/8.3AS/dbserver/share/system_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代码





  • backend_hostname0 = '192.168.1.239'    
  •   

  • backend_port0 = 5444    
  •   

  • backend_weight0 = 1    
  •   

  • backend_data_directory0 = '/usr/postgresql/data'    
  •   

  • backend_hostname1 = '192.168.1.201'    
  •   

  • backend_port1 = 5444    
  •   

  • backend_weight1 = 1    
  •   

  • backend_data_directory1 = '/usr/postgresql/data'    
  •   

  • backend_hostname2 = '192.168.1.201'    
  •   

  • backend_port2 = 5443    
  •   

  • backend_weight2 = 1    
  •   

  • backend_data_directory2 = '/usr/postgresql/data2'   



backend_hostname0 = '192.168.1.239'
backend_port0 = 5444
backend_weight0 = 1
backend_data_directory0 = '/usr/postgresql/data'
backend_hostname1 = '192.168.1.201'
backend_port1 = 5444
backend_weight1 = 1
backend_data_directory1 = '/usr/postgresql/data'
backend_hostname2 = '192.168.1.201'
backend_port2 = 5443
backend_weight2 = 1
backend_data_directory2 = '/usr/postgresql/data2'
  

检验并发查询

重新启动pgpool-II 载入pgpool.conf 的变化,然后我们来检验一下并发查询是否在正常运行。

首先,命名为“bench_parallel” 的分布数据库,通过pgpool-II 创建到每一个节点上:


Java代码





  • $ createdb -p 9999 bench_parallel   



$ createdb -p 9999 bench_parallel
  

接下来,生成测试数据:


Java代码





  • $ pgbench -i -s 3 -p 9999 bench_parallel   



$ pgbench -i -s 3 -p 9999 bench_parallel
  

这时可以用数据库工具分别查看各节点的数据来确认结果。也可以在 Pgpool 的服务端口进入 SQL 操作来查看数据:


Java代码





  • #ebd-psql –p 9999 bench_parallel    
  •   
  • #select * from accounts;   



#ebd-psql –p 9999 bench_parallel
#select * from accounts;
  

此时三个节点的数据可以通过一个共同的接口跟应用进行关联,该接口就是pgpool ,默认端口为9999 。

启动/关闭pgpool-II启动pgpool-II,在终端之上使用如下命令:

Java代码





  • $ pgpool  



$ pgpool
  这个命令会把日志输出在终端上,因此推荐使用如下选项:

Java代码





  • $ 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代码





  • $ pgpool stop  



$ pgpool stop
  如果有客户端正在连接,pgpool-II会等待他们断开,然后才停止。如果需要强制终止,使用下边的命令:

Java代码





  • $ pgpool -m fast stop  



$ pgpool -m fast stop

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302935-1-1.html 上篇帖子: PostgreSQL 查看数据库,表和索引的大小 下篇帖子: java中对PostgreSQL的数据表备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表