我正在对 PostgreSQL 复制进行概念验证。在论坛上讨论后,我们决定使用流式复制,因为与其他解决方案相比,它的性能很好。PostgreSQL 不为流式复制提供自动故障转移。我们可以使用触发文件将从站切换到主站,但它是不可管理的。所以我想要一个具有自动故障转移和高可用性的解决方案。
有不同的解决方案:
我的问题是应该使用哪种解决方案?
下面是一个示例 pgpool 架构:
这意味着您只需要在单个服务器上拥有 pgpool;这是真的?当我查看配置时,我还看到您在其中配置了后端pgpool.conf
;所以它进一步暗示了这一点。但是,它并没有解释为什么我也在后端服务器上看到 pgpool。
在查看文档时,我还看到:
如果您使用的是 PostgreSQL 8.0 或更高版本,强烈建议在 pgpool-II 访问的所有 PostgreSQL 上安装 pgpool_regclass 函数,因为它被 pgpool-II 内部使用。
所以我不知道该怎么想;在所有后端或仅在专用服务器上使用 pgpool 是最佳实践吗?
postgresql architecture scalability pgpool connection-pooling
我在三台服务器上使用 pgpool-II + PostgreSQL 8.4:主 + 备用 1 + 备用 2。复制模式为“on”负载均衡模式为“on”(在主备1之间)
我按照官方教程使用 PITR 配置在线恢复:http : //pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-en.html#online-recovery
脚本“copy-base-backup”中有一个 tar 命令:
tar -C /data -zcf pgsql.tar.gz pgsql
所以我所有的 PG 集群目录都在脚本运行时被复制:
ls -1 /srv/pg/data/
PG_VERSION
archive # directory with postgres archive files
backup_label.old
base
global
pg_clog
pg_hba.conf
pg_ident.conf
pg_log
pg_multixact
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
pg_xlog
pgpool_recovery
pgpool_recovery_pitr
pgpool_remote_start
postgresql.conf
postmaster.opts
postmaster.pid
recovery.conf
recovery.done
Run Code Online (Sandbox Code Playgroud)
如何从主节点和备用节点安全地删除旧的存档日志?我的节点上每天大约有 30Gb 的档案。
我有一个 Rails 应用程序,有 4 个 Unicorn 工人。如何确定我应该使用什么 postgresql 数据库池大小?
如果我有 6 个应用程序连接到这个 postgres 数据库,那会不会有太多连接?我应该改用 pgbouncer 吗?如果是这样,为什么?
我已经使用以下链接配置了一个带有 pgpool2 的 postgres 集群。
复制好像没问题,但是我跑了一些基准测试(pg_bench),性能比单节点低,例如:
pgbench -c 16 -j 16 -T 600 -S bench2 -h "ONE SINGLE POSTGRES NODE" -p 5432 实际处理的事务数:7752147 tps = 12920.095988(包括建立连接)tps = 12921.6(不包括建立连接)48
pgbench -c 16 -j 16 -T 600 -S bench2 -h "PGPOOLNODE" -p 5432 实际处理的事务数:389800 tps = 648.857810(包括建立连接) tps = 648.886713(不包括建立连接)
pgbench -c 16 -j 16 -T 600 -S bench2 -h "MASTERNODE" -p 5432 实际处理的事务数:7093473 tps = 11822.379159(包括建立连接) tps = 11823.337051(不包括建立连接)
每个节点都是默认配置的。所有节点都是相同的虚拟机并在同一网络上。
这是我的 pgpool.conf:
listen_addresses = '*'
port = 5432
socket_dir …
Run Code Online (Sandbox Code Playgroud) 对于运行连接池和负载平衡但没有查询缓存的专用 PGPool 机器,建议使用多少物理内存?
我看到了;num_init_children(96) * max_pool(2) * number_of_backends(2) = 384
中的线条 SHOW pool_pools
每个 PID 的模态平均值似乎约为 99M,有几个 1G 异常值
# top for 20 pgpool processes
$ top -p $(pgrep pgpool | head -20 | tr "\\n" "," | sed 's/,$//')
Tasks: 20 total, 0 running, 20 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.1 us, 4.0 sy, 0.0 ni, 92.2 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
KiB Mem : 1784080 total, 22068 free, 1629960 used, 132052 buff/cache …
Run Code Online (Sandbox Code Playgroud) 根据此处的文档,我想用 PostgreSQL 数据库创建一个 pgpool II。当我尝试安装时,遇到此错误:
configure: error: libpq is not installed or libpq is old
Run Code Online (Sandbox Code Playgroud)
搜索 pgpool 网站,他们提到./configure
使用以下命令运行:
--with-pgsql
Run Code Online (Sandbox Code Playgroud)
或者
--with-pgsql-includedir
Run Code Online (Sandbox Code Playgroud)
或者
--with-pgsql-libdir
Run Code Online (Sandbox Code Playgroud)
但我仍然面临同样的问题。谁能指导我从这里可以做什么?
我正在运行从 CentOS 5 上的 yum 包安装的 PostgreSQL 9.2。
我的两个 postgresql 服务器配置为流复制,工作正常。
Pgpool 配置为主从模式/负载平衡模式。
pgpool.conf:
listen_addresses = '*'
port = 9999
backend_hostname0 = 'master-postgres-ip'
backend_port0 = port-no
backend_weight0 = 1
backend_data_directory0 = 'data-dir'
backend_hostname1 = 'slave-postgres-ip'
backend_port1 = port-no
backend_weight1 = 1
backend_data_directory1 = 'data-dir'
load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode='stream'
Run Code Online (Sandbox Code Playgroud)
我预计所有写入查询都将转到主查询,而读取查询将分布在两个查询之间。但是,所有的查询都只是为了掌握。但是,如果我停止主控,查询将变为从属。
有人可以告诉我可能出了什么问题吗?
pgpool 在启动时给出以下日志:
2015-11-03 17:25:56: pid 21284: LOG: find_primary_node: checking backend no 0
2015-11-03 17:25:56: pid 21284: LOG: find_primary_node: checking backend no 1
2015-11-03 17:25:56: pid 21284: DEBUG: SSL is requested but SSL support is not …
Run Code Online (Sandbox Code Playgroud) pgpool ×8
postgresql ×8
replication ×3
architecture ×1
backup ×1
concurrency ×1
linux ×1
performance ×1
repmgr ×1
scalability ×1
slony ×1