本文主要介绍pgpool复制和负载均衡操作,有很好的参考价值,希望对大家有所帮助。来和边肖一起看看吧。
简介
Pgpool-II是postgresql数据库和客户端之间的中间件,可以提供以下功能:
1.连接池
Pgpool-II保持已经连接到postgresql数据库的连接,并在使用相同参数连接时重用它们,这减少了连接开销,增加了系统的整体吞吐量。
2.复制
Pgpool-II可以管理多个postgresql数据库,激活复制功能,并使在两个或更多postgresql节点中建立实时备份成为可能,这样,如果其中一个节点出现故障,服务可以在没有终端的情况下继续运行。
3.负载平衡
如果数据库是复制的,在任何服务器上执行select查询都将返回相同的结果。Pgpool-II利用复制功能来减少每个postgresql服务器的负载。它通过将选择查询分发到所有可用的服务器来提高系统的整体吞吐量。理想情况下,读取性能应该与postgresql的数量成正比。当大量用户同时执行许多读取查询时,负载平衡功能工作得最好。
4.限制超过限制的连接。
Postgresql将限制当前的最大连接数。当达到这个数目时,新的连接将被拒绝。增加连接数会增加资源消耗,对系统的全局性能有一定的负面影响。Pgpool-II也支持限制最大连接数,但她的方法是将连接放入队列中,而不是立即返回错误。
此外,pgpool-II还支持并行查询,数据被划分到多个服务器上,因此一个查询可以同时在多个服务器上执行,以减少整体执行时间。并行查询在查询大规模数据时非常有效。
测试环境
互联网协议(Internet Protocol)
app应用
版本
10.10.10.56
一种数据库系统
9.2.15
10.10.10.57
一种数据库系统
9.2.15
10.10.10.56
pgpool-II
3.5
描述:两个postgresql、pgpool和一个postgresql在一个服务器上。
测试需求:测试pgpool实现postgresql复制和负载均衡。
安装pgpool
1.源代码安装
wget http://www.pgpool.net/download.php? f=pg pool-II-3 . 5 . 3 . tar . gz
塔尔-zxvf pgpool-II-3.5.3.tar.gz
cd pgpool-II-3.5.3。/configure-prefix=/usr/local/pg pool-with-OpenSSL
# error configure:错误:未安装libpq或libpq太旧
#只需安装yum install postgresql-devel
制作制作安装
2.安装pgpool-regclass
使用PostgreSQL 8.0到PostgreSQL 9.3,强烈建议在需要访问的PostgreSQL中安装pgpool_regclass函数,因为pgpool-II内部使用。如果不这样做,在不同的schema中处理同一个表名会有问题(临时表不会有问题);不需要PostgreSQL 9.4或更高版本。
CD pg pool-II-3 . 5 . 3/src/SQL/pg pool-regclass
制作制作安装
-bash-4.2 $ psql-f pg pool-regclass . SQL模板1
或者
psql模板1
=# CREATE EXTENSION pg pool _ regclass;
执行pgpool-regclass.sql或在通过pgpool-II访问的每个数据库中创建扩展。在执行“psql-f pg pool-reg class . SQL template 1”或创建扩展后创建的数据库中,您不需要这样做,因为这个模板数据库将被克隆到一个新的数据库中。
3.建立insert_lock表
如果在复制模式下使用insert_lock,强烈建议建立用于互斥的pgpool_catalog.insert_lock表。到现在insert_lock还能用。但是,在这种情况下,pgpool-II需要锁定插入的目标表。这种行为类似于pgpool-II 2.2和2.3系列。因为表锁与VACUUM冲突,所以插入操作可能会等待很长时间。
cd pgpool-II-3.5.3/src/sql/
psql -f insert_lock.sql模板1
应在在每台通过pgpool-II访问的数据库中执行insert_lock。你不需要在你执行" psql -f insert_lock.sql模板1 "后建立的数据库中这么做,因为这个模板数据库将被克隆成新建的数据库。
4.安装pgpool_recovery
如果你使用在线回复,需要以下一些函数:pgpool_recovery,pgpool_remote_start,pgpool_switch_xlog。
另外,附带工具pgpoolAdmin控制pgpool-II启停和重新连接后端的一种数据库系统节点,它需要函数pgpool _ pgctl而且pgpoolAdmin需要函数pgpool_pgctl来对一种数据库系统进行停止/重启/重新加载参数操作。
可以使用和安装pgpool_regclass一样的方法安装着四个函数。不过和pgpool_regclass不同的是,你只需要在模板一数据库中安装这些函数。
CD pg池-II-3。5 .3/src/SQL/pg池—恢复
制作制作安装
psql -f pgpool-recovery.sql模板一
或
psql模板一
=#创建扩展pgpool_recovery
配置pgpool
1.配置pcp.conf
pgpool提供pcp接口,可以查看,管理pgpool的状态,并且可以远程操作pgpool,pcp.conf用来对pcp相关命令认证的文件
cd /usr/local/pgpool
cp etc/pcp.conf.sample
bin/pg_md5 -m -u pgpool -p
会自动生成池_密码
postgres:MD 533 c 14731 dfdffsdfsdf 91e 8d 10 C4 BFF 5
cat etc/pcp.conf
pg池:MD 533 c 14731 dfdffsdfsdf 91e 8d 10 C4 BFF 5
2.配置pool_hba.conf
通过pool_hba.conf可以进行相关权限设置,类似于一种数据库系统的pg_hba.conf
cd /usr/local/pgpool
CP etc/pool _ HBA。糖膏剂样本etc/pool _ HBA。会议
bin/pg_md5 -m -u postgres -p
会自动生成池_密码
postgres:MD 533 c 14731 dfdffsdfsdf 91e 8d 10 C4 BFF 5
**注意:
1.pool_hba.conf中的加密方式必须和pg_hba.conf中的加密方式一样,都为mds,信任或其他方式。若不一样会报错。
pool_hba.conf中的用户必须在一种数据库系统数据库中存在
**
3.配置pgpool.conf
cd /usr/local/pgpool
CP etc/pg池。糖膏剂样本etc/pg池。会议
#创建相关目录
mkdir -p /var/run/pgpool
mkdir -p /usr/local/pgpool/logs
vim etc/pgpool.conf
listen_addresses='* '
端口=9999
socket_dir='/tmp '
倾听_积压_乘数=2
序列化接受=关闭
pcp_listen_addresses='* '
pcp_port=9898
pcp_socket_dir='/tmp '
后端主机名0='10.10.10.56 '
后端端口0=5432
后端权重0=1
后端数据目录0='/data/pgsql/data '
后端标志0='允许故障转移'
后端主机名1='10.10.10.57 '
后端端口1=5432
后端权重1=1
后端数据目录1='/data/pgsql/data '
后端_标志1='允许故障转移'
启用池hba=开
池密码='池密码'
调试级别=0
PID _ file _ name='/var/run/pg pool/pg pool。PID '
logdir='/usr/local/pgpool/logs '
复制模式=开
负载平衡模式=开
主_从_模式=关
其中:
复制模式=开复制模式打开,可以在两台一种数据库系统数据库上进行实时备份
负载平衡模式=开负载均衡模式打开,可以实现负载均衡
3.启动pgpool
/usr/local/pgpool/bin/pgpool
4.连接pgpool
psql-U postgres-p 9999-h 10。10 .10 .56
用户postgres的密码:
psql (9.2.15)
键入“救命”获取帮助。
postgres=#
测试
1.创建工作台_复制数据库
psql-U postgres-p 9999-h 10。10 .10 .56
用户postgres的密码:
psql (9.2.15)
键入“救命”获取帮助。
postgres=# create database bench _ replication;
我们可以分别登陆56、57上的一种数据库系统进行查看
psql -U postgres -p 5432 -h
用户postgres的密码:
psql (9.2.15)
键入“救命”获取帮助。
postgres=# \list
数据库列表
名称|所有者|编码|校对|类型|访问权限
- - - - - -
bench _ replication | postgres | UTF8 | en _ US .UTF-8 |美国UTF-8 |。
postgres | postgres | UTF8 | en_US .UTF-8 |美国UTF-8 |。
template0 | postgres | UTF8 | en_US .UTF-8 |美国100 . UTF-8 |=c/postgres
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US .UTF-8 |美国100 . UTF-8 |=c/postgres
| | | | | postgres=CTc/postgres
(4行)
可以看出两个postgresql都创建了bench_replication数据库,所以pgpool的复制是成功的。
2.pgbench测试
#安装pgbench
yum安装postgresql-contrib
pg bench-I-h 10 . 10 . 10 . 56-U postgres-p 9999 bench _ replication
在所有pgsql节点中,下面列出的表和数据都已建立,这表明复制正在正常运行。
表名
行数
分支
一个
讲述者
10
帐目
100000
历史
0
总结
以上只是简单介绍了pgpool-II的复制和负载均衡作为介绍,还有很多功能需要我们继续探索。
补充:pgpool使用中遇到的坑总结
1,复制模式可靠性低
最早使用的是复制模式,数据发送到pgpool,然后pgpool分别写入N个postgres。发现数据不一致经常发生,导致最后只有一个数据库可用。
2,online recovery
基于PIRT的在线恢复配置复杂。
3,基于流复制的主备模式
有了postgres9的这个新特性,早期的配置测试很容易,故障转移也很容易使用。但是,当服务连接到pgpool时,事务经常报告错误Postgres Error:未能从后端读取kind。这个我在上一篇文章中提到过,但是至今无法解决。
4,连接数的困扰
Num_init_children最初被理解为池的大小。超过了就会自动扩大,但实际上往往是不够的。确切地说,这个值也是pgpool-II支持的客户端发起的最大并发连接数。
所以这个值要尽可能大,这个值的改变必须重启pgpool。
5,client_idle_limit不要配置
当客户端在执行最后一个查询后空闲了client_idle_limit秒时,将会断开与该客户端的连接。连接不应该由pgpool断开,而应该由应用程序本身断开。如果pgpool断开连接,客户端将不可用。
当然,pgpool还有一个优势,就是能够快速找到连接的应用。因为每个连接都是一个独立的进程,所以启动后会有num_init_children个进程可以接受连接。
使用# ps -ef |grep pgpool查看
pg:等待连接请求的进程是一个空进程,正在等待连接。
PG:Postgres DBTest 10 . 115 . 53 . 167(51883)IDLE这些进程都在使用中,你可以看到它们连接到了哪个机器、用户和数据库。
当然,也可以使用select * from pg_stat_activity来检查连接。
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。如有错误或不足之处,请不吝赐教。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。