• 售前

  • 售后

热门帖子
入门百科

pgpool复制和负载平衡利用

[复制链接]
温室小书生室d 显示全部楼层 发表于 2021-10-26 14:04:41 |阅读模式 打印 上一主题 下一主题
简介

pgpool-II是一个位于postgresql数据库和客户端之间的中央件,可以提供一下几个功能:
1.毗连池
pgpool-II保持已经毗连到postgresql数据库的毗连,并在利用相同参数毗连进来时重用他们,减少了毗连开销,并增长了体系的总体吞吐量。
2.复制
pgpool-II可以管理多个postgresql数据库,激活复制功能并使在2台或多台postgresql节点中创建一个及时备份称为可能,如许,如果此中一台节点失效,服务可以不被终端继承运行。
3.负载平衡
如果数据库进行了复制,则在任何一台服务器中实行一个select查询将返回相同的结果。pgpool-II利用了复制的功能以低落每台postgresql服务器的负载。它通太过发select查询到所有可用的服务器中,加强了体系的团体吞吐量。在理想的状况下,读性能应该和postgresql数量成正比。负载平衡功能在大量用户同时实行很多读查询的场景中工作结果最好。
4.限制凌驾限度的毗连
postgresql会限制当前的最大毗连数,当到达这个数量时,新的毗连将被拒绝。增长这个毗连数会增长资源斲丧而且对体系的全局性能有一定的负面影响。pgpool-II也支持限制最大毗连数,但她的做法是将毗连放入队列,而不是立刻返回一个错误。
另外,pgpool-II也支持并行查询,数据被分割到多台服务器上,以是一个查询可以在多台服务器上同时实行,以减少总体实行时间。并行查询在查询大规模数据的时间非常有效。
测试环境

      IP      应用      版本                  10.10.10.56      postgresql      9.2.15              10.10.10.57      postgresql      9.2.15              10.10.10.56      pgpool-II      3.5    环境说明:两台postgresql,pgpool和此中一台postgresql在一台服务器上。
测试需求:测试pgpool实现postgresql的复制和负载平衡
安装pgpool

1.源码安装
  1. wget http://www.pgpool.net/download.php?f=pgpool-II-3.5.3.tar.gz
  2. tar -zxvf pgpool-II-3.5.3.tar.gz
  3. cd pgpool-II-3.5.3
  4. ./configure --prefix=/usr/local/pgpool --with-openssl
  5. #报错configure: error: libpq is not installed or libpq is old
  6. #安装 yum install postgresql-devel即可
  7. make && make install
复制代码
2.安装pgpool-regclass
利用 PostgreSQL 8.0 至 PostgreSQL 9.3,猛烈保举在需要访问的 PostgreSQL 中安装 pgpool_regclass 函数,因为它被 pgpool-II 内部利用。 如果不如许做,在差别的 schema 中处置处罚相同的表名会出现题目(临时表不会出题目);而PostgreSQL 9.4或更高版本则不需要
  1. cd pgpool-II-3.5.3/src/sql/pgpool-regclass
  2. make && make install
  3. -bash-4.2$ psql -f pgpool-regclass.sql template1
  4. psql template1
  5. =# CREATE EXTENSION pgpool_regclass;
复制代码
应在每台通过 pgpool-II 访问的数据库中实行 pgpool-regclass.sql 或者 CREATE EXTENSION。 你不需要在你实行“psql -f pgpool-regclass.sql template1” 或者 CREATE EXTENSION 后创建的数据库中这么做, 因为这个模板数据库将被克隆成新建的数据库。
3.创建insert_lock表
如果你在复制模式中利用了 insert_lock ,猛烈保举创建 pgpool_catalog.insert_lock 表,用于互斥。 到现在为止,insert_lock 还可以或许工作。但是,在这种情况下,pgpool-II 需要锁定插入的目的表。 这种举动和 pgpool-II 2.2 和 2.3 系列雷同。由于表锁与 VACUUM 辩论,以是 INSERT 利用可能因而等待很长时间。
  1. cd pgpool-II-3.5.3/src/sql/
  2. psql -f insert_lock.sql tempalte1
复制代码
应在在每台通过 pgpool-II 访问的数据库中实行 insert_lock.sql。 你不需要在你实行“psql -f insert_lock.sql template1”后创建的数据库中这么做, 因为这个模板数据库将被克隆成新建的数据库。
4.安装pgpool_recovery
如果你利用在线回复,需要以下一些函数: pgpool_recovery, pgpool_remote_start, pgpool_switch_xlog。
另外,附带工具pgpoolAdmin 控制 pgpool-II 启停和重新毗连后端的 PostgreSQL 节点, 它需要函数 pgpool_pgctl;而且 pgpoolAdmin 需要函数 pgpool_pgctl 来对 PostgreSQL 进行停止/重启/重新加载参数利用。
可以利用和安装 pgpool_regclass 一样的方法安装着四个函数。 不外和 pgpool_regclass 差别的是,你只需要在 template1 数据库中安装这些函数。
  1. cd pgpool-II-3.5.3/src/sql/pgpool-recovery
  2. make && make install
  3. psql -f pgpool-recovery.sql template1
  4. psql template1
  5. =# CREATE EXTENSION pgpool_recovery
复制代码
配置pgpool

1.配置pcp.conf
pgpool提供pcp接口,可以查看,管理pgpool的状态,而且可以远程利用pgpool,pcp.conf用来对pcp相干下令认证的文件
  1. cd /usr/local/pgpool
  2. cp etc/pcp.conf.sample etc/pcp.conf
  3. bin/pg_md5 -m -u pgpool -p
  4. 会自动生成pool_passwd
  5. postgres:md533c14731dfdfsdfsdf91e8d10c4bff5
  6. cat etc/pcp.conf
  7. pgpool:md533c14731dfdfsdfsdf91e8d10c4bff5
复制代码
2.配置pool_hba.conf
通过pool_hba.conf可以进行相干权限设置,雷同于postgresql的pg_hba.conf
  1. cd /usr/local/pgpool
  2. cp etc/pool_hba.conf.sample etc/pool_hba.conf
  3. bin/pg_md5 -m -u postgres -p
  4. 会自动生成pool_passwd
  5. postgres:md533c14731dfdfsdfsdf91e8d10c4bff5
复制代码
**注意:
1.pool_hba.conf中的加密方式必须和pg_hba.conf中的加密方式一样,都为mds、trust或其他方式。若不一样会报错。
2.pool_hba.conf中的用户必须在postgresql数据库中存在
**
3.配置pgpool.conf
  1. cd /usr/local/pgpool
  2. cp etc/pgpool.conf.sample etc/pgpool.conf
  3. #创建相关目录
  4. mkdir -p /var/run/pgpool
  5. mkdir -p /usr/local/pgpool/logs
  6. vim etc/pgpool.conf
  7. listen_addresses = '*'
  8. port = 9999
  9. socket_dir = '/tmp'
  10. listen_backlog_multiplier = 2
  11. serialize_accept = off
  12. pcp_listen_addresses = '*'
  13. pcp_port = 9898
  14. pcp_socket_dir = '/tmp'
  15. backend_hostname0 = '10.10.10.56'
  16. backend_port0 = 5432
  17. backend_weight0 = 1
  18. backend_data_directory0 = '/data/pgsql/data'
  19. backend_flag0 = 'ALLOW_TO_FAILOVER'
  20. backend_hostname1 = '10.10.10.57'
  21. backend_port1 = 5432
  22. backend_weight1 = 1
  23. backend_data_directory1 = '/data/pgsql/data'
  24. backend_flag1 = 'ALLOW_TO_FAILOVER'
  25. enable_pool_hba = on
  26. pool_passwd = 'pool_passwd'
  27. debug_level = 0
  28. pid_file_name = '/var/run/pgpool/pgpool.pid'
  29. logdir = '/usr/local/pgpool/logs'
  30. replication_mode = on
  31. load_balance_mode = on
  32. master_slave_mode = off
复制代码
此中:
replication_mode = on 复制模式打开,可以在两台postgresql数据库上进行及时备份
load_balance_mode = on 负载平衡模式打开,可以实现负载平衡
3.启动pgpool
  1. /usr/local/pgpool/bin/pgpool
复制代码
4.毗连pgpool
  1. psql -U postgres -p 9999 -h 10.10.10.56
  2. Password for user postgres:
  3. psql (9.2.15)
  4. Type "help" for help.
  5. postgres=#
复制代码
测试

1.创建bench_replication数据库
  1. psql -U postgres -p 9999 -h 10.10.10.56
  2. Password for user postgres:
  3. psql (9.2.15)
  4. Type "help" for help.
  5. postgres=#create database bench_replication;
复制代码
我们可以分别登岸56、57上的postgresql进行查看
  1. psql -U postgres -p 5432 -h 10.10.10.56
  2. Password for user postgres:
  3. psql (9.2.15)
  4. Type "help" for help.
  5. postgres=# \list
  6.           List of databases
  7.   Name  | Owner | Encoding | Collate | Ctype | Access privileges
  8. -------------------+----------+----------+-------------+-------------+-----------------------
  9. bench_replication | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 |
  10. postgres   | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 |
  11. template0   | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/postgres   +
  12.      |   |   |    |    | postgres=CTc/postgres
  13. template1   | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/postgres   +
  14.      |   |   |    |    | postgres=CTc/postgres
  15. (4 rows)
复制代码
可以看到两台postgresql都创建了bench_replication数据库,因此pgpool的复制是乐成的。
2.pgbench测试
  1. #安装pgbench
  2. yum install postgresql-contrib
  3. pgbench -i -h 10.10.10.56 -U postgres -p 9999 bench_replication
复制代码
在所有pgsql节点中,下面列出的表和数据都被创建了,说明复制运行正常。
      表名      行数                  branches      1              tellers      10              accounts      100000              history      0    总结

以上只是简单介绍了pgpool-II的复制和负载平衡作为入门,另有很多功能没有介绍,需要我们继承探索。
补充:pgpool利用中碰到的坑总结
1,复制模式可靠性低

最早时间利用的是复制模式,数据到pgpool然后pgpool分别写入n个postgres.发现经常出现数据不一致题目,导致最终只有一个数据库可用
2,online recovery

基于PIRT的online recovery 配置复杂
3,基于流复制的主备模式

这个用到postgres9的新特性,前期配置测试都很easy,failover 也很好用,但是当服务毗连上pgpool时,事件往往报错 postgres error : failed to read kind from backend,这个我在之前的文章中提到过,至今无法办理。
4,毗连数的困扰

num_init_children 原来明确成了一个池的巨细,如果凌驾了会自动扩增,但是现实上往往不够用,确切的说该值也是 pgpool-II 支持的从客户端发起的最大并发毗连数。
以是这个值配的尽量大些,而且对这个值的更改必须重启pgpool.
5,client_idle_limit不要配置

当一个客户端在实行最后一条查询后如果空闲到了 client_idle_limit 秒数, 到这个客户端的毗连将被断开.毗连不应该让pgpool来断开,应该是应用主动去断开。如果让pgpool去断开,会导致客户端不可用。
固然pgpool也有一个利益,可以或许快速找到毗连的应用。因为每个毗连都是单独的历程,以是启动后会有num_init_children 个历程可以担当毗连
利用# ps -ef |grep pgpool 可以看到
pgpool: wait for connection request 的历程是空历程,等待毗连。
pgpool: postgres dbtest 10.115.53.167(51883) idle 这些历程是利用中的历程,而且可以看到是来自哪台呆板,什么用户,毗连的是什么数据库。
固然利用select * from pg_stat_activity 也能查到 毗连情况
以上为个人履历,盼望能给大家一个参考,也盼望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作