我正在使用Node js和Postgresql,并试图在连接实现中最有效率.
我看到pg-promise建立在node-postgres之上,而node-postgres使用pg-pool来管理池.
我还读到"一次超过100个客户端是一件非常糟糕的事情"(node-postgres).
我正在使用pg-promise并想知道:
我希望从以下位置删除所有线描字符:
PGPASSWORD="..." psql -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner
node_id | hostname | port | status | lb_weight | role
---------+---------------+------+--------+-----------+---------
0 | 10.20.30.40 | 5432 | 2 | 0.500000 | primary
1 | 10.20.30.41 | 5432 | 2 | 0.500000 | standby
(2 rows)
Run Code Online (Sandbox Code Playgroud)
添加该-t选项可以去掉页眉和页脚,但竖线仍然存在:
PGPASSWORD="..." psql -t -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner
0 | 10.20.30.40 | 5432 | 2 | 0.500000 | primary
1 | …Run Code Online (Sandbox Code Playgroud) 避免terminating connection due to conflict with recovery错误,也有可接受的replication lag。
Google Cloud PostgreSQL 9.6,复制开启(使用流式复制),PGPool-II 设置为只做负载均衡并且在从属设备上具有以下属性:
work_mem 3276800
commit_delay 100
max_wal_size 940
max_standby_archive_delay -1
max_standby_streaming_delay -1
hot_standby_feedback on
Run Code Online (Sandbox Code Playgroud)
机器配置:
vCPU:8,内存:30 GB,SSD 存储:76 GB
工作量:
Master满载writes和reads,slave也满载了很多reads。查询的最大长度可能约为8-10秒。
我们之前尝试过的:
设置max_standby_archive_delay和max_standby_streaming_delay对900000(900秒),但是我们看到了很多的conflict错误。
设置max_standby_archive_delay和max_standby_streaming_delay到-1,这使冲突错误消失,但是滞后增加了很多(在某处23mins)
设置max_standby_archive_delay和max_standby_streaming_delay到-1和hot_standby_feedback 到on。这也使冲突错误消失了,但是我们仍然看到复制滞后(大约500 secs …
我有用于 HA 的 pgpool-II 和用于自动故障转移的 repmgr。Pgpool-II 也可以运行故障转移 我只是想知道使用 pgpool 或 repmgr 进行自动故障转移?如果 pgpool 可以进行故障转移,我是否需要使用 repmgr?并使用shell脚本来晋升新高手?
我试图找到可用于 Postgres DB 的不同中间件。每个人都在推荐 PgBouncer 和 PgPool II。我可以使用的其他中间件列表是什么。
阅读 PgPool 的文档后,我很困惑哪个选项最适合我的用例。我需要一个主数据库实例来服务查询,以及主数据库实例的 1 个或多个副本(备用)用于灾难恢复场景。对我来说非常重要的是,所有成功提交到主节点的事务都保证最终被复制到副本,这样当发生故障转移时,副本数据库实例将拥有直到并包括应用于其的最新事务的所有事务。
在异步复制方面,我在 PgPool 文档中没有看到任何提及是否是这种情况,但是,它确实提到了一些潜在的数据丢失,这对我来说有点太模糊了,无法得出任何结论。
为了防止这种数据丢失,文档建议使用同步流复制,在主节点中提交事务之前,确保所有副本也应用了该更改。因此,这种方法比异步方法慢,但如果没有数据丢失,它是可行的。
同步复制是允许我实现用例的唯一方法吗?还是异步复制也可以实现这一点?另外,异步复制中潜在的数据丢失是什么构成的?
昨天我用 pgbench 测试了 pgpool :
pgbench -c 30 -T 20 -r pgbench -p9999 -h192.168.8.28
Run Code Online (Sandbox Code Playgroud)
并发连接数为 30,pgpool 默认 num_init_children 为 32。
因此,当我设置 -c 33 时,除非我爆发,否则测试将被阻止。
我的问题是:
If my concurrent connections online is 10000, should I set num_init_children=10000?
Run Code Online (Sandbox Code Playgroud)
num_init_children=10000 意味着 pgpool 以 10000 个进程开始,这很糟糕。
有什么不对 ?
如何使用 10000 个并发连接配置 pgpool?
我有一个启用了内存缓存的 pgpool 3.5.4,我用它连接到 Redshift。
我写了两个简单的程序,一个用 Java(JDBC postgresql-9.4.1212.jre6.jar)和另一个用 Python(使用 psycopg2 postgres 包)连接到 pgpool,并执行一个简单的查询(例如:select * from customer限制为 10;) 我注意到了奇怪和不同的行为。我还使用命令行工具 psql 运行了查询。
1) 在启用缓存的情况下将 JDBC 与 pgpool 一起使用我收到一个错误
2016-11-15 10:56:27:pid 31043:致命:后端抛出错误消息
2016-11-15 10:56:27:pid 31043:详细信息:由于后端错误而退出当前会话
2016-11-15 10:56:27:pid 31043:提示:后端错误:“门户“pgpool31043”不存在”
2)在禁用缓存的情况下将 JDBC 与 pgpool 一起使用它可以工作
3) 在 pgpool 中使用 psycopg2 或 psql 命令行并启用或禁用缓存,它可以工作
有人能帮我理解为什么只有 JDBC 不起作用吗?
在过去的几周里,我一直在调整和搞乱PostgreSQL,我将在下一个项目中使用它.
我的规格是:
我试过的事情:
Pgtune
PgBouncer&Pgpool(连接池和负载平衡)
调整php-fpm和nginx(worker_processes,worker_connections,pm.max_children等)
Linux文件句柄限制和套接字调整.
我正在测试它通过使用ApacheBench调用网页来插入.这是实用的吗?
ab -n 17500 -c 1750 -r http://example.com/insert.php
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能同时处理1700-2000连接而不丢弃任何事务(通常在nginx错误日志中过早关闭连接或资源暂时不可用或抱歉, PostgreSQL 已经返回太多客户端).
我为php-fpm尝试了TCP/IP和unix socket,而TCP/IP似乎比unix socket更具可扩展性.
PHP可以使用连接池吗?因为我从Web服务器调用数据库的方式仍然相同(对pgpool或pgbouncer进行了大量的单独连接).
我的目标是同时处理至少10,000个事务.决定因素是什么?它是web服务器与db(php-fpm)或PostgreSQL本身之间的瓶颈吗?通常,大公司(PHP Web应用程序)如何处理这样的卷?
我有一个关于在使用PostgreSQL和Windows服务器时负载平衡的可能性的问题.在Unix系统上,这可以通过使用pgpool-II实现.如何在Windows中实现相同的目标?
我知道在复制时你不能混合使用系统.Pgpool文档说明:
我可以将PostgreSQL的不同平台混合为pgpool-II后端,例如Linux和Windows吗?
在流复制模式下,没有
那个不同的场景怎么样?我可以在Unix机器上运行pgpool,并在Windows服务器池上配置复制和负载平衡吗?
我正在使用Windows Server 2008 R2以防万一.
我已经开始pgpool使用命令
sudo pgpool -n &
Run Code Online (Sandbox Code Playgroud)
它开始在终端上给出以下消息:
2012-05-04 10:54:29 日志:pid 4109:pgpool-II 成功启动。版本 2.3.2.1 (tomiteboshi)
但是当我尝试运行以下命令时:
createdb -p 9999 bench_replication
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
createdb:无法连接到数据库 postgres:无法连接到服务器:没有这样的文件或目录。服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.9999”上的连接?
当我将端口从 9999 更改为 5432 时,bench_replication只会在本地节点上创建数据库,而不会在从节点上创建数据库。但是,教程说要在此命令中提及端口 9999,以便bench_replication通过pgpool.
为了确认是否pgpool真的在运行,我停止pgpool使用命令
2012-05-04 10:58:50 LOG: pid 4109: received smart shutdown request
stop request sent to pgpool. waiting for termination...done.
[1]+ Done sudo -A pgpool -n
Run Code Online (Sandbox Code Playgroud)
这证实了pgpool实际上正在运行。我究竟做错了什么?我已经更改pgpool了网络上标准教程中提到的所有配置文件。
pgpool ×11
postgresql ×11
replication ×3
pgbouncer ×2
benchmarking ×1
concurrency ×1
connection ×1
database ×1
jdbc ×1
nginx ×1
node.js ×1
pg-promise ×1
psql ×1
repmgr ×1
sockets ×1
windows ×1