首页 > 解决方案 > PostgreSQL + pgpool 复制与丢失平衡

问题描述

我有一个带有 pgpool 的 PostgreSQL 复制 MS 作为主服务器上的负载平衡器。复制进展顺利,过程没有延迟。问题是即使我为每台服务器配置了不同于 50% 的余额,主服务器接收的请求也比从服务器多。

这是后端重量为 M(1)-S(2) 的 pgpool show_pool_nodes

node_id |  hostname   | port | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay
---------+-------------+------+--------+-----------+---------+------------+-------------------+-------------------
 0       | master-ip   | 9999 | up     | 0.333333  | primary | 56348331   | false             | 0
 1       | slave-ip    | 9999 | up     | 0.666667  | standby | 3691734    | true              | 0

如您所见,主服务器收到的请求比从服务器多 10 倍

这是后端重量为 M(1)-S(5) 的 pgpool show_pool_nodes

 node_id |  hostname   | port | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay
---------+-------------+------+--------+-----------+---------+------------+-------------------+-------------------
 0       | master-ip   | 9999 | up     | 0.166667  | primary | 10542201   | false             | 0
 1       | slave-ip    | 9999 | up     | 0.833333  | standby | 849494     | true              | 0

当我分配 M(1)-S(1) 时,行为非常相似

现在我想知道我是否错过了对 pgpool 功能的理解:

  1. Pgpool 仅平衡读取查询(因为写入查询始终发送到主服务器)

  2. 后端权重参数仅用于在平衡模式下计算分布。值越大,就越有可能为 pgpool 选择,所以如果一个服务器的 lb_weight 越大,它被选择的次数就越多。

如果我是对的,为什么会发生这种情况?有没有一种方法可以实际分配 select_cnt 查询的适当平衡配置?我的意图是通过读取查询对从属设备过度收费,并让只掌握“少数”读取查询,因为它正在占用所有写入。

标签: databasepostgresqlload-balancingpgpool

解决方案


您可以尝试在 pgpool.conf 文件中调整以下一项配置: 1. wal lag 延迟大小 delay_threshold = 10000000

它用于让 pgpool 知道从属 postgresql wal 是否太延迟而无法使用。更改较大的更多查询可以传递给从站。更改小更多查询将转到掌握。

此外,pgbench 测试参数也是关键。使用 -C 参数,它将让每个查询连接,否则每个会话连接。

pgpoll 负载均衡决策依赖于参数组合矩阵。不仅仅是一个参数

这里是参考。 https://www.pgpool.net/docs/latest/en/html/runtime-config-load-balancing.html#GUC-LOAD-BALANCE-MODE


推荐阅读